summaryrefslogtreecommitdiffhomepage
path: root/test/syscalls/linux/proc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/syscalls/linux/proc.cc')
-rw-r--r--test/syscalls/linux/proc.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/syscalls/linux/proc.cc b/test/syscalls/linux/proc.cc
index 575be014c..e508ce27f 100644
--- a/test/syscalls/linux/proc.cc
+++ b/test/syscalls/linux/proc.cc
@@ -1802,6 +1802,33 @@ TEST(ProcPidCmdline, SubprocessForkSameCmdline) {
}
}
+TEST(ProcPidCmdline, SubprocessSeekCmdline) {
+ FileDescriptor fd;
+ ASSERT_NO_ERRNO(WithSubprocess(
+ [&](int pid) -> PosixError {
+ // Running. Open /proc/pid/cmdline.
+ ASSIGN_OR_RETURN_ERRNO(
+ fd, Open(absl::StrCat("/proc/", pid, "/cmdline"), O_RDONLY));
+ return NoError();
+ },
+ [&](int pid) -> PosixError {
+ // Zombie, but seek should still succeed.
+ int ret = lseek(fd.get(), 0x801, 0);
+ if (ret < 0) {
+ return PosixError(errno);
+ }
+ return NoError();
+ },
+ [&](int pid) -> PosixError {
+ // Exited.
+ int ret = lseek(fd.get(), 0x801, 0);
+ if (ret < 0) {
+ return PosixError(errno);
+ }
+ return NoError();
+ }));
+}
+
// Test whether /proc/PID/ symlinks can be read for a running process.
TEST(ProcPidSymlink, SubprocessRunning) {
char buf[1];