From nobody Fri Sep 04 10:43:40 2026 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 4hbtNr35jBz6qTb7 for ; Fri, 04 Sep 2026 10:43:40 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hbtNr13zmz4C9j for ; Fri, 04 Sep 2026 10:43:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788518620; 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=+TbG8/H+6y5zkYWXXjFLUJAqYdbEVB9WqqMvon2QegQ=; b=vAAuZUZeKYdkCmRzHhBvPon63IaElAfROT+xrDY1WnQeiEFgF/rSXvR+NyBbnPTU0BvG9c Wv7zMHyzgBfcY6Gxdke/kcWnaq0zDkp4xuQwIbGLH0u76PWemcRTrwQyc9frK/Pht/phg1 XHUY5R7Pin1rVlnjcVwdHEiq640chGWgTDa1Uslhcga6BqXxs7jrzk8PJ8bD7X0qCuJ0/i EeDLncqkkaI6c5KzuRBrHwq8PSnTxf0w+2q/AWvCOmkrtdH2BvLhp/keXOF+iyO/YVoqif awCJsXPOUHWTM8RXdP42BZa0bb2yZXeeKg2d7sefvAnBKbXlK5hmp9TNuhdgAg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788518620; a=rsa-sha256; cv=none; b=HW5yR3ecnaYZeTDKhyAeq1hTN2e62GDydrNmPpwA9rBoU7jTD3fFD5ntSDXiGt+m0YtP3N S7GEgY8GidGRlzg47QXB+H3TybitYgD2IATrbA1JXf9S98idOW6ROc9t74ugl1b5O4JvzA mRgiSPswTcc2XJvB3KcB8vMlCdhrZkdIc2SiHzdpczOV6CpbMnIHcAICuHRcbD3mmw+mU0 oRoAXUcgsp/1qHIirG3zIEMcBxGKFgOI//uQREvoMcVjKcExVZ6r5IXW1MPWT7dxgT5Bt8 B+zkxDNnG1cfpnzM+FCZ03mO/cn1wE+KGXgsbu7cpZ/QfP5ilpg4yqzV3MGHkA== 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=1788518620; 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=+TbG8/H+6y5zkYWXXjFLUJAqYdbEVB9WqqMvon2QegQ=; b=CKbNkCo+egsiSm9SrHTGccidUlL64GqxGsu1c2cGg3RRZ4PCIZkiCGneFBIkjx99vxHWfb tkLf3g0Y361UiLSC5dYtGovZZ9SZ7VWcaPz78upzGA0XUxVYlXY9nLbJPHjd0JcUVRqzok 9lV4vXiJ+qwHTj7jcFKyJp7COtyKfvcr71FBc9Z1qA95n6RCcLWhr8Ef95cjL7Qgmyl+xQ /k4Ortms05i5JV1MZSCURChPeBQn3xN19Ho6tSZjqJBlKnDDpjwbW6Ht+vq64lE1pMHSWA qy5/30zTnjMDNQAgnzCH1M6Dq2jVgDR+N3Mime0JR1KlCjOnGs4v/UKwbwegaw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hbtNr06KDzwJY for ; Fri, 04 Sep 2026 10:43:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46560 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 04 Sep 2026 10:43:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Baptiste Daroussin Subject: git: 2350f75acb0d - main - pw: check -M, -V and -R input to avoid dereferencing argv[2] 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: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bapt X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2350f75acb0da0271ccff1fb22381f7e8c5948f8 Auto-Submitted: auto-generated Date: Fri, 04 Sep 2026 10:43:40 +0000 Message-Id: <6a9aa0dc.46560.46ae8c4f@gitrepo.freebsd.org> The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=2350f75acb0da0271ccff1fb22381f7e8c5948f8 commit 2350f75acb0da0271ccff1fb22381f7e8c5948f8 Author: Baptiste Daroussin AuthorDate: 2026-09-04 10:40:52 +0000 Commit: Baptiste Daroussin CommitDate: 2026-09-04 10:42:30 +0000 pw: check -M, -V and -R input to avoid dereferencing argv[2] MFC After: 1 week --- usr.sbin/pw/pw.c | 8 ++++++++ usr.sbin/pw/tests/Makefile | 3 ++- usr.sbin/pw/tests/pw_test.sh | 20 ++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/usr.sbin/pw/pw.c b/usr.sbin/pw/pw.c index 7cb5dd160e12..fc690a246314 100644 --- a/usr.sbin/pw/pw.c +++ b/usr.sbin/pw/pw.c @@ -146,6 +146,10 @@ main(int argc, char *argv[]) relocated = true; optarg = &argv[1][2]; if (*optarg == '\0') { + if (argc < 3) + errx(EX_USAGE, + "-%c requires a directory " + "argument", arg); if (stat(argv[2], &st) != 0) errx(EX_OSFILE, "no such directory `%s'", @@ -173,6 +177,10 @@ main(int argc, char *argv[]) optarg = &argv[1][2]; if (*optarg == '\0') { + if (argc < 3) + errx(EX_USAGE, + "-M requires a file " + "argument"); optarg = argv[2]; ++argv; --argc; diff --git a/usr.sbin/pw/tests/Makefile b/usr.sbin/pw/tests/Makefile index b92897ab9208..a8b75b825469 100644 --- a/usr.sbin/pw/tests/Makefile +++ b/usr.sbin/pw/tests/Makefile @@ -13,7 +13,8 @@ SRCS.pw_unit_test= pw_unit_test.c \ LIBADD.pw_unit_test= util CFLAGS.pw_unit_test= -I${SRCTOP}/usr.sbin/pw -ATF_TESTS_SH= pw_etcdir_test \ +ATF_TESTS_SH= pw_test\ + pw_etcdir_test \ pw_lock_test \ pw_config_test \ pw_groupadd_test \ diff --git a/usr.sbin/pw/tests/pw_test.sh b/usr.sbin/pw/tests/pw_test.sh new file mode 100644 index 000000000000..55bcbbbb5c98 --- /dev/null +++ b/usr.sbin/pw/tests/pw_test.sh @@ -0,0 +1,20 @@ +atf_test_case R_missing_dir +R_missing_dir_body() { + atf_check -s exit:64 -e inline:"pw: -R requires a directory argument\n" pw -R +} + +atf_test_case V_missing_dir +V_missing_dir_body() { + atf_check -s exit:64 -e inline:"pw: -V requires a directory argument\n" pw -V +} + +atf_test_case M_missing_file +M_missing_file_body() { + atf_check -s exit:64 -e inline:"pw: -M requires a file argument\n" pw -M +} + +atf_init_test_cases() { + atf_add_test_case R_missing_dir + atf_add_test_case V_missing_dir + atf_add_test_case M_missing_file +}