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
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30220

(cherry picked from commit 9246b3090cbc82c54350391601b9acef2aa9a625)

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
R10:ec00c33f8181: posix timers: Check for overflow when converting to ns
Branches
Unknown
Tags
Unknown