Fix a long-standing pmap bug, where we would enter an executable mapping
authorkettenis <kettenis@openbsd.org>
Sat, 12 Nov 2022 12:58:34 +0000 (12:58 +0000)
committerkettenis <kettenis@openbsd.org>
Sat, 12 Nov 2022 12:58:34 +0000 (12:58 +0000)
commit68b365cea0010df0500b60fea239248eb3d11f2f
tree0fe5b51ca43439722bf35400e6246902086a386c
parentc66cbe72cabd1dc7cdcb3e7591c43ccdb8dd0c29
Fix a long-standing pmap bug, where we would enter an executable mapping
for a page before synchronizing the data and instruction cache.  This means
that another thread that is executing code on this page may not fault, but
see stale contennts until the data cache flushes and/or instruction cache
invalidation propagates.  The bug surfaced when testing a change that would
recycle code pages quickly instead of keeping them around.

Fix the issue by synchronizing the caches before entering an executable
mapping for a page.  Also make sure we mark the page as "clean" after
synchronization instead of before.

ok patrick@, jca@ (and mpi@ and dlg@ for an earlier version of this diff)
sys/arch/arm64/arm64/pmap.c