Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Nov 2025 15:54:25 +0000
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: f7ab908244e5 - main - freebsd32_setcred: Copy all of the setcred fields individually
Message-ID:  <69247fb1.35e23.5267f1f0@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=f7ab908244e50c8c8edf314424c860e34ea3d7e9

commit f7ab908244e50c8c8edf314424c860e34ea3d7e9
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2025-11-24 15:49:09 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2025-11-24 15:49:09 +0000

    freebsd32_setcred: Copy all of the setcred fields individually
    
    This is the more typical style used in compat syscalls.  Modern
    compilers are smart enough to coalesce multiple member assignments
    into a bulk copy.
    
    Reviewed by:    olce, brooks
    Obtained from:  CheriBSD
    Sponsored by:   AFRL, DARPA
    Differential Revision:  https://reviews.freebsd.org/D53757
---
 sys/compat/freebsd32/freebsd32_misc.c | 12 ++++++++----
 sys/sys/ucred.h                       |  2 --
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index 33b4872ba10f..7913940338c2 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -4249,10 +4249,14 @@ freebsd32_setcred(struct thread *td, struct freebsd32_setcred_args *uap)
 	error = copyin(uap->wcred, &wcred32, sizeof(wcred32));
 	if (error != 0)
 		return (error);
-	/* These fields have exactly the same sizes and positions. */
-	memcpy(&wcred, &wcred32, __rangeof(struct setcred32,
-	    setcred32_copy_start, setcred32_copy_end));
-	/* Remaining fields are pointers and need PTRIN*(). */
+	memset(&wcred, 0, sizeof(wcred));
+	CP(wcred32, wcred, sc_uid);
+	CP(wcred32, wcred, sc_ruid);
+	CP(wcred32, wcred, sc_svuid);
+	CP(wcred32, wcred, sc_gid);
+	CP(wcred32, wcred, sc_rgid);
+	CP(wcred32, wcred, sc_svgid);
+	CP(wcred32, wcred, sc_supp_groups_nb);
 	PTRIN_CP(wcred32, wcred, sc_supp_groups);
 	PTRIN_CP(wcred32, wcred, sc_label);
 	return (user_setcred(td, uap->flags, &wcred));
diff --git a/sys/sys/ucred.h b/sys/sys/ucred.h
index 12d34d990bff..ba241cf9ff3a 100644
--- a/sys/sys/ucred.h
+++ b/sys/sys/ucred.h
@@ -181,7 +181,6 @@ struct setcred {
     SETCREDF_MAC_LABEL)
 
 struct setcred32 {
-#define	setcred32_copy_start	sc_uid
 	uid_t	 sc_uid;
 	uid_t	 sc_ruid;
 	uid_t	 sc_svuid;
@@ -190,7 +189,6 @@ struct setcred32 {
 	gid_t	 sc_svgid;
 	u_int	 sc_pad;
 	u_int	 sc_supp_groups_nb;
-#define	setcred32_copy_end	sc_supp_groups
 	uint32_t sc_supp_groups;	/* gid_t [*] */
 	uint32_t sc_label;		/* struct mac32 [*] */
 };


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69247fb1.35e23.5267f1f0>