Add a new PT_OPENBSD_NOBTCFI "segment type" to indicate that the kernel
authorkettenis <kettenis@openbsd.org>
Wed, 19 Apr 2023 15:37:36 +0000 (15:37 +0000)
committerkettenis <kettenis@openbsd.org>
Wed, 19 Apr 2023 15:37:36 +0000 (15:37 +0000)
commit7e82ed534d1a25a5c556e9d910e22050313dcdfa
tree7664fc5be51096ac41e77fef50e07c3d36a504dc
parent2c34d847be01bf339394fb11d1e9410ca78ac2e3
Add a new PT_OPENBSD_NOBTCFI "segment type" to indicate that the kernel
should not enforce branch target control flow integrety for a binary.
This works analoguous to PT_OPENBSD_WXNEEDED in that we will set it on
binaries that don't have the necessary landing pads (yet).  The kernel
will enforce branch target CFI by default in the near future!

This is a better match for what we want to achieve than the GNU property
note mechanism that the Linux folks came up with.  We can still use the
GNU property notes for diagnostic purposes so we won't disable their
generation in the toolchain.  But ports will need to pass an explicit
-Wl,-z,nobtcfi option to disable branch target CFI.

Like with PT_OPENBSD_WXNEEDED we convert the presence of PT_OPENBSD_NOBTCFI
into a flag in struct exec_package.  From there MD code can pick it up
and set a struct process flag or take action in setregs().

ok deraadt@
sys/kern/exec_elf.c
sys/sys/exec.h
sys/sys/exec_elf.h