aboutsummaryrefslogtreecommitdiff
path: root/sys/amd64/ia32/ia32_exception.S
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2018-07-29 20:47:00 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2018-07-29 20:47:00 +0000
commitb3a7db3b066386957607fe3e5db2a4c617d4f9bc (patch)
tree38e098013bd7db920190fbba484f491842dac2ef /sys/amd64/ia32/ia32_exception.S
parent70eaeb3622c3f915b892527f7b69163cbc355da3 (diff)
downloadsrc-b3a7db3b066386957607fe3e5db2a4c617d4f9bc.tar.gz
src-b3a7db3b066386957607fe3e5db2a4c617d4f9bc.zip
Use SMAP on amd64.
Ifuncs selectors dispatch copyin(9) family to the suitable variant, to set rflags.AC around userspace access. Rflags.AC bit is cleared in all kernel entry points unconditionally even on machines not supporting SMAP. Reviewed by: jhb Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D13838
Notes
Notes: svn path=/head/; revision=336876
Diffstat (limited to 'sys/amd64/ia32/ia32_exception.S')
-rw-r--r--sys/amd64/ia32/ia32_exception.S4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/amd64/ia32/ia32_exception.S b/sys/amd64/ia32/ia32_exception.S
index a52df956f869..c7bfb02f0281 100644
--- a/sys/amd64/ia32/ia32_exception.S
+++ b/sys/amd64/ia32/ia32_exception.S
@@ -70,7 +70,9 @@ int0x80_syscall_common:
movq %r14,TF_R14(%rsp)
movq %r15,TF_R15(%rsp)
movl $TF_HASSEGS,TF_FLAGS(%rsp)
- cld
+ pushfq
+ andq $~(PSL_D | PSL_AC),(%rsp)
+ popfq
FAKE_MCOUNT(TF_RIP(%rsp))
movq %rsp, %rdi
call ia32_syscall