Description: | A statement in the System Programming Guide of the Intel 64 and IA-32
Architectures Software Developer's Manual (SDM) was mishandled in the
development of some or all operating-system kernels, resulting in
unexpected behavior for #DB exceptions that are deferred by MOV SS or
POP SS, as demonstrated by (for example) privilege escalation in
Windows, macOS, some Xen configurations, or FreeBSD, or a Linux kernel
crash. The MOV to SS and POP SS instructions inhibit interrupts
(including NMIs), data breakpoints, and single step trap exceptions
until the instruction boundary following the next instruction (SDM
Vol. 3A; section 6.8.3). (The inhibited data breakpoints are those on
memory accessed by the MOV to SS or POP to SS instruction itself.)
Note that debug exceptions are not inhibited by the interrupt enable
(EFLAGS.IF) system flag (SDM Vol. 3A; section 2.3). If the instruction
following the MOV to SS or POP to SS instruction is an instruction
like SYSCALL, SYSENTER, INT 3, etc. that transfers control to the
operating system at CPL < 3, the debug exception is delivered after
the transfer to CPL < 3 is complete. OS kernels may not expect this
order of events and may therefore experience unexpected behavior when
it occurs.
|