opnsense-src/sys/amd64/include
Mark Johnston 756bc3adc5 kasan: Create a shadow for the bootstack prior to hammer_time()
When the kernel is compiled with -asan-stack=true, the address sanitizer
will emit inline accesses to the shadow map.  In other words, some
shadow map accesses are not intercepted by the KASAN runtime, so they
cannot be disabled even if the runtime is not yet initialized by
kasan_init() at the end of hammer_time().

This went unnoticed because the loader will initialize all PML4 entries
of the bootstrap page table to point to the same PDP page, so early
shadow map accesses do not raise a page fault, though they are silently
corrupting memory.  In fact, when the loader does not copy the staging
area, we do get a page fault since in that case only the first and last
PML4Es are populated by the loader.  But due to another bug, the loader
always treated KASAN kernels as non-relocatable and thus always copied
the staging area.

It is not really practical to annotate hammer_time() and all callees
with __nosanitizeaddress, so instead add some early initialization which
creates a shadow for the boot stack used by hammer_time().  This is only
needed by KASAN, not by KMSAN, but the shared pmap code handles both.

Reported by:	mhorne
Reviewed by:	kib
MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D35449
2022-06-15 11:39:10 -04:00
..
pc smbios: Move smbios driver out from x86 machdep code 2021-02-23 21:17:09 +00:00
xen xen: Prevent buffer overflow in privcmd ioctl 2022-05-06 09:31:32 +02:00
_align.h
_bus.h Regularize my copyright notice 2019-12-04 16:56:11 +00:00
_inttypes.h
_limits.h
_stdint.h
_types.h
acpica_machdep.h
apm_bios.h
asan.h kasan: Create a shadow for the bootstack prior to hammer_time() 2022-06-15 11:39:10 -04:00
asm.h amd64: -m32 support for machine/asm(macros).h 2022-06-13 18:35:39 +01:00
asmacros.h amd64: -m32 support for machine/asm(macros).h 2022-06-13 18:35:39 +01:00
atomic.h amd64: -m32 support for machine/atomic.h 2022-06-13 18:35:39 +01:00
bus.h
bus_dma.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
clock.h x86: Deduplicate clock.h 2021-12-06 10:39:08 -05:00
counter.h amd64: -m32 support for machine/counter.h 2022-06-13 18:35:40 +01:00
cpu.h Simplify swi for bus_dma. 2021-12-28 13:51:25 -08:00
cpufunc.h amd64: -m32 support for machine/cpufunc.h 2022-06-13 18:35:38 +01:00
cputypes.h
csan.h Limit when we call DELAY from KCSAN on amd64 2021-02-25 12:38:05 +00:00
db_machdep.h Create sys/reg.h for the common code previously in machine/reg.h 2021-08-30 12:50:53 +01:00
dump.h
efi.h Remove "All Rights Reserved" from FreeBSD Foundation sys/ copyrights 2021-08-08 10:42:24 -04:00
elf.h
endian.h
exec.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
fdt.h
float.h
floatingpoint.h spdx: initial adoption of licensing ID tags. 2017-11-18 14:26:50 +00:00
fpu.h Add domain policy allocation for amd64 fpu_kern_ctx 2020-07-03 14:54:46 +00:00
frame.h amd64: centralize definitions of CS_SECURE and EFL_SECURE 2021-09-21 20:20:14 +03:00
gdb_machdep.h gdb: report specific stop reason for watchpoints 2021-03-30 11:36:41 -03:00
ieeefp.h Remove checks for __GNUCLIKE_ASM assuming it is always true. 2022-04-12 10:05:45 -07:00
in_cksum.h machine/in_cksum.h: don't include sys/cdefs.h 2022-04-18 21:02:19 +01:00
intr_machdep.h amd64: Make it easier to configure exception stack sizes 2020-11-04 16:42:20 +00:00
iodev.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
iommu.h o Add machine/iommu.h and include MD iommu headers from it, 2020-08-05 19:11:31 +00:00
kdb.h x86: implement kdb watchpoint functions 2021-03-29 12:05:43 -03:00
limits.h Remove checks for __CC_SUPPORTS_WARNING assuming it is always true. 2022-04-12 10:06:13 -07:00
md_var.h kasan: Create a shadow for the bootstack prior to hammer_time() 2022-06-15 11:39:10 -04:00
memdev.h Add the MEM_EXTRACT_PADDR ioctl to /dev/mem. 2020-09-02 18:12:47 +00:00
metadata.h
minidump.h Sparsify the vm_page_dump bitmap 2020-09-21 22:21:59 +00:00
mp_watchdog.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
msan.h Add the KMSAN runtime 2021-08-10 21:27:53 -04:00
nexusvar.h
npx.h
ofw_machdep.h
param.h amd64: Populate the KMSAN shadow maps and integrate with the VM 2021-08-10 21:27:53 -04:00
pcb.h Fix for mis-interpretation of PCB_KERNFPU. 2020-10-14 23:01:41 +00:00
pci_cfgreg.h
pcpu.h amd64: -m32 support for machine/pcpu.h 2022-06-13 18:35:40 +01:00
pcpu_aux.h amd64: -m32 support for machine/pcpu_aux.h 2022-06-13 18:35:40 +01:00
pmap.h kasan: Create a shadow for the bootstack prior to hammer_time() 2022-06-15 11:39:10 -04:00
pmc_mdep.h hwpmc: ABI fixes 2018-06-04 02:05:48 +00:00
ppireg.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
proc.h amd64: -m32 support for machine/proc.h 2022-06-13 18:35:39 +01:00
procctl.h amd64 KPTI: add control from procctl(2). 2019-03-16 11:44:33 +00:00
profile.h amd64: -m32 support for machine/profile.h 2022-06-13 18:35:39 +01:00
psl.h
ptrace.h
pvclock.h
reg.h
reloc.h sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
resource.h
runq.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
segments.h amd64: -m32 support for machine/segments.h 2022-06-13 18:35:39 +01:00
setjmp.h
sf_buf.h amd64: -m32 support for machine/sb_buf.h 2022-06-13 18:35:39 +01:00
sgx.h Add support for Intel Software Guard Extensions (Intel SGX). 2017-08-16 10:38:06 +00:00
sgxreg.h Add support for Intel Software Guard Extensions (Intel SGX). 2017-08-16 10:38:06 +00:00
sigframe.h
signal.h
smp.h amd64: rework AP startup 2021-07-27 20:11:15 +03:00
specialreg.h
stack.h
stdarg.h
sysarch.h
timerreg.h sys/amd64: further adoption of SPDX licensing ID tags. 2017-11-27 15:03:07 +00:00
tls.h Add <machine/tls.h> header to hold MD constants and helpers for TLS. 2021-12-09 13:17:13 -08:00
trap.h
tss.h amd64: move common_tss into pcpu. 2019-11-10 09:28:18 +00:00
ucontext.h
vdso.h
vm.h Create VM_MEMATTR_DEVICE on all architectures 2021-04-12 06:15:31 +00:00
vmm.h vmm: add tunable to trap WBINVD 2022-05-30 10:04:22 +02:00
vmm_dev.h Extend the VMM stats interface to support a dynamic count of statistics. 2022-02-07 14:11:10 -08:00
vmm_instruction_emul.h bhyve(8): For prototyping, reattempt decode in userspace 2020-06-25 00:18:42 +00:00
vmm_snapshot.h amd64: clean up empty lines in .c and .h files 2020-09-01 21:16:54 +00:00
vmparam.h amd64: -m32 support for machine/vmparam.h 2022-06-13 18:35:39 +01:00