From nobody Thu Sep 12 11:37:01 2024 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 4X4Fld3vfhz5WHJZ; Thu, 12 Sep 2024 11:37:01 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4X4Fld34VDz50n0; Thu, 12 Sep 2024 11:37:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1726141021; 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=LiFfKfZ1pqDUHeFm9m69zdAorDy8OOmKsZv6PTQhLrw=; b=vTLV6pzUKXmaWN3wihccq5R0V+9ON3Y8Um1EW7iiZv9PbcXV7kTSCBu7S1Qep+vmJQEk6w UpyoWFARzAIKEnDjGanv4f+1TRiTEUozZJR+tYT05QJC/x4cZWoR0cR2LY3AkWOupsDOS7 SuOCUVsrD+Y9LMMGz/XaoVgEAw4tFl0u3Km0UALX3EOt/xhIlc0KOyi6s9MSiyY7WvXoUm EC/h4SeRxg8S3GbICdNLsPtLOKHY/2ECy/RIP1XxwiOCJEwu2ciaiG6n8slXcd1/FyokMa jR5XQtxQPjGqEYplGB3D2t18+yPA1tvF+mMJ3LM1kquGieqMzR208WKXuax8HQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1726141021; a=rsa-sha256; cv=none; b=JfwqAubjPbkBe1n8Gk9OEiLfdFx2RVFG41H1G0FC0HCKdyHE4bOavxxvkG7U4M70lD5xiO /hGhuX9cZ0o+zEevdGhi2Kocl683tEVM4IYibajhy+EcNs+RMA2jYbVT4RRYqK5Mb89Fm4 Ll0Nf6+l+P9ZZIybqs3MyMNFEaI3VEIuBylpGSBcDj8P0oxHHTWRGd0eEY4w8WsmG4PWWi YbIiSfu3c4apIIq9qcZ987aSCluOvqVxgm7PCpqRjQ4qfKJrOKnmIaaO8B1BGnezzWm0jn 85rwIiSY9gERCiulF4++TnEt9X1oovMmJwBnQqGj/rYI8IALxXHKbDRPaw2fyg== 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=1726141021; 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=LiFfKfZ1pqDUHeFm9m69zdAorDy8OOmKsZv6PTQhLrw=; b=cagkgNO09QBNH4jfyDTcciQSa3IGmXBpQeUTVoo8hrIX+U7WFD/B54Y/lEM/bhlxNRw1lC AwSjn5Okf/MeTxfv38M4niBcF84Ip5XhGiSgIhu6yxGBrBblk4/ZzzVnIZDzNZR1otYQd4 epkOqXjmqHEu3ogSAPSZIJraNXZOZhjSyID5LHeD0nXODnwodclQaFBeRF3g49XYwnhmCV u6hi17VaAmHSDAqHUjWmi3yQApBlUTQeI1/6eXbNwqLZ2m/jyZPSeKDJJbfNlfjuQ05UDm XzyYaoQKTtLLxjSjqjOvrPQY/pdfqLZhfPRyZO2EcFzaPKm7GMW4gklN+YHSuA== 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 4X4Fld2gd7z1CJq; Thu, 12 Sep 2024 11:37:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 48CBb1r8046939; Thu, 12 Sep 2024 11:37:01 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 48CBb1Bf046936; Thu, 12 Sep 2024 11:37:01 GMT (envelope-from git) Date: Thu, 12 Sep 2024 11:37:01 GMT Message-Id: <202409121137.48CBb1Bf046936@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Brooks Davis Subject: git: 7ca260df8cea - main - proccontrol: use a table for modes 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: brooks X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7ca260df8cea7dea41e7a16362a3c5c45e86249c Auto-Submitted: auto-generated The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=7ca260df8cea7dea41e7a16362a3c5c45e86249c commit 7ca260df8cea7dea41e7a16362a3c5c45e86249c Author: Brooks Davis AuthorDate: 2024-09-12 11:35:04 +0000 Commit: Brooks Davis CommitDate: 2024-09-12 11:35:04 +0000 proccontrol: use a table for modes Add a central table of modes and loop over it rather than spelling out 10 essentialy identical strcmp if statemnts. Use the stable to generate usage as well reducing the number of ifdefs. Disallow multiple -m options. Previouly multiple were allowed, but only the last one was used and there was no indication this happened. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D46426 --- usr.bin/proccontrol/proccontrol.c | 79 ++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/usr.bin/proccontrol/proccontrol.c b/usr.bin/proccontrol/proccontrol.c index be78e14fd75e..32c4c9e7f1a0 100644 --- a/usr.bin/proccontrol/proccontrol.c +++ b/usr.bin/proccontrol/proccontrol.c @@ -26,7 +26,7 @@ * SUCH DAMAGE. */ -#include +#include #include #include #include @@ -35,9 +35,9 @@ #include #include -enum { - MODE_ASLR, +enum mode { MODE_INVALID, + MODE_ASLR, MODE_TRACE, MODE_TRAPCAP, MODE_PROTMAX, @@ -53,6 +53,26 @@ enum { #endif }; +static const struct { + enum mode mode; + const char *name; +} modes[] = { + { MODE_ASLR, "aslr" }, + { MODE_TRACE, "trace" }, + { MODE_TRAPCAP, "trapcap" }, + { MODE_PROTMAX, "protmax" }, + { MODE_STACKGAP, "stackgap" }, + { MODE_NO_NEW_PRIVS, "nonewprivs" }, + { MODE_WXMAP, "wxmap" }, +#ifdef PROC_KPTI_CTL + { MODE_KPTI, "kpti" }, +#endif +#ifdef PROC_LA_CTL + { MODE_LA57, "la57" }, + { MODE_LA48, "la48" }, +#endif +}; + static pid_t str2pid(const char *str) { @@ -67,17 +87,6 @@ str2pid(const char *str) return (res); } -#ifdef PROC_KPTI_CTL -#define KPTI_USAGE "|kpti" -#else -#define KPTI_USAGE -#endif -#ifdef PROC_LA_CTL -#define LA_USAGE "|la48|la57" -#else -#define LA_USAGE -#endif - static void __dead2 usage(void) { @@ -85,10 +94,10 @@ usage(void) fprintf(stderr, " proccontrol -m mode -s (enable|disable) " "(-p pid | command)\n"); fprintf(stderr, " proccontrol -m mode -q [-p pid]\n"); - fprintf(stderr, "Modes: " - "aslr|protmax|trace|trapcap|stackgap|nonewprivs|wxmap" - KPTI_USAGE LA_USAGE - "\n"); + fprintf(stderr, "Modes: "); + for (size_t i = 0; i < nitems(modes); i++) + fprintf(stderr, "%s%s", i == 0 ? "" : "|", modes[i].name); + fprintf(stderr, "\n"); exit(1); } @@ -106,31 +115,15 @@ main(int argc, char *argv[]) while ((ch = getopt(argc, argv, "m:qs:p:")) != -1) { switch (ch) { case 'm': - if (strcmp(optarg, "aslr") == 0) - mode = MODE_ASLR; - else if (strcmp(optarg, "protmax") == 0) - mode = MODE_PROTMAX; - else if (strcmp(optarg, "trace") == 0) - mode = MODE_TRACE; - else if (strcmp(optarg, "trapcap") == 0) - mode = MODE_TRAPCAP; - else if (strcmp(optarg, "stackgap") == 0) - mode = MODE_STACKGAP; - else if (strcmp(optarg, "nonewprivs") == 0) - mode = MODE_NO_NEW_PRIVS; - else if (strcmp(optarg, "wxmap") == 0) - mode = MODE_WXMAP; -#ifdef PROC_KPTI_CTL - else if (strcmp(optarg, "kpti") == 0) - mode = MODE_KPTI; -#endif -#ifdef PROC_LA_CTL - else if (strcmp(optarg, "la57") == 0) - mode = MODE_LA57; - else if (strcmp(optarg, "la48") == 0) - mode = MODE_LA48; -#endif - else + if (mode != MODE_INVALID) + usage(); + for (size_t i = 0; i < nitems(modes); i++) { + if (strcmp(optarg, modes[i].name) == 0) { + mode = modes[i].mode; + break; + } + } + if (mode == MODE_INVALID) usage(); break; case 's':