selftests/seccomp: Don't call read() on TTY from background pgrp
commit 2bfed7d2ffa5d86c462d3e2067f2832eaf8c04c7 upstream. Since commit 92d25637a3a4 ("kselftest: signal all child processes"), tests are executed in background process groups. This means that trying to read from stdin now throws SIGTTIN when stdin is a TTY, which breaks some seccomp selftests that try to use read(0, NULL, 0) as a dummy syscall. The simplest way to fix that is probably to just use -1 instead of 0 as the dummy read()'s FD. Fixes: 92d25637a3a4 ("kselftest: signal all child processes") Signed-off-by: Jann Horn <jannh@google.com> Signed-off-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20220319010011.1374622-1-jannh@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
3ea0b44c01
commit
5bf2a45e33
@@ -951,7 +951,7 @@ TEST(ERRNO_valid)
|
|||||||
ASSERT_EQ(0, ret);
|
ASSERT_EQ(0, ret);
|
||||||
|
|
||||||
EXPECT_EQ(parent, syscall(__NR_getppid));
|
EXPECT_EQ(parent, syscall(__NR_getppid));
|
||||||
EXPECT_EQ(-1, read(0, NULL, 0));
|
EXPECT_EQ(-1, read(-1, NULL, 0));
|
||||||
EXPECT_EQ(E2BIG, errno);
|
EXPECT_EQ(E2BIG, errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -970,7 +970,7 @@ TEST(ERRNO_zero)
|
|||||||
|
|
||||||
EXPECT_EQ(parent, syscall(__NR_getppid));
|
EXPECT_EQ(parent, syscall(__NR_getppid));
|
||||||
/* "errno" of 0 is ok. */
|
/* "errno" of 0 is ok. */
|
||||||
EXPECT_EQ(0, read(0, NULL, 0));
|
EXPECT_EQ(0, read(-1, NULL, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -991,7 +991,7 @@ TEST(ERRNO_capped)
|
|||||||
ASSERT_EQ(0, ret);
|
ASSERT_EQ(0, ret);
|
||||||
|
|
||||||
EXPECT_EQ(parent, syscall(__NR_getppid));
|
EXPECT_EQ(parent, syscall(__NR_getppid));
|
||||||
EXPECT_EQ(-1, read(0, NULL, 0));
|
EXPECT_EQ(-1, read(-1, NULL, 0));
|
||||||
EXPECT_EQ(4095, errno);
|
EXPECT_EQ(4095, errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1022,7 +1022,7 @@ TEST(ERRNO_order)
|
|||||||
ASSERT_EQ(0, ret);
|
ASSERT_EQ(0, ret);
|
||||||
|
|
||||||
EXPECT_EQ(parent, syscall(__NR_getppid));
|
EXPECT_EQ(parent, syscall(__NR_getppid));
|
||||||
EXPECT_EQ(-1, read(0, NULL, 0));
|
EXPECT_EQ(-1, read(-1, NULL, 0));
|
||||||
EXPECT_EQ(12, errno);
|
EXPECT_EQ(12, errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2575,7 +2575,7 @@ void *tsync_sibling(void *data)
|
|||||||
ret = prctl(PR_GET_NO_NEW_PRIVS, 0, 0, 0, 0);
|
ret = prctl(PR_GET_NO_NEW_PRIVS, 0, 0, 0, 0);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return (void *)SIBLING_EXIT_NEWPRIVS;
|
return (void *)SIBLING_EXIT_NEWPRIVS;
|
||||||
read(0, NULL, 0);
|
read(-1, NULL, 0);
|
||||||
return (void *)SIBLING_EXIT_UNKILLED;
|
return (void *)SIBLING_EXIT_UNKILLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user