HomeFreeBSD

tftpd: explicitly set egid after dropping supplemental groups

Description

tftpd: explicitly set egid after dropping supplemental groups

tftpd seems to be the last program in base that implicitly relies on
setgroups() to set the egid. This is a security landmine in portable
software as most operating systems don't behave this way, so do an
explicit setgid() in case the kernel doesn't set it already.

While we're here, FreeBSD's setgroups() has supported nominally clearing
all supplemental groups since 1997. It still leaves the egid in our
cr_groups[0] because we don't have an out-of-band way to store the egid,
and on other systems it'll clear the supplemental group entirely as one
would want.

Reviewed by: allanjude (previous version), des, olce
Differential Revision: https://reviews.freebsd.org/D51149

(cherry picked from commit 5138a20765c76cdc8f245d3d7caeffe9a9011bb2)

Details

Provenance
kevansAuthored on Jul 24 2025, 2:59 PM
olceCommitted on Fri, Dec 19, 9:16 AM
Reviewer
allanjude
Differential Revision
D51149: tftpd: explicitly set egid after dropping supplemental groups
Parents
rGb987035c2af7: uma_core: Rely on domainset iterator to wait on M_WAITOK
Branches
Unknown
Tags
Unknown