There's the possibility to follow up with another test and to investigate some behaviour noticed by @laanwj, that resulted in this comment:
edit: the load offset for the writable data is curious: 0x00000000008f7920 is not page aligned, and right after the read-only data, does this mean read-only and read-write data are stilll allowed to share a page?
I'm still spooked by this, by the way. Not sure if it is an (upstream) bug or expected behavior. I thought about adding a check that LOAD ranges with different permissions don't overlap on the same memory pages, but this is a clear violation of this, making the separation less effective.
(in any case, not a reason to not move forward with this as it is, better is better)
Edit: it does seem to work out locally, maybe I just miscounted? I've added a per-page permission check in this commit: https://github.com/laanwj/bitcoin/commit/9d9fcefcaec3d638f472ea77c146eaec8f9079c1
It may also be the case that this is expected, and we just need to confirm that.