Lock the knlist before releasing the in-flux state in knote_fork().
Otherwise there is a window, before iteration is resumed, during which the knote may be freed. The in-flux state ensures that the knote will not be removed from the knlist while locks are dropped. PR: 228858 Reviewed by: kib Tested by: pho MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18316
This commit is contained in:
parent
687e45b163
commit
1eeab857a3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340897
@ -600,10 +600,10 @@ knote_fork(struct knlist *list, int pid)
|
||||
kn->kn_fflags |= NOTE_TRACKERR;
|
||||
if (kn->kn_fop->f_event(kn, NOTE_FORK))
|
||||
KNOTE_ACTIVATE(kn, 0);
|
||||
list->kl_lock(list->kl_lockarg);
|
||||
KQ_LOCK(kq);
|
||||
kn_leave_flux(kn);
|
||||
KQ_UNLOCK_FLUX(kq);
|
||||
list->kl_lock(list->kl_lockarg);
|
||||
}
|
||||
list->kl_unlock(list->kl_lockarg);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user