svn commit: r220460 - head/sys/amd64/amd64
Konstantin Belousov
kib at FreeBSD.org
Fri Apr 8 21:26:50 UTC 2011
Author: kib
Date: Fri Apr 8 21:26:50 2011
New Revision: 220460
URL: http://svn.freebsd.org/changeset/base/220460
Log:
Disable local interrupts before testing the PCB_FULL_IRET flag.
Thread might be preempted after testing, which causes the flag to be
cleared. If ast was not delivered, we will do sysret with potentially
wrong fs/gs bases.
Reviewed by: jhb, jkim
MFC after: 1 week (together with r220430, r220452)
Modified:
head/sys/amd64/amd64/exception.S
Modified: head/sys/amd64/amd64/exception.S
==============================================================================
--- head/sys/amd64/amd64/exception.S Fri Apr 8 19:54:29 2011 (r220459)
+++ head/sys/amd64/amd64/exception.S Fri Apr 8 21:26:50 2011 (r220460)
@@ -383,10 +383,11 @@ IDTVEC(fast_syscall)
movq %rsp,%rdi
call syscall
1: movq PCPU(CURPCB),%rax
+ /* Disable interrupts before testing PCB_FULL_IRET. */
+ cli
testl $PCB_FULL_IRET,PCB_FLAGS(%rax)
jnz 3f
/* Check for and handle AST's on return to userland. */
- cli
movq PCPU(CURTHREAD),%rax
testl $TDF_ASTPENDING | TDF_NEEDRESCHED,TD_FLAGS(%rax)
je 2f
More information about the svn-src-head
mailing list