HomeFreeBSD

jail: Handle a possible race between jail_remove(2) and fork(2)

Description

jail: Handle a possible race between jail_remove(2) and fork(2)

jail_remove(2) includes a loop that sends SIGKILL to all processes
in a jail, but skips processes in PRS_NEW state. Thus it is possible
the a process in mid-fork(2) during jail removal can survive the jail
being removed.

Add a prison flag PR_REMOVE, which is checked before the new process
returns. If the jail is being removed, the process will then exit.
Also check this flag in jail_attach(2) which has a similar issue.

Reported by: trasz
Approved by: kib
MFC after: 3 days

Details

Provenance
jamieAuthored on Feb 16 2021, 7:19 PM
Parents
rG922cf8ac43ad: Use iflib_if_init_locked() during media change instead of iflib_init_locked().
Branches
Unknown
Tags
Unknown

Event Timeline