From 9e75634082de972b663d946db87cc14fa496cfdb Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Wed, 8 Jan 2020 12:39:52 -0800 Subject: [PATCH] adb: avoid consuming input in `adb remount`. Bug: https://issuetracker.google.com/146163747 Test: dd if=/dev/zero bs=1024 count=1 | (adb remount; wc) Change-Id: I700090cd0bbae2d76569008f3c1a116336951c0a --- adb/client/commandline.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/adb/client/commandline.cpp b/adb/client/commandline.cpp index 813a8a913..680173a10 100644 --- a/adb/client/commandline.cpp +++ b/adb/client/commandline.cpp @@ -790,6 +790,15 @@ static int adb_abb(int argc, const char** argv) { service_string); } +static int adb_shell_noinput(int argc, const char** argv) { +#if !defined(_WIN32) + unique_fd fd(adb_open("/dev/null", O_RDONLY)); + CHECK_NE(STDIN_FILENO, fd.get()); + dup2(fd.get(), STDIN_FILENO); +#endif + return adb_shell(argc, argv); +} + static int adb_sideload_legacy(const char* filename, int in_fd, int size) { std::string error; unique_fd out_fd(adb_connect(android::base::StringPrintf("sideload:%d", size), &error)); @@ -1711,7 +1720,7 @@ int adb_commandline(int argc, const char** argv) { if (CanUseFeature(features, kFeatureRemountShell)) { std::vector args = {"shell"}; args.insert(args.cend(), argv, argv + argc); - return adb_shell(args.size(), args.data()); + return adb_shell_noinput(args.size(), args.data()); } else if (argc > 1) { auto command = android::base::StringPrintf("%s:%s", argv[0], argv[1]); return adb_connect_command(command);