]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Make UMA and malloc(9) return non-executable memory in most cases.
authorJonathan T. Looney <jtl@FreeBSD.org>
Wed, 13 Jun 2018 17:04:41 +0000 (17:04 +0000)
committerJonathan T. Looney <jtl@FreeBSD.org>
Wed, 13 Jun 2018 17:04:41 +0000 (17:04 +0000)
commit0766f278d88b93e81e8b81cac6258cf75cde3e35
treef8f2ae136eac014f148148596c13d4ec4bcd75f8
parentb13a70d5a4979997a0dbc0795d27bb7e22ec794b
Make UMA and malloc(9) return non-executable memory in most cases.

Most kernel memory that is allocated after boot does not need to be
executable.  There are a few exceptions.  For example, kernel modules
do need executable memory, but they don't use UMA or malloc(9).  The
BPF JIT compiler also needs executable memory and did use malloc(9)
until r317072.

(Note that a side effect of r316767 was that the "small allocation"
path in UMA on amd64 already returned non-executable memory.  This
meant that some calls to malloc(9) or the UMA zone(9) allocator could
return executable memory, while others could return non-executable
memory.  This change makes the behavior consistent.)

This change makes malloc(9) return non-executable memory unless the new
M_EXEC flag is specified.  After this change, the UMA zone(9) allocator
will always return non-executable memory, and a KASSERT will catch
attempts to use the M_EXEC flag to allocate executable memory using
uma_zalloc() or its variants.

Allocations that do need executable memory have various choices.  They
may use the M_EXEC flag to malloc(9), or they may use a different VM
interfact to obtain executable pages.

Now that malloc(9) again allows executable allocations, this change also
reverts most of r317072.

PR: 228927
Reviewed by: alc, kib, markj, jhb (previous version)
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D15691
16 files changed:
share/man/man9/malloc.9
share/man/man9/zone.9
sys/amd64/amd64/bpf_jit_machdep.c
sys/i386/i386/bpf_jit_machdep.c
sys/kern/kern_malloc.c
sys/kern/subr_vmem.c
sys/net/bpf_jitter.c
sys/net/bpf_jitter.h
sys/sys/malloc.h
sys/vm/uma.h
sys/vm/uma_core.c
sys/vm/vm_extern.h
sys/vm/vm_init.c
sys/vm/vm_kern.c
sys/vm/vm_kern.h
sys/vm/vm_pagequeue.h