freebsd-dev/sys
Brooks Davis 74a1b66cf4 Extend mmap/mprotect API to specify the max page protections.
A new macro PROT_MAX() alters a protection value so it can be OR'd with
a regular protection value to specify the maximum permissions.  If
present, these flags specify the maximum permissions.

While these flags are non-portable, they can be used in portable code
with simple ifdefs to expand PROT_MAX() to 0.

This change allows (e.g.) a region that must be writable during run-time
linking or JIT code generation to be made permanently read+execute after
writes are complete.  This complements W^X protections allowing more
precise control by the programmer.

This change alters mprotect argument checking and returns an error when
unhandled protection flags are set.  This differs from POSIX (in that
POSIX only specifies an error), but is the documented behavior on Linux
and more closely matches historical mmap behavior.

In addition to explicit setting of the maximum permissions, an
experimental sysctl vm.imply_prot_max causes mmap to assume that the
initial permissions requested should be the maximum when the sysctl is
set to 1.  PROT_NONE mappings are excluded from this for compatibility
with rtld and other consumers that use such mappings to reserve
address space before mapping contents into part of the reservation.  A
final version this is expected to provide per-binary and per-process
opt-in/out options and this sysctl will go away in its current form.
As such it is undocumented.

Reviewed by:	emaste, kib (prior version), markj
Additional suggestions from:	alc
Obtained from:	CheriBSD
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D18880
2019-06-20 18:24:16 +00:00
..
amd64 Implement VT-d capability detection on chipsets that have multiple 2019-06-19 06:41:07 +00:00
arm Implement the ofw_bus_get_node method in aw_pwm(4) so that ofw_pwmbus can 2019-06-17 03:40:00 +00:00
arm64 Correct an error in r349122. pmap_unwire() should update the pmap's wired 2019-06-19 03:33:00 +00:00
bsm Create new EINTEGRITY error with message "Integrity check failed". 2019-01-17 06:35:45 +00:00
cam Minor white space changes. 2019-06-11 20:48:19 +00:00
cddl Minimize aggsum_compare(&arc_size, arc_c) calls. 2019-06-14 20:04:28 +00:00
compat Replace uses of vm_page_unwire(m, PQ_NONE) with vm_page_unwire_noq(m). 2019-06-07 18:23:29 +00:00
conf Add ACPI support for USB driver. 2019-06-17 23:03:30 +00:00
contrib Make ipf_objbytes a constant. ipf_objbytes is a table of internal data 2019-06-17 20:10:55 +00:00
crypto aesni(4): Fix trivial type typo 2019-05-27 00:47:51 +00:00
ddb Extract eventfilter declarations to sys/_eventfilter.h 2019-05-20 00:38:23 +00:00
dev random(4): Fix a regression in short AES mode reads 2019-06-18 18:50:58 +00:00
dts arm64: Add support for NanoPI NEO2 2019-05-02 12:56:13 +00:00
fs Separate kernel crc32() implementation to its own header (gsb_crc32.h) and 2019-06-17 19:49:08 +00:00
gdb
geom Use sbuf_cat() in GEOM confxml generation. 2019-06-19 15:36:02 +00:00
gnu dts: Import files from Linux 5.1 2019-05-08 19:27:30 +00:00
i386 Implement an alternative solution to the amd64 and i386 pmap problem that we 2019-06-09 03:36:10 +00:00
isa
kern Add FIOBMAP2 ioctl 2019-06-20 14:13:10 +00:00
kgssapi Make the warning intervals for deprecated crypto algorithms tunable. 2019-06-11 23:00:55 +00:00
libkern Separate kernel crc32() implementation to its own header (gsb_crc32.h) and 2019-06-17 19:49:08 +00:00
mips Replace uses of vm_page_unwire(m, PQ_NONE) with vm_page_unwire_noq(m). 2019-06-07 18:23:29 +00:00
modules Add ACPI support for USB driver. 2019-06-17 23:03:30 +00:00
net V_ip6_forwarding and V_ipforwarding have been defined in ip6_var.h / 2019-06-19 08:49:24 +00:00
net80211 Enhance the comment ieee80211_add_channel() to avoid a 2019-06-10 14:31:18 +00:00
netgraph Remove 'dir' argument in ng_ipfw_input, since ip_fw_args now has this info. 2019-03-14 22:30:05 +00:00
netinet Add the ability to limit how much the code will fragment the RACK send map 2019-06-19 13:55:00 +00:00
netinet6 Sort opt_foo.h #includes and add a missing blank line in ip_output(). 2019-06-11 22:07:39 +00:00
netipsec Make the warning intervals for deprecated crypto algorithms tunable. 2019-06-11 23:00:55 +00:00
netpfil Separate kernel crc32() implementation to its own header (gsb_crc32.h) and 2019-06-17 19:49:08 +00:00
netsmb Remove unused argument to priv_check_cred. 2018-12-11 19:32:16 +00:00
nfs
nfsclient
nfsserver
nlm
ofed Fix prio vs. nonprio tagged traffic in RDMACM 2019-06-04 06:21:31 +00:00
opencrypto Move declaration of warninterval out from under COMPAT_FREEBSD32. 2019-06-11 23:28:07 +00:00
powerpc Fix bug on newbus device deletion: we should delete the child's devinfo 2019-06-16 21:56:45 +00:00
riscv RISC-V: expose extension bits in AT_HWCAP 2019-06-11 00:55:54 +00:00
rpc Fix malloc stats for the RPCSEC_GSS server code when DEBUG is enabled. 2019-04-04 01:23:06 +00:00
security Extract eventfilter declarations to sys/_eventfilter.h 2019-05-20 00:38:23 +00:00
sparc64 FCP-101: Remove wb(4) 2019-05-17 15:24:34 +00:00
sys Extend mmap/mprotect API to specify the max page protections. 2019-06-20 18:24:16 +00:00
teken Attempt to complete fixing programmable function keys for syscons. 2019-02-20 02:14:41 +00:00
tests Regularize the Netflix copyright 2019-02-04 21:28:25 +00:00
tools Add SDIO support. 2019-06-08 16:26:56 +00:00
ufs Add FIOBMAP2 ioctl 2019-06-20 14:13:10 +00:00
vm Extend mmap/mprotect API to specify the max page protections. 2019-06-20 18:24:16 +00:00
x86 Currently, MCA entries remain on an every-growing linked list. This means 2019-06-08 18:26:48 +00:00
xdr
xen xen: introduce a new way to setup event channel upcall 2019-01-30 11:34:52 +00:00
Makefile