selftests/seccomp: Check ENOSYS under tracing
authorKees Cook <keescook@chromium.org>
Sun, 5 Jul 2020 06:12:32 +0000 (23:12 -0700)
committerShuah Khan <skhan@linuxfoundation.org>
Fri, 17 Jul 2020 19:37:34 +0000 (13:37 -0600)
There should be no difference between -1 and other negative syscalls
while tracing.

Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Will Drewry <wad@chromium.org>
Cc: Will Deacon <will@kernel.org>
Cc: Keno Fischer <keno@juliacomputing.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
tools/testing/selftests/seccomp/seccomp_bpf.c

index 0ade3b0..ab52eb1 100644 (file)
@@ -1903,6 +1903,32 @@ FIXTURE_TEARDOWN(TRACE_syscall)
        teardown_trace_fixture(_metadata, self->tracer);
 }
 
+TEST(negative_ENOSYS)
+{
+       /* Untraced negative syscalls should return ENOSYS. */
+       errno = 0;
+       EXPECT_EQ(-1, syscall(-1));
+       EXPECT_EQ(errno, ENOSYS);
+       errno = 0;
+       EXPECT_EQ(-1, syscall(-101));
+       EXPECT_EQ(errno, ENOSYS);
+}
+
+TEST_F(TRACE_syscall, negative_ENOSYS)
+{
+       /*
+        * There should be no difference between an "internal" skip
+        * and userspace asking for syscall "-1".
+        */
+       errno = 0;
+       EXPECT_EQ(-1, syscall(-1));
+       EXPECT_EQ(errno, ENOSYS);
+       /* And no difference for "still not valid but not -1". */
+       errno = 0;
+       EXPECT_EQ(-1, syscall(-101));
+       EXPECT_EQ(errno, ENOSYS);
+}
+
 TEST_F(TRACE_syscall, syscall_allowed)
 {
        /* getppid works as expected (no changes). */