On Thu, Jul 31, 2025 at 04:44:38AM +0000, Kyle Evans wrote:
> The branch main has been updated by kevans:
> 
> URL: 
> https://cgit.FreeBSD.org/src/commit/?id=be1f7435ef218b1df35aebf3b90dd65ffd8bbe51
> 
> commit be1f7435ef218b1df35aebf3b90dd65ffd8bbe51
> Author:     Kyle Evans <kev...@freebsd.org>
> AuthorDate: 2025-07-31 04:44:11 +0000
> Commit:     Kyle Evans <kev...@freebsd.org>
> CommitDate: 2025-07-31 04:44:11 +0000
> 
>     kern: start tracking cr_gid outside of cr_groups[]
>     
>     This is the (mostly) kernel side of de-conflating cr_gid and the
>     supplemental groups.  The pre-existing behavior for getgroups() and
>     setgroups() is retained to keep the user <-> kernel boundary
>     functionally the same while we audit use of these syscalls, but we can
>     remove a lot of the internal special-casing just by reorganizing ucred
>     like this.
>     
>     struct xucred has been altered because the cr_gid macro becomes
>     problematic if ucred has a real cr_gid member but xucred does not.  Most
>     notably, they both also have cr_groups[] members, so the definition
>     means that we could easily have situations where we end up using the
>     first supplemental group as the egid in some places.  We really can't
>     change the ABI of xucred, so instead we alias the first member to the
>     `cr_gid` name and maintain the status quo.
>     
>     This also fixes the Linux setgroups(2)/getgroups(2) implementation to
>     more cleanly preserve the group set, now that we don't need to special
>     case cr_groups[0].
>     
>     __FreeBSD_version bumped for the `struct ucred` ABI break.
>     
>     For relnotes: downstreams and out-of-tree modules absolutely must fix
>     any references to cr_groups[0] in their code.  These are almost
>     exclusively incorrect in the new world, and cr_gid should be used
>     instead.  There is a cr_gid macro available in earlier FreeBSD versions
>     that can be used to avoid having version-dependant conditionals to refer
>     to the effective group id.  Surrounding code may need adjusted if it
>     peels off the first element of cr_groups and uses the others as the
>     supplemental groups, since the supplemental groups start at cr_groups[0]
>     now if &cr_groups[0] != &cr_gid.
>     
>     Relnotes:       yes (see last paragraph)
>     Co-authored-by: olce
>     Differential Revision:  https://reviews.freebsd.org/D51489

This syzbot report looks like it might be related to this change:
https://syzkaller.appspot.com/bug?extid=4e68da43c26f357a2b7e

No reproducer yet, but sometimes it takes a little while.

Reply via email to