Add new amd64-only sysctl machdep.retpoline which says whether the cpu
authorderaadt <deraadt@openbsd.org>
Sat, 3 Feb 2024 16:21:20 +0000 (16:21 +0000)
committerderaadt <deraadt@openbsd.org>
Sat, 3 Feb 2024 16:21:20 +0000 (16:21 +0000)
commitcd924447378b37a59157792fce303cb0542c704d
treea38c25c5007d2ca5752286d5cbad897f4bebb4b3
parent689a9b7ed5fef180f7acf0aa1f578d59f05879ab
Add new amd64-only sysctl machdep.retpoline which says whether the cpu
requires retpoline.  If 0, we should do everything in our power to avoid
pure retpoline (replacing it with a simple thunk where possible), because
by it's nature retpoline converts an indirect-branch into a direct branch
(push to stack & ret), and therefore it is an IBT (endbr64) bypass method.
This sysctl leverages guenther's decision-making logic in the kernel, which
already uses codepatch to fix the kernel retpoline thunk.
In my opinion, the retpoline-using logic really should be flipped; ROP
execution bypassing IBT to re-enter regular control flow is more dangerous
than spectre.
ok kettenis
distrib/special/sysctl/sysctl.c
sys/arch/amd64/amd64/cpu.c
sys/arch/amd64/amd64/machdep.c
sys/arch/amd64/include/cpu.h