From nobody Wed Sep 17 12:19:07 2025 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 4cRd9R4wrtz67Hn0; Wed, 17 Sep 2025 12:19:07 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cRd9R1SCzz3VVP; Wed, 17 Sep 2025 12:19:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758111547; 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=o7CAb+ogG+3H7yztK1f86DJeBD3UUUveqIOvrGHZg+E=; b=bfOkE6LAt8FP+tw30iyKtOtpgx/w1vtP8YafwamwqAG3EzHJROEchPSFLhyFYbtn0nnP+/ 9czE9HgETzymP3TIGt8JBSw1jIzObrLI5yzraQTIyU0HLRm7i0jtH/r1und0eAiZtRgxoo P7O51btH4t0X1vcgGn2SvQc60y1PjoUIIX0wuV9QIk4qhg4lyy502IhmpDD40MpbBGdlXi TlkM7QHumyhr4XZFgaTVfDVSgwzsAKrYL2GGlUFwdBa0Gsn3AVn376fitzlkuMQpyzEngd H9La/6Mbo0cmwIheOWw74HzYNih4YTw6clL5jeolJAdQSUBzxK06SAHR3fCL3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758111547; 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=o7CAb+ogG+3H7yztK1f86DJeBD3UUUveqIOvrGHZg+E=; b=urX4h5LsHsVvUY5e3769lt+i8vx6tN4ngFBtQLOXElqF6X4plbjo1hXCpDJ7d28foLJWG6 gkN5U7HAdbjsWbsj+bVcz5tS3/Aw8f0hI+I6/8sydyLmuH30A4q0GexN2CnHi/GNbxXLf9 I9Ozpd6FZjFWAr1GCc8LRNRseX7vK12DmjirN2OZbbl5kRv9a46/2+AaJw2qaxuLTz7Y/S 6m4CehX9VH7QPGm+htSpQ+i9eH2dxPiQF7utvrI+1a9dh07vvvTbFRa6PPdIa8aGXU1C9F qkDItTfjjXfHkHzzaec31vTAh08yZ2nwwpZvUPuf+4u7QgsCGdrGGgM6/ArZ0g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758111547; a=rsa-sha256; cv=none; b=yDiTRvAxyCCDuQUxNZXytH7IcKnVYr8sHo51+glOQdhwmgOk3KjEFzeT0JsjLDutEOYZTV fi3EoMeZgogTmgEg0T90d0AEakjAdQS1VwKE5iEvSFRThiIELMJhYayY6sp3SETmzcsTju R1RpNzzBMX2ly8Hjvg0VG2/Eozdt8cneNSf/uD7N7xWxD9b5ZxYRLqFTeDDUPBBEaZCkak FC45vxzSHgBA8hwU/Q0sYB4+IE4O7d+FtquhYaxs9GyPgh5IN/Auo4C146wpxwgCyg6n6I dREVqYcHr4E+Ff5FNHjBBDW7QUOHUmBImdgB0PuZiwHWnGhAjde5glt4puKHdg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4cRd9R10Dsz9hN; Wed, 17 Sep 2025 12:19:07 +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 58HCJ7d2085820; Wed, 17 Sep 2025 12:19:07 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58HCJ7qn085817; Wed, 17 Sep 2025 12:19:07 GMT (envelope-from git) Date: Wed, 17 Sep 2025 12:19:07 GMT Message-Id: <202509171219.58HCJ7qn085817@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: a207833f4fed - main - linux: Simplify further getgroups() after 'cr_gid' not in cr_groups[] 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: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a207833f4fed5431cac853c082fa34dc8f33cba6 Auto-Submitted: auto-generated The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=a207833f4fed5431cac853c082fa34dc8f33cba6 commit a207833f4fed5431cac853c082fa34dc8f33cba6 Author: Olivier Certner AuthorDate: 2025-08-28 15:29:33 +0000 Commit: Olivier Certner CommitDate: 2025-09-17 12:16:04 +0000 linux: Simplify further getgroups() after 'cr_gid' not in cr_groups[] No functional change (intended). While here, fix/improve style a bit and in setgroups(). MFC after: 5 days MFC to: stable/15 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52276 --- sys/compat/linux/linux_misc.c | 36 ++++++++++++++++-------------------- sys/compat/linux/linux_uid16.c | 36 ++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index 5e32353c6b8e..755eae057406 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -1028,18 +1028,19 @@ linux_nice(struct thread *td, struct linux_nice_args *args) int linux_setgroups(struct thread *td, struct linux_setgroups_args *args) { + const int ngrp = args->gidsetsize; struct ucred *newcred, *oldcred; l_gid_t *linux_gidset; - int ngrp, error; + int error; struct proc *p; - ngrp = args->gidsetsize; if (ngrp < 0 || ngrp >= ngroups_max) return (EINVAL); linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK); error = copyin(args->grouplist, linux_gidset, ngrp * sizeof(l_gid_t)); if (error) goto out; + newcred = crget(); crextend(newcred, ngrp); p = td->td_proc; @@ -1071,34 +1072,29 @@ out: int linux_getgroups(struct thread *td, struct linux_getgroups_args *args) { - struct ucred *cred; + const struct ucred *const cred = td->td_ucred; l_gid_t *linux_gidset; - gid_t *bsd_gidset; - int bsd_gidsetsz, ngrp, error; + int ngrp, error; - cred = td->td_ucred; - bsd_gidset = cred->cr_groups; - bsd_gidsetsz = cred->cr_ngroups; + ngrp = args->gidsetsize; - if ((ngrp = args->gidsetsize) == 0) { - td->td_retval[0] = bsd_gidsetsz; + if (ngrp == 0) { + td->td_retval[0] = cred->cr_ngroups; return (0); } - - if (ngrp < bsd_gidsetsz) + if (ngrp < cred->cr_ngroups) return (EINVAL); - ngrp = 0; - linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset), - M_LINUX, M_WAITOK); - while (ngrp < bsd_gidsetsz) { - linux_gidset[ngrp] = bsd_gidset[ngrp]; - ngrp++; - } + ngrp = cred->cr_ngroups; + + linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK); + for (int i = 0; i < ngrp; ++i) + linux_gidset[i] = cred->cr_groups[i]; error = copyout(linux_gidset, args->grouplist, ngrp * sizeof(l_gid_t)); free(linux_gidset, M_LINUX); - if (error) + + if (error != 0) return (error); td->td_retval[0] = ngrp; diff --git a/sys/compat/linux/linux_uid16.c b/sys/compat/linux/linux_uid16.c index 1d9a19916412..07430f5b399b 100644 --- a/sys/compat/linux/linux_uid16.c +++ b/sys/compat/linux/linux_uid16.c @@ -85,12 +85,12 @@ linux_lchown16(struct thread *td, struct linux_lchown16_args *args) int linux_setgroups16(struct thread *td, struct linux_setgroups16_args *args) { + const int ngrp = args->gidsetsize; struct ucred *newcred, *oldcred; l_gid16_t *linux_gidset; - int ngrp, error; + int error; struct proc *p; - ngrp = args->gidsetsize; if (ngrp < 0 || ngrp >= ngroups_max) return (EINVAL); linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK); @@ -100,6 +100,7 @@ linux_setgroups16(struct thread *td, struct linux_setgroups16_args *args) free(linux_gidset, M_LINUX); return (error); } + newcred = crget(); p = td->td_proc; PROC_LOCK(p); @@ -133,34 +134,29 @@ out: int linux_getgroups16(struct thread *td, struct linux_getgroups16_args *args) { - struct ucred *cred; + const struct ucred *const cred = td->td_ucred; l_gid16_t *linux_gidset; - gid_t *bsd_gidset; - int bsd_gidsetsz, ngrp, error; + int ngrp, error; - cred = td->td_ucred; - bsd_gidset = cred->cr_groups; - bsd_gidsetsz = cred->cr_ngroups; + ngrp = args->gidsetsize; - if ((ngrp = args->gidsetsize) == 0) { - td->td_retval[0] = bsd_gidsetsz; + if (ngrp == 0) { + td->td_retval[0] = cred->cr_ngroups; return (0); } - - if (ngrp < bsd_gidsetsz) + if (ngrp < cred->cr_ngroups) return (EINVAL); - ngrp = 0; - linux_gidset = malloc(bsd_gidsetsz * sizeof(*linux_gidset), - M_LINUX, M_WAITOK); - while (ngrp < bsd_gidsetsz) { - linux_gidset[ngrp] = bsd_gidset[ngrp]; - ngrp++; - } + ngrp = cred->cr_ngroups; + + linux_gidset = malloc(ngrp * sizeof(*linux_gidset), M_LINUX, M_WAITOK); + for (int i = 0; i < ngrp; ++i) + linux_gidset[i] = cred->cr_groups[i]; error = copyout(linux_gidset, args->gidset, ngrp * sizeof(l_gid16_t)); free(linux_gidset, M_LINUX); - if (error) { + + if (error != 0) { LIN_SDT_PROBE1(uid16, linux_getgroups16, copyout_error, error); return (error); }