git: f7ab908244e5 - main - freebsd32_setcred: Copy all of the setcred fields individually
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 24 Nov 2025 15:54:25 UTC
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 [*] */
};