From nobody Mon Feb 21 15:46:20 2022 X-Original-To: dev-commits-src-all@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 D039F19D69AE; Mon, 21 Feb 2022 15:46:20 +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 4K2RVN5T3Nz4blf; Mon, 21 Feb 2022 15:46:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645458380; 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=TEvlcqKgU4C2KkBBr2ucKzVLnKt2MPcMtVdbPqKhMuA=; b=FgkDf+GYeWtJ7N3PdBcA3pr5+lUE6WhXFcV+GFPCpLqxccjjEHaEnBmCB7oF4QiyNipg/s lD2Meo7oqsFOflwEXAck/Juow1Ig+wBRg6nnTmGvjkGkKJk4O8LcY9Jlvugnws0PKzPJkM GZqCxXvGlPb3Kz6y+HZnjxXH/LSZvsikdiKAcU8EnNJu/UWRMQ+pmhtafP8i5Ca/CcZOmp HGilM5LXomnG1GGp6JkCORaqvCw/BpBFFjHUso6G/rX3N+N3nVPfQ3y8baPGRlTYctb+Uv 97SPi2o3Tre9091Qhy9eZwWwmIGqIRq2hqS7rOS4agQp9YJJcEP/e3TiZRcdHA== 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 9C3A21308E; Mon, 21 Feb 2022 15:46:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21LFkKSg053275; Mon, 21 Feb 2022 15:46:20 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21LFkKhX053274; Mon, 21 Feb 2022 15:46:20 GMT (envelope-from git) Date: Mon, 21 Feb 2022 15:46:20 GMT Message-Id: <202202211546.21LFkKhX053274@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Eric van Gyzen Subject: git: 766c2466ff46 - main - mmap map_at_zero test: handle W^X List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vangyzen X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 766c2466ff465b3c7c1a46be729b42a6da47de03 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645458380; 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=TEvlcqKgU4C2KkBBr2ucKzVLnKt2MPcMtVdbPqKhMuA=; b=wXFUeEY9X9ebS5fGr0n267aTFUnKmViuaod+ZNAeb/D7i3o4WV6p4+3PUSpjMZAvEdrXnC MAwAOV2FK2nO6WqiIw269LjXwuEneDPneRLyKuOMSkOr8+0npa9fl24WaZ4KRDnsqR/exY 7Gd2X9b0IQxk9vtsRrVUdGSNFMqiULP7vbOODiKhsvLoZ7rVNJcVWbfvKOqEJ1vu6Gkf1q c9unLShAhauUJlgobbDEF652B1GgbStzgZM2cqZYCl1LzolmWsJu53Cfj6AB9uuaFeYcQy GSgLQyPGaufZwbk/QvX7p+qq2yQ+eudHTykowen3qaRE4JAJefdXnrm/GtZM+A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645458380; a=rsa-sha256; cv=none; b=ZLtB2h4AlMXe9v+9FcD2lSm1hXCQwW3d+KuYU0iWUDA2U2+T4pB7duAqGeovnC9MWEQZlY BstiYwo2BksqbUOI8YOtqLQYpRNtm61B5BDWDDfDCIxxZ36G4dwpa6JBPonauqezltJ6By 7THky5mLbecLgr0gss6Phmmwuo7cZiUe0PCk86vxUoHbzwaqkW4iLa8kPyixsnG1aP69Vi V7Xiy7AIJIKb7gneNt+bfiN2TcMp2jsDq8JYxAbb5yRUkbaHLZyOmpz5xNHzwXhv7Lbiji 1Uf9+Myw0moJe6M0ecAE+YY5u1Ao0iEzcvS+VbHBStTf0C6g+Okf711qHHsjkQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=766c2466ff465b3c7c1a46be729b42a6da47de03 commit 766c2466ff465b3c7c1a46be729b42a6da47de03 Author: Arka Sharma AuthorDate: 2022-02-18 15:34:15 +0000 Commit: Eric van Gyzen CommitDate: 2022-02-21 15:43:42 +0000 mmap map_at_zero test: handle W^X Use kern.elfXX.allow_wx to decide whether to map W+X or W-only memory. Future work could expand this test to add an "allow_wx" axis to the test matrix, but I would argue that a separate test should be written, since that's orthogonal to map_at_zero. MFC after: 1 week Sponsored by: Dell EMC Isilon --- tests/sys/vm/mmap_test.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tests/sys/vm/mmap_test.c b/tests/sys/vm/mmap_test.c index 61ede96fc49b..dc01a23fff21 100644 --- a/tests/sys/vm/mmap_test.c +++ b/tests/sys/vm/mmap_test.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,12 @@ static const struct { #define MAP_AT_ZERO "security.bsd.map_at_zero" +#ifdef __LP64__ +#define ALLOW_WX "kern.elf64.allow_wx" +#else +#define ALLOW_WX "kern.elf32.allow_wx" +#endif + ATF_TC_WITHOUT_HEAD(mmap__map_at_zero); ATF_TC_BODY(mmap__map_at_zero, tc) { @@ -61,6 +68,8 @@ ATF_TC_BODY(mmap__map_at_zero, tc) size_t len; unsigned int i; int map_at_zero; + bool allow_wx; + int prot_flags; len = sizeof(map_at_zero); if (sysctlbyname(MAP_AT_ZERO, &map_at_zero, &len, NULL, 0) == -1) { @@ -69,13 +78,27 @@ ATF_TC_BODY(mmap__map_at_zero, tc) return; } + len = sizeof(allow_wx); + if (sysctlbyname(ALLOW_WX, &allow_wx, &len, NULL, 0) == -1) { + if (errno == ENOENT) { + /* Allow W+X if sysctl isn't present */ + allow_wx = true; + } else { + atf_tc_skip("sysctl for %s failed: %s\n", ALLOW_WX, + strerror(errno)); + return; + } + } + /* Normalize to 0 or 1 for array access. */ map_at_zero = !!map_at_zero; for (i = 0; i < nitems(map_at_zero_tests); i++) { + prot_flags = PROT_READ | PROT_WRITE; + if (allow_wx) + prot_flags |= PROT_EXEC; p = mmap((void *)map_at_zero_tests[i].addr, PAGE_SIZE, - PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_FIXED, - -1, 0); + prot_flags, MAP_ANON | MAP_FIXED, -1, 0); if (p == MAP_FAILED) { ATF_CHECK_MSG(map_at_zero_tests[i].ok[map_at_zero] == 0, "mmap(%p, ...) failed", map_at_zero_tests[i].addr);