Loading debuggerd/debuggerd_test.cpp +12 −11 Original line number Original line Diff line number Diff line Loading @@ -176,7 +176,7 @@ CrasherTest::~CrasherTest() { if (crasher_pid != -1) { if (crasher_pid != -1) { kill(crasher_pid, SIGKILL); kill(crasher_pid, SIGKILL); int status; int status; waitpid(crasher_pid, &status, WUNTRACED); TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, WUNTRACED)); } } android::base::SetProperty(kWaitForGdbKey, previous_wait_for_gdb ? "1" : "0"); android::base::SetProperty(kWaitForGdbKey, previous_wait_for_gdb ? "1" : "0"); Loading @@ -196,7 +196,8 @@ void CrasherTest::FinishIntercept(int* result) { InterceptResponse response; InterceptResponse response; // Timeout for tombstoned intercept is 10 seconds. // Timeout for tombstoned intercept is 10 seconds. ssize_t rc = TIMEOUT(20, read(intercept_fd.get(), &response, sizeof(response))); ssize_t rc = TIMEOUT(20, TEMP_FAILURE_RETRY(read(intercept_fd.get(), &response, sizeof(response)))); if (rc == -1) { if (rc == -1) { FAIL() << "failed to read response from tombstoned: " << strerror(errno); FAIL() << "failed to read response from tombstoned: " << strerror(errno); } else if (rc == 0) { } else if (rc == 0) { Loading Loading @@ -233,7 +234,7 @@ void CrasherTest::FinishCrasher() { FAIL() << "crasher pipe uninitialized"; FAIL() << "crasher pipe uninitialized"; } } ssize_t rc = write(crasher_pipe.get(), "\n", 1); ssize_t rc = TEMP_FAILURE_RETRY(write(crasher_pipe.get(), "\n", 1)); if (rc == -1) { if (rc == -1) { FAIL() << "failed to write to crasher pipe: " << strerror(errno); FAIL() << "failed to write to crasher pipe: " << strerror(errno); } else if (rc == 0) { } else if (rc == 0) { Loading @@ -243,7 +244,7 @@ void CrasherTest::FinishCrasher() { void CrasherTest::AssertDeath(int signo) { void CrasherTest::AssertDeath(int signo) { int status; int status; pid_t pid = TIMEOUT(10, waitpid(crasher_pid, &status, 0)); pid_t pid = TIMEOUT(10, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); if (pid != crasher_pid) { if (pid != crasher_pid) { printf("failed to wait for crasher (expected pid %d, return value %d): %s\n", crasher_pid, pid, printf("failed to wait for crasher (expected pid %d, return value %d): %s\n", crasher_pid, pid, strerror(errno)); strerror(errno)); Loading Loading @@ -441,7 +442,7 @@ TEST_F(CrasherTest, wait_for_gdb) { FinishCrasher(); FinishCrasher(); int status; int status; ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, WUNTRACED)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, WUNTRACED))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGSTOP, WSTOPSIG(status)); ASSERT_EQ(SIGSTOP, WSTOPSIG(status)); Loading Loading @@ -611,7 +612,7 @@ static pid_t seccomp_fork_impl(void (*prejail)()) { PLOG(FATAL) << "tmpfile failed"; PLOG(FATAL) << "tmpfile failed"; } } unique_fd tmp_fd(dup(fileno(tmp_file))); unique_fd tmp_fd(TEMP_FAILURE_RETRY(dup(fileno(tmp_file)))); if (!android::base::WriteStringToFd(policy, tmp_fd.get())) { if (!android::base::WriteStringToFd(policy, tmp_fd.get())) { PLOG(FATAL) << "failed to write policy to tmpfile"; PLOG(FATAL) << "failed to write policy to tmpfile"; } } Loading Loading @@ -824,7 +825,7 @@ TEST_F(CrasherTest, competing_tracer) { FinishCrasher(); FinishCrasher(); int status; int status; ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, 0)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); Loading @@ -839,7 +840,7 @@ TEST_F(CrasherTest, competing_tracer) { regex += R"( \(.+debuggerd_test)"; regex += R"( \(.+debuggerd_test)"; ASSERT_MATCH(result, regex.c_str()); ASSERT_MATCH(result, regex.c_str()); ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, 0)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); Loading @@ -853,7 +854,7 @@ TEST_F(CrasherTest, fdsan_warning_abort_message) { StartProcess([]() { StartProcess([]() { android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE); android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE); unique_fd fd(open("/dev/null", O_RDONLY | O_CLOEXEC)); unique_fd fd(TEMP_FAILURE_RETRY(open("/dev/null", O_RDONLY | O_CLOEXEC))); if (fd == -1) { if (fd == -1) { abort(); abort(); } } Loading Loading @@ -888,13 +889,13 @@ TEST(crash_dump, zombie) { raise(DEBUGGER_SIGNAL); raise(DEBUGGER_SIGNAL); errno = 0; errno = 0; rc = waitpid(-1, &status, __WALL | __WNOTHREAD); rc = TEMP_FAILURE_RETRY(waitpid(-1, &status, __WALL | __WNOTHREAD)); if (rc != -1 || errno != ECHILD) { if (rc != -1 || errno != ECHILD) { errx(2, "second waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); errx(2, "second waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); } } _exit(0); _exit(0); } else { } else { rc = waitpid(forkpid, &status, 0); rc = TEMP_FAILURE_RETRY(waitpid(forkpid, &status, 0)); ASSERT_EQ(forkpid, rc); ASSERT_EQ(forkpid, rc); ASSERT_TRUE(WIFEXITED(status)); ASSERT_TRUE(WIFEXITED(status)); ASSERT_EQ(0, WEXITSTATUS(status)); ASSERT_EQ(0, WEXITSTATUS(status)); Loading Loading
debuggerd/debuggerd_test.cpp +12 −11 Original line number Original line Diff line number Diff line Loading @@ -176,7 +176,7 @@ CrasherTest::~CrasherTest() { if (crasher_pid != -1) { if (crasher_pid != -1) { kill(crasher_pid, SIGKILL); kill(crasher_pid, SIGKILL); int status; int status; waitpid(crasher_pid, &status, WUNTRACED); TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, WUNTRACED)); } } android::base::SetProperty(kWaitForGdbKey, previous_wait_for_gdb ? "1" : "0"); android::base::SetProperty(kWaitForGdbKey, previous_wait_for_gdb ? "1" : "0"); Loading @@ -196,7 +196,8 @@ void CrasherTest::FinishIntercept(int* result) { InterceptResponse response; InterceptResponse response; // Timeout for tombstoned intercept is 10 seconds. // Timeout for tombstoned intercept is 10 seconds. ssize_t rc = TIMEOUT(20, read(intercept_fd.get(), &response, sizeof(response))); ssize_t rc = TIMEOUT(20, TEMP_FAILURE_RETRY(read(intercept_fd.get(), &response, sizeof(response)))); if (rc == -1) { if (rc == -1) { FAIL() << "failed to read response from tombstoned: " << strerror(errno); FAIL() << "failed to read response from tombstoned: " << strerror(errno); } else if (rc == 0) { } else if (rc == 0) { Loading Loading @@ -233,7 +234,7 @@ void CrasherTest::FinishCrasher() { FAIL() << "crasher pipe uninitialized"; FAIL() << "crasher pipe uninitialized"; } } ssize_t rc = write(crasher_pipe.get(), "\n", 1); ssize_t rc = TEMP_FAILURE_RETRY(write(crasher_pipe.get(), "\n", 1)); if (rc == -1) { if (rc == -1) { FAIL() << "failed to write to crasher pipe: " << strerror(errno); FAIL() << "failed to write to crasher pipe: " << strerror(errno); } else if (rc == 0) { } else if (rc == 0) { Loading @@ -243,7 +244,7 @@ void CrasherTest::FinishCrasher() { void CrasherTest::AssertDeath(int signo) { void CrasherTest::AssertDeath(int signo) { int status; int status; pid_t pid = TIMEOUT(10, waitpid(crasher_pid, &status, 0)); pid_t pid = TIMEOUT(10, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); if (pid != crasher_pid) { if (pid != crasher_pid) { printf("failed to wait for crasher (expected pid %d, return value %d): %s\n", crasher_pid, pid, printf("failed to wait for crasher (expected pid %d, return value %d): %s\n", crasher_pid, pid, strerror(errno)); strerror(errno)); Loading Loading @@ -441,7 +442,7 @@ TEST_F(CrasherTest, wait_for_gdb) { FinishCrasher(); FinishCrasher(); int status; int status; ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, WUNTRACED)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, WUNTRACED))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGSTOP, WSTOPSIG(status)); ASSERT_EQ(SIGSTOP, WSTOPSIG(status)); Loading Loading @@ -611,7 +612,7 @@ static pid_t seccomp_fork_impl(void (*prejail)()) { PLOG(FATAL) << "tmpfile failed"; PLOG(FATAL) << "tmpfile failed"; } } unique_fd tmp_fd(dup(fileno(tmp_file))); unique_fd tmp_fd(TEMP_FAILURE_RETRY(dup(fileno(tmp_file)))); if (!android::base::WriteStringToFd(policy, tmp_fd.get())) { if (!android::base::WriteStringToFd(policy, tmp_fd.get())) { PLOG(FATAL) << "failed to write policy to tmpfile"; PLOG(FATAL) << "failed to write policy to tmpfile"; } } Loading Loading @@ -824,7 +825,7 @@ TEST_F(CrasherTest, competing_tracer) { FinishCrasher(); FinishCrasher(); int status; int status; ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, 0)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); Loading @@ -839,7 +840,7 @@ TEST_F(CrasherTest, competing_tracer) { regex += R"( \(.+debuggerd_test)"; regex += R"( \(.+debuggerd_test)"; ASSERT_MATCH(result, regex.c_str()); ASSERT_MATCH(result, regex.c_str()); ASSERT_EQ(crasher_pid, waitpid(crasher_pid, &status, 0)); ASSERT_EQ(crasher_pid, TEMP_FAILURE_RETRY(waitpid(crasher_pid, &status, 0))); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_TRUE(WIFSTOPPED(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); ASSERT_EQ(SIGABRT, WSTOPSIG(status)); Loading @@ -853,7 +854,7 @@ TEST_F(CrasherTest, fdsan_warning_abort_message) { StartProcess([]() { StartProcess([]() { android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE); android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_WARN_ONCE); unique_fd fd(open("/dev/null", O_RDONLY | O_CLOEXEC)); unique_fd fd(TEMP_FAILURE_RETRY(open("/dev/null", O_RDONLY | O_CLOEXEC))); if (fd == -1) { if (fd == -1) { abort(); abort(); } } Loading Loading @@ -888,13 +889,13 @@ TEST(crash_dump, zombie) { raise(DEBUGGER_SIGNAL); raise(DEBUGGER_SIGNAL); errno = 0; errno = 0; rc = waitpid(-1, &status, __WALL | __WNOTHREAD); rc = TEMP_FAILURE_RETRY(waitpid(-1, &status, __WALL | __WNOTHREAD)); if (rc != -1 || errno != ECHILD) { if (rc != -1 || errno != ECHILD) { errx(2, "second waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); errx(2, "second waitpid returned %d (%s), expected failure with ECHILD", rc, strerror(errno)); } } _exit(0); _exit(0); } else { } else { rc = waitpid(forkpid, &status, 0); rc = TEMP_FAILURE_RETRY(waitpid(forkpid, &status, 0)); ASSERT_EQ(forkpid, rc); ASSERT_EQ(forkpid, rc); ASSERT_TRUE(WIFEXITED(status)); ASSERT_TRUE(WIFEXITED(status)); ASSERT_EQ(0, WEXITSTATUS(status)); ASSERT_EQ(0, WEXITSTATUS(status)); Loading