HomeFreeBSD

Fix a race in release_page().

Description

Fix a race in release_page().

Since r354156 we may call release_page() without the page's object lock
held, specifically following the page copy during a CoW fault.
release_page() must therefore unbusy the page only after scheduling the
requeue, to avoid racing with a free of the page. Previously, the
object lock prevented this race from occurring.

Add some assertions that were helpful in tracking this down.

Reported by: pho, syzkaller
Tested by: pho
Reviewed by: alc, jeff, kib
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D22234

Details

Provenance
markjAuthored on
Reviewer
alc
Differential Revision
D22234: Fix a race in release_page().
Parents
rS354399: blacklist: update to NetBSD snapshot on 20191106
Branches
Unknown
Tags
Unknown