mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
x86/mm: Use lookup_address_in_pgd_attr() in show_fault_oops()
Fix show_fault_oops() to not only look at the leaf PTE for detecting NX violations, but to use the effective NX value returned by lookup_address_in_pgd_attr() instead. Signed-off-by: Juergen Gross <jgross@suse.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20240412151258.9171-3-jgross@suse.com
This commit is contained in:
parent
ceb647b4b5
commit
d29dc5177b
|
|
@ -514,18 +514,19 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, unsigned long ad
|
|||
|
||||
if (error_code & X86_PF_INSTR) {
|
||||
unsigned int level;
|
||||
bool nx, rw;
|
||||
pgd_t *pgd;
|
||||
pte_t *pte;
|
||||
|
||||
pgd = __va(read_cr3_pa());
|
||||
pgd += pgd_index(address);
|
||||
|
||||
pte = lookup_address_in_pgd(pgd, address, &level);
|
||||
pte = lookup_address_in_pgd_attr(pgd, address, &level, &nx, &rw);
|
||||
|
||||
if (pte && pte_present(*pte) && !pte_exec(*pte))
|
||||
if (pte && pte_present(*pte) && (!pte_exec(*pte) || nx))
|
||||
pr_crit("kernel tried to execute NX-protected page - exploit attempt? (uid: %d)\n",
|
||||
from_kuid(&init_user_ns, current_uid()));
|
||||
if (pte && pte_present(*pte) && pte_exec(*pte) &&
|
||||
if (pte && pte_present(*pte) && pte_exec(*pte) && !nx &&
|
||||
(pgd_flags(*pgd) & _PAGE_USER) &&
|
||||
(__read_cr4() & X86_CR4_SMEP))
|
||||
pr_crit("unable to execute userspace code (SMEP?) (uid: %d)\n",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user