HomeFreeBSD

fork: Suspend other threads if both RFPROC and RFMEM are not set

Description

fork: Suspend other threads if both RFPROC and RFMEM are not set

Otherwise, a multithreaded parent process may trigger races in
vm_forkproc() if one thread calls rfork() with RFMEM set and another
calls rfork() without RFMEM.

Also simplify vm_forkproc() a bit, vmspace_unshare() already checks to
see if the address space is shared.

Reported by: syzbot+0aa7c2bec74c4066c36f@syzkaller.appspotmail.com
Reported by: syzbot+ea84cb06937afeae609d@syzkaller.appspotmail.com
Reviewed by: kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30220

Details

Provenance
markjAuthored on May 13 2021, 12:33 PM
Reviewer
kib
Differential Revision
D30220: fork: Suspend other threads if both RFPROC and RFMEM are not set
Parents
rGb23362afa995: Final pass of cleanup: Get rid of gotos and general polish.
Branches
Unknown
Tags
Unknown