From b92e8ee8d6744d81383f4265faa008ccce894f5e Mon Sep 17 00:00:00 2001 From: Zach Koopmans Date: Fri, 11 Jun 2021 20:30:41 -0700 Subject: Fix //test/syscalls:exec_test_native Later kernels add empty arguments to argv, throwing off return values for the exec_basic_workload.cc binary. This is result of a bug introduced by ccbb18b67323b "exec/binfmt_script: Don't modify bprm->buf and then return - ENOEXEC". Before this change, an empty interpreter string was reported if the first non-space/non-tab character after "#!" was '\0' (end of file, previously- overwritten trailing space or tab, or previously-overwritten first newline). After this change, an empty interpreter string is reported if all characters after "#!" are spaces or tabs, or the first non-space non-tab character is at i_end, which is the position of the first newline after "#!". However, if there is no newline after "#!" (as in ExecTest.InterpreterScriptNoPath), then i_end = buf_end (= bprm->buf + sizeof(bprm->buf) - 1, the last possible byte in the buffer) and neither condition holds. Change white space for script inputs to take into account the above bug. Co-authored-by: Andrei Vagin PiperOrigin-RevId: 378997171 --- test/syscalls/linux/exec.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'test/syscalls') diff --git a/test/syscalls/linux/exec.cc b/test/syscalls/linux/exec.cc index e0f3779a2..4df429ed8 100644 --- a/test/syscalls/linux/exec.cc +++ b/test/syscalls/linux/exec.cc @@ -278,15 +278,12 @@ TEST(ExecTest, InterpreterScriptArgNUL) { // Trailing whitespace following interpreter path is ignored. TEST(ExecTest, InterpreterScriptTrailingWhitespace) { - // FIXME(b/190850365): This test case fails on Linux. - SKIP_IF(!IsRunningOnGvisor()); - // Symlink through /tmp to ensure the path is short enough. TempPath link = ASSERT_NO_ERRNO_AND_VALUE( TempPath::CreateSymlinkTo("/tmp", RunfilePath(kBasicWorkload))); TempPath script = ASSERT_NO_ERRNO_AND_VALUE(TempPath::CreateFileWith( - GetAbsoluteTestTmpdir(), absl::StrCat("#!", link.path(), " "), 0755)); + GetAbsoluteTestTmpdir(), absl::StrCat("#!", link.path(), " \n"), 0755)); CheckExec(script.path(), {script.path()}, {}, ArgEnvExitStatus(1, 0), absl::StrCat(link.path(), "\n", script.path(), "\n")); @@ -306,11 +303,11 @@ TEST(ExecTest, InterpreterScriptArgWhitespace) { } TEST(ExecTest, InterpreterScriptNoPath) { - // FIXME(b/190850365): This test case fails on Linux. - SKIP_IF(!IsRunningOnGvisor()); - TempPath script = ASSERT_NO_ERRNO_AND_VALUE( - TempPath::CreateFileWith(GetAbsoluteTestTmpdir(), "#!", 0755)); + TempPath::CreateFileWith(GetAbsoluteTestTmpdir(), "#!\n\n", 0755)); + + std::cerr << "path: " << script.path() << std::endl; + std::cerr << system(absl::StrCat("cat ", script.path()).c_str()) << std::endl; int execve_errno; ASSERT_NO_ERRNO_AND_VALUE( -- cgit v1.2.3