The branch stable/13 has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=c11f71789d7d8f741243c21add8d7c5f0ecea03e

commit c11f71789d7d8f741243c21add8d7c5f0ecea03e
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2023-09-25 18:40:28 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2023-10-09 03:42:17 +0000

    SIGSYS: add tests
    
    (cherry picked from commit 0afcac3e37e911f7e387ebeb2aae19b2b00ca4cc)
---
 tests/sys/kern/Makefile |  1 +
 tests/sys/kern/sigsys.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 70 insertions(+)

diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile
index 95d6ef9b7bc0..ec2bbd742956 100644
--- a/tests/sys/kern/Makefile
+++ b/tests/sys/kern/Makefile
@@ -40,6 +40,7 @@ TEST_METADATA.unix_seqpacket_test+=   timeout="15"
 ATF_TESTS_C+=  unix_socketpair_test
 ATF_TESTS_C+=  waitpid_nohang
 ATF_TESTS_C+=  pdeathsig
+ATF_TESTS_C+=  sigsys
 
 ATF_TESTS_SH+= coredump_phnum_test
 ATF_TESTS_SH+= sonewconn_overflow
diff --git a/tests/sys/kern/sigsys.c b/tests/sys/kern/sigsys.c
new file mode 100644
index 000000000000..75e3816fc158
--- /dev/null
+++ b/tests/sys/kern/sigsys.c
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 2023 The FreeBSD Foundation
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * This software were developed by Konstantin Belousov <[email protected]>
+ * under sponsorship from the FreeBSD Foundation.
+ */
+
+#include <sys/syscall.h>
+
+#include <atf-c.h>
+#include <errno.h>
+#include <signal.h>
+#include <stdatomic.h>
+#include <stdbool.h>
+
+static sig_atomic_t sigsys_cnt;
+
+static void
+sigsys_handler(int signo, siginfo_t *si, void *ucp)
+{
+       sigsys_cnt++;
+}
+
+ATF_TC(sigsys_test);
+
+ATF_TC_HEAD(sigsys_test, tc)
+{
+       atf_tc_set_md_var(tc, "descr",
+           "Testing delivery of SIGSYS on invalid syscalls");
+}
+
+ATF_TC_BODY(sigsys_test, tc)
+{
+       struct sigaction sa;
+
+       memset(&sa, 0, sizeof(sa));
+       sa.sa_sigaction = sigsys_handler;
+       sa.sa_flags = SA_SIGINFO;
+       ATF_REQUIRE(sigaction(SIGSYS, &sa, NULL) == 0);
+
+       ATF_REQUIRE(syscall(273) == -1);        /* reserved */
+       ATF_CHECK_ERRNO(ENOSYS, true);
+       atomic_signal_fence(memory_order_seq_cst);
+       ATF_CHECK_EQ(1, sigsys_cnt);
+
+       ATF_REQUIRE(syscall(440) == -1);        /* SYS_kse_switchin */
+       ATF_CHECK_ERRNO(ENOSYS, true);
+       atomic_signal_fence(memory_order_seq_cst);
+       ATF_CHECK_EQ(2, sigsys_cnt);
+
+       /* Hope this is enough for say next two months */
+       ATF_REQUIRE(syscall(3000000) == -1);
+       ATF_CHECK_ERRNO(ENOSYS, true);
+       atomic_signal_fence(memory_order_seq_cst);
+       ATF_CHECK_EQ(3, sigsys_cnt);
+
+       ATF_REQUIRE(syscall(SYS_afs3_syscall) == -1);
+       ATF_CHECK_ERRNO(ENOSYS, true);
+       atomic_signal_fence(memory_order_seq_cst);
+       ATF_CHECK_EQ(4, sigsys_cnt);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+       ATF_TP_ADD_TC(tp, sigsys_test);
+       return (atf_no_error());
+}

Reply via email to