From nobody Mon Jul 20 01:48:39 2026 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 4h3Nhm0Vcrz6m0bc for ; Mon, 20 Jul 2026 01:48: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h3Nhl4VJPz3DkW for ; Mon, 20 Jul 2026 01:48:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784512119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2BJDeAo1pJ6pNq+4LvgMNPoAm05Sc8lPu/+RJUzqeAY=; b=N6B/k/rkQPvm82mucvWQYr9HNhnF06B6LtMS2n6KPph38v1gYvoq5Mc9EBMurDE3GOlKDU HtW1Zb20Z6IWmPrJFJJDzLHXdrX/GCU4rEvHLFO2/X6OzktIDMDcybVD6pPPuoyEwwuQvg FR3PDG821C6yH1LDyDIodfLlMAMc7+w/e/ZaorQ7yVHNz1rQDs5rwpT9yLpONVTG5iCv9n 3ghB0PcJjI6ZcwS74m6+NERdw6sxvDr4CxB78jrENarG2tp2f/jBDKrZRq5vR9+2QMQu9c cZP9ZtI16ZJd2It+f37sjFf4TD3jYWCT4Rpm3I+y8GcAeZrV5YjebFcIsleIDQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784512119; a=rsa-sha256; cv=none; b=H1M2O9HUELfId1fUsKlRqm0OkQEHpb1h7+q7JoNj5Zchdy50ThKuP4yYadBvqELaPtjoBS bamavrJsff2Oe5CcST69V8oKAbtCZQ6Po7hSoaelQUcDj1y6m89xpR5ImQFuHZ3d3lHIO/ 3CUjP2ajR6Vfut6sBmQ002e2PDTznPAIFp334vHzM3by5WZL3tJ8GPQkSlOqpDDYFK1eAO C5tLuRMweZqOVYW6013BqOP4wZzoHLYq8ikm2iNIhFl9BDHgLMAgwJ5oya0IcScAPYuZfW AcT+QNpvaphXO5gmOdAvIR+jtfTCe/a7SUHa1rPDC0s/l3MM8bkfM/7ZRr0Ohg== 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=1784512119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=2BJDeAo1pJ6pNq+4LvgMNPoAm05Sc8lPu/+RJUzqeAY=; b=WX4oq8hrIL/fmiKMJBAApApXbj2VnYBd/seq5Y5SZM1o5RWJ2nOkS7T1THE55laAQ/jYLB hPh5dHRkXFB1o9KeYAKyM1WtIk8cx1Qwrh/m1HVMY1wUCrYehf42Xp6s4TX7LQg3iCTslO Mu5b/UOViZzVGd8iWV6kxHFYAHayIimReIIxcQzxjX8mmvL9CXwK4fp1SGtANaEFA9cn96 sG4SEbCjR3l8xF0a3vaWzxJrcKKx+Rh8vlD9Lt4Rw8MYscUXjPT8PomYu/JpaLKSFTkrdP 4QBxbPX85LNpFZ1SWq79fNJqq+pSGMCxlgvmDQOoLK7oYQnEnbmCzhzpIfQbcw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h3Nhl3H38zhT2 for ; Mon, 20 Jul 2026 01:48:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 42c9c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 20 Jul 2026 01:48:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Peter Eriksson From: Rick Macklem Subject: git: 55b9f788d348 - stable/15 - acl_from_text.c: Allow negative uid/gid numbers to be handled 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 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: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 55b9f788d348d0e31478fe86c12ee8ca3f21469e Auto-Submitted: auto-generated Date: Mon, 20 Jul 2026 01:48:39 +0000 Message-Id: <6a5d7e77.42c9c.263116cb@gitrepo.freebsd.org> The branch stable/15 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=55b9f788d348d0e31478fe86c12ee8ca3f21469e commit 55b9f788d348d0e31478fe86c12ee8ca3f21469e Author: Peter Eriksson AuthorDate: 2026-07-06 19:33:22 +0000 Commit: Rick Macklem CommitDate: 2026-07-20 01:45:54 +0000 acl_from_text.c: Allow negative uid/gid numbers to be handled getfacl / acl_to_text() incorrectly prints uid/gid numbers as signed integers. This causes uid / gid numbers larger than 2G (2147483648) to print as negative numbers. The libc acl_from_text() function does not handle negative numbers. This diff adds a backwards compatiblity fix to allow negative numbers... (cherry picked from commit d7d71341ae7d79886143a9ce427dca0e858eda97) --- lib/libc/posix1e/acl_from_text.c | 41 +++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/lib/libc/posix1e/acl_from_text.c b/lib/libc/posix1e/acl_from_text.c index 765b58290a04..746338b37f0c 100644 --- a/lib/libc/posix1e/acl_from_text.c +++ b/lib/libc/posix1e/acl_from_text.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include "acl_support.h" @@ -263,6 +264,24 @@ error_label: return(NULL); } +/* + * Make sure the number given fits inside an uid_t or gid_t. + * Currently (2026-05-23) uid_t & gid_t is an uint32_t. + * Special case handle uid_t/gid_t numbers specified as negative numbers. + * Assumes that uid_t and gid_t are the same types. + */ +static int +_invalid_uidgid(intmax_t v) { + if (v < 0) { + if ((-v) & ~(uintmax_t)((~(uid_t)0)>>1)) + return (2); /* Underflow, does not fit into uid_t */ + } else { + if (v & ~(uintmax_t)(~(uid_t)0)) + return (1); /* Overflow, does not fit into uid_t */ + } + return (0); +} + /* * Given a username/groupname from a text form of an ACL, return the uid/gid * XXX NOT THREAD SAFE, RELIES ON GETPWNAM, GETGRNAM @@ -274,19 +293,21 @@ _acl_name_to_id(acl_tag_t tag, char *name, uid_t *id) { struct group *g; struct passwd *p; - unsigned long l; + intmax_t v; char *endp; switch(tag) { case ACL_USER: p = getpwnam(name); if (p == NULL) { - l = strtoul(name, &endp, 0); - if (*endp != '\0' || l != (unsigned long)(uid_t)l) { - errno = EINVAL; + errno = 0; + v = strtoimax(name, &endp, 0); + if (name == endp || *endp != '\0' || + errno == ERANGE || _invalid_uidgid(v) != 0) { + errno = EINVAL; /* No or invalid number */ return (-1); } - *id = (uid_t)l; + *id = v; return (0); } *id = p->pw_uid; @@ -295,12 +316,14 @@ _acl_name_to_id(acl_tag_t tag, char *name, uid_t *id) case ACL_GROUP: g = getgrnam(name); if (g == NULL) { - l = strtoul(name, &endp, 0); - if (*endp != '\0' || l != (unsigned long)(gid_t)l) { - errno = EINVAL; + errno = 0; + v = strtoimax(name, &endp, 0); + if (name == endp || *endp != '\0' || + errno == ERANGE || _invalid_uidgid(v) != 0) { + errno = EINVAL; /* No or invalid number */ return (-1); } - *id = (gid_t)l; + *id = v; return (0); } *id = g->gr_gid;