From nobody Tue Oct 3 07:38:54 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4S08p64gNbz4vvW6; Tue, 3 Oct 2023 07:38:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4S08p63rvPz3PBk; Tue, 3 Oct 2023 07:38:54 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1696318734; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=IDC5yy9MxPsxExLF7NBX+KWeaVkzfKBgIa4sQoL3QZE=; b=aCfYNKvmYLulsM8IOxdtfPq2ir2jhjqn0Y3w57zi3r9OMqZx7Lm8UjpCCf0vvY5BjiHl6t eHkMyVhmK/G0Bbf+TnxCYW5mRD/DkvTaAHcuu5JdS/j7DXeiQOUH6nKE4RqN2TouaKwmtl AKU+XsxZKio1VZxsYTxrjo4n4JwQ3huZhpOXm2SHxtbnXtnRe9b1Q38EcgNR9kUwJV6S6X 4FrxUBkoc1jtlwXq++nLcPkKT/dBu5tbjIDEmDoJmmhC8j7zIX9K36968GvXdu4PGNsPGL 2z4rM8neCpRONwSsEPwBDYAU8RksGWAYKD4AqrcoZJzGoSShjBlla7j6gDOkxQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1696318734; a=rsa-sha256; cv=none; b=cyctNObSoSKH6zV2KAKh5NZKsKdDs41AhK3dUMk2R5mxS60yi+Rtf2Tto3EKEyXH3oL/pH FVJRRoAzI+qjzzGOgk8xyOkFyO6F/0Pwmff6kkdics669QgIdWKKEjUxHEOKlH43SkeJsa IZzAFffk1C5mYRWqAM9KX/cL8cHNDgjOUhIH+cP2CPvCdUOnsqTgUbC7ISDhINj1SXn3xQ Aeb2GCF4sBkM8Olkq5FazfVgzhHBt4AzvQqFsr8oBJkU18AOnB8BUPpR31YsBcZrLjHGiF qOv+PQc2MVjCHQltQX3xFANelxpwvjfrtaO4M1ME5zrdtvXGLFJ9YUuAbZZVyQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1696318734; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=IDC5yy9MxPsxExLF7NBX+KWeaVkzfKBgIa4sQoL3QZE=; b=CfFOie10YsgcMAOsryFCPB6YIHMmJMLUcECUcc8/wUcvxQTkPKoc8pjHUvZ327JNoK82gb JEhCx39IBwm3/Kv0HigUm+cSHby7H97yg/EFDw2N5Fj2CHvnVtZ3iMCIrB1kCRDpwq+vZP jSEK9m1+VwTDb8HezRvNs9vqbuAopggS1JVVyf3A3hrMGL+3NkAofhu22FmmyE/udlcU7b Eupl/dkhw+VEy2pZN3uJsI4bMEH7d1oSBL0Y6gTrA5bhfdqJJAQWeAqXRDwFIqJG8P8j+q saIS+lZrNONCbnMNlV3JE6oH0mtySPosGHzubSN887MFCJI/T1dtcGdRv8d++Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4S08p62vnXzmK3; Tue, 3 Oct 2023 07:38:54 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3937cs2i002221; Tue, 3 Oct 2023 07:38:54 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3937csCA002218; Tue, 3 Oct 2023 07:38:54 GMT (envelope-from git) Date: Tue, 3 Oct 2023 07:38:54 GMT Message-Id: <202310030738.3937csCA002218@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dmitry Chagin Subject: git: b67c0ba46138 - main - tests: Test that SIGSYS is not delivered if kern.signosys knob is off List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b67c0ba4613861f8245ce835081311aef1c19bae Auto-Submitted: auto-generated The branch main has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=b67c0ba4613861f8245ce835081311aef1c19bae commit b67c0ba4613861f8245ce835081311aef1c19bae Author: Dmitry Chagin AuthorDate: 2023-10-03 07:38:02 +0000 Commit: Dmitry Chagin CommitDate: 2023-10-03 07:38:02 +0000 tests: Test that SIGSYS is not delivered if kern.signosys knob is off Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D41979 MFC after: 1 week --- tests/sys/kern/Makefile | 1 + tests/sys/kern/sigsys.c | 101 +++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 88 insertions(+), 14 deletions(-) diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile index 6396b22005c3..e449d9deeed1 100644 --- a/tests/sys/kern/Makefile +++ b/tests/sys/kern/Makefile @@ -49,6 +49,7 @@ ATF_TESTS_C+= unix_socketpair_test ATF_TESTS_C+= waitpid_nohang ATF_TESTS_C+= pdeathsig ATF_TESTS_C+= sigsys +TEST_METADATA.sigsys+= is_exclusive="true" 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 index 75e3816fc158..8554a646ebc6 100644 --- a/tests/sys/kern/sigsys.c +++ b/tests/sys/kern/sigsys.c @@ -7,31 +7,29 @@ * under sponsorship from the FreeBSD Foundation. */ +#include #include +#include #include #include #include #include #include +#include static sig_atomic_t sigsys_cnt; +#define SAVEDVALUE "savedsignosys" + 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) +static void +sigsys_test(int knob) { struct sigaction sa; @@ -43,27 +41,102 @@ ATF_TC_BODY(sigsys_test, tc) 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_CHECK_EQ(1 * knob, sigsys_cnt * knob); 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); + ATF_CHECK_EQ(2 * knob, sigsys_cnt * knob); /* 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_CHECK_EQ(3 * knob, sigsys_cnt * knob); 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_CHECK_EQ(4 * knob, sigsys_cnt * knob); +} + +static void +sysctlset(const char *name, int val) +{ + size_t oldlen; + int oldval; + char buf[80]; + + ATF_REQUIRE(sysctlbyname(name, &oldval, &oldlen, NULL, 0) == 0); + + /* Store old %name in a symlink for cleanup */ + snprintf(buf, sizeof(buf), "%d", oldval); + ATF_REQUIRE(symlink(buf, SAVEDVALUE) == 0); + + ATF_REQUIRE(sysctlbyname(name, NULL, NULL, &val, sizeof(val)) == 0); +} + +static void +sysctlcleanup(const char *name) +{ + size_t oldlen; + int n, oldval; + char buf[80]; + + if ((n = readlink(SAVEDVALUE, buf, sizeof(buf))) > 0) { + buf[MIN((size_t)n, sizeof(buf) - 1)] = '\0'; + if (sscanf(buf, "%d", &oldval) == 1) { + oldlen = sizeof(oldval); + (void)sysctlbyname(name, NULL, 0, + &oldval, oldlen); + } + } + (void)unlink(SAVEDVALUE); +} + +ATF_TC_WITH_CLEANUP(sigsys_test_on); +ATF_TC_HEAD(sigsys_test_on, tc) +{ + atf_tc_set_md_var(tc, "require.user", "root"); + atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects"); + atf_tc_set_md_var(tc, "descr", + "Testing delivery of SIGSYS on invalid syscalls"); +} + +ATF_TC_BODY(sigsys_test_on, tc) +{ + sysctlset("kern.signosys", 1); + sigsys_test(1); +} + +ATF_TC_CLEANUP(sigsys_test_on, tc) +{ + sysctlcleanup("kern.signosys"); +} + +ATF_TC_WITH_CLEANUP(sigsys_test_off); +ATF_TC_HEAD(sigsys_test_off, tc) +{ + atf_tc_set_md_var(tc, "require.user", "root"); + atf_tc_set_md_var(tc, "require.config", "allow_sysctl_side_effects"); + atf_tc_set_md_var(tc, "descr", + "Testing SIGSYS silence on invalid syscalls"); +} + +ATF_TC_BODY(sigsys_test_off, tc) +{ + sysctlset("kern.signosys", 0); + sigsys_test(0); +} + +ATF_TC_CLEANUP(sigsys_test_off, tc) +{ + sysctlcleanup("kern.signosys"); } ATF_TP_ADD_TCS(tp) { - ATF_TP_ADD_TC(tp, sigsys_test); + ATF_TP_ADD_TC(tp, sigsys_test_on); + ATF_TP_ADD_TC(tp, sigsys_test_off); return (atf_no_error()); }