madvise(2) and msync(2) have some memory/mapping destructive ops which should
authorderaadt <deraadt@openbsd.org>
Sun, 21 Jan 2024 16:57:06 +0000 (16:57 +0000)
committerderaadt <deraadt@openbsd.org>
Sun, 21 Jan 2024 16:57:06 +0000 (16:57 +0000)
commit114aad1984406bb6d9522da21182f9fcf7b0f369
treebab22493710f3abcaa266787086539f31055256d
parent5fde66222dc02764796983f1b52fd74c0b9ba09b
madvise(2) and msync(2) have some memory/mapping destructive ops which should
not be allowed upon immutable memory, instead return EPERM.
Some of these ops are not destructive in OpenBSD, but they are destructive
on other systems, so we take the "all ops" are illegal approach.

Related to this, it should not be allowed to minherit(MAP_INHERIT_ZERO)
immutable regions, or vice versa, calling mimmutable() upon MAP_INHERIT_ZERO
regions, because such a range will be zero'd post-fork in the child.
These now also return EPERM.

Adjusting the madvise / msync behaviour upon immutable memory brings us
closer to the behaviour of the mimmutable clone "mseal" being proposed by
google for inclusion in Linux.
ok kettenis
sys/uvm/uvm_map.c