Print this page
9685 KPTI %cr3 handling needs fixes

*** 249,258 **** --- 249,263 ---- /* * This is used for all interrupts that can plausibly be taken inside another * interrupt and are using a kpti_frame stack (so #BP, #DB, #GP, #PF, #SS). * + * We also use this for #NP, even though it uses the standard IST: the + * additional %rsp checks below will catch when we get an exception doing an + * iret to userspace with a bad %cs/%ss. This appears as a kernel trap, and + * only later gets redirected via kern_gpfault(). + * * We check for whether we took the interrupt while in another trampoline, in * which case we need to use the kthread stack. */ #define DBG_INTERRUPT_TRAMPOLINE_P(errpush) \ pushq %r13; \
*** 647,657 **** MK_INTR_TRAMPOLINE_NOERR(ovflotrap) MK_INTR_TRAMPOLINE_NOERR(boundstrap) MK_INTR_TRAMPOLINE_NOERR(invoptrap) MK_INTR_TRAMPOLINE_NOERR(ndptrap) MK_INTR_TRAMPOLINE(invtsstrap) ! MK_INTR_TRAMPOLINE(segnptrap) MK_DBG_INTR_TRAMPOLINE(stktrap) MK_DBG_INTR_TRAMPOLINE(gptrap) MK_DBG_INTR_TRAMPOLINE(pftrap) MK_INTR_TRAMPOLINE_NOERR(resvtrap) MK_INTR_TRAMPOLINE_NOERR(ndperr) --- 652,662 ---- MK_INTR_TRAMPOLINE_NOERR(ovflotrap) MK_INTR_TRAMPOLINE_NOERR(boundstrap) MK_INTR_TRAMPOLINE_NOERR(invoptrap) MK_INTR_TRAMPOLINE_NOERR(ndptrap) MK_INTR_TRAMPOLINE(invtsstrap) ! MK_DBG_INTR_TRAMPOLINE(segnptrap) MK_DBG_INTR_TRAMPOLINE(stktrap) MK_DBG_INTR_TRAMPOLINE(gptrap) MK_DBG_INTR_TRAMPOLINE(pftrap) MK_INTR_TRAMPOLINE_NOERR(resvtrap) MK_INTR_TRAMPOLINE_NOERR(ndperr)