Date: Thu, 29 Jan 2026 15:42:43 +0000 From: John Baldwin <jhb@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 4b89fb6af98e - stable/15 - freebsd32_setcred: Copy all of the setcred fields individually Message-ID: <697b7ff3.37877.6fa6e497@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/15 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=4b89fb6af98e9783b0c51d1b2110bff613531574 commit 4b89fb6af98e9783b0c51d1b2110bff613531574 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2025-11-24 15:49:09 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2026-01-29 15:30:33 +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 (cherry picked from commit f7ab908244e50c8c8edf314424c860e34ea3d7e9) --- 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 d31bd1a65d93..8a2c179926d8 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -4250,10 +4250,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 [*] */ };home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?697b7ff3.37877.6fa6e497>
