CVE-2026-98396
Received Received - Intake

Kernel KUAP State Corruption in Linux PowerPC

Vulnerability report for CVE-2026-98396, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-10-14

Last updated on: 2026-10-19

Assigner: kernel.org

Description

In the Linux kernel, the following vulnerability has been resolved: powerpc: Do not restore KUAP in arch_exit_to_user_mode_prepare() KUAP means kernel cannot touch user memory unless it explicitly is enabled. In the kernel it should stay AMR_KUAP_BLOCKED. While returning to userspace just before RFI, kernel should restore the user AMR value back. Looks like GENERIC_ENTRY might be treating arch_exit_to_user_mode_prepare() as the last architecture step before returning to userspace. commit bee25f97ad24 ("powerpc: Enable GENERIC_ENTRY feature") therefore called kuap_user_restore() from that hook. But on PowerPC that is too early. After irqentry_exit() / syscall_exit_to_user_mode() we still run platform specific exit routines. e.g. code snippets showing both exception handling and system call handling as the callers of function arch_exit_to_user_mode_prepare() which does kuap_user_restore(). The below path shows that calling kuap_user_restore() is too early when called from arch_exit_to_user_mode_prepare(). Exception handling in exceptions-64s.S ======================================= bl CFUNC(do_page_fault) ..DEFINE_INTERRUPT_HANDLER_ASYNC(do_page_fault) arch_interrupt_async_enter_prepare(regs); state = irqentry_enter(regs); instrumentation_begin(); irq_enter_rcu(); handler(regs); nap_adjust_return(regs); irq_exit_rcu(); instrumentation_end(); arch_interrupt_async_exit_prepare(regs); irqentry_exit(regs, state); <<< too early irqentry_exit_to_user_mode() __exit_to_user_mode_prepare(regs, EXIT_TO_USER_MODE_WORK_IRQ); arch_exit_to_user_mode_prepare(regs, ti_work); <<< too early b interrupt_return_srr .. bl CFUNC(interrupt_exit_user_prepare) <<< already calls kuap_user_restore prep_irq_for_enabled_exit() retry can run kernel code with IRQs on. So only when that routine is fully finished is when the user KUAP should be fully restored which interrupt_exit_user_prepare() already takes care of before returning. Similarly for system call handling in interrupt_64.S ====================================================== bl CFUNC(system_call_exception) .Lsyscall_exit: addi r4,r1,STACK_INT_FRAME_REGS li r5,0 /* !scv */ bl CFUNC(syscall_exit_prepare) .. kuap_assert_locked(); syscall_exit_to_user_mode(regs); <<< too early syscall_exit_to_user_mode_prepare(regs); <<< too early kuap_user_restore(regs); <<< already calls syscall_exit_prepare(), which can enable IRQs, replay a pending interrupt, and only then rfi. Those functions already restore KUAP immediately before rfi. Note that if we restore the user AMR too early like in the current code as shown from the code snippets above, then we get the following warning when CONFIG_PPC_KUAP_DEBUG is enabled: WARNING: arch/powerpc/include/asm/book3s/64/kup.h:293 at interrupt_exit_user_prepare+0x1a0/0x1c0 Hardware name: IBM pSeries (emulated by qemu) POWER10 (architected) TRAP: 0700 LR: c00000000000d8d4 CTR: c0000000021fe500 MSR: <SF,EE,ME,IR,DR,RI,LE> CR: 44000804 XER: 20040000 interrupt_exit_user_prepare+0x1a0/0x1c0 interrupt_return_srr_user+0x8/0x12c

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-10-14
Last Modified
2026-10-19
Generated
2026-10-19
AI Q&A
2026-10-15
EPSS Evaluated
2026-10-18
NVD
EUVD

Affected Vendors & Products

Showing 3 associated CPEs
Vendor Product Version / Range
Linux Linux 02565a782c1ee7e8ada38ad24a698e01d6ea9ff8
Linux Linux 02565a782c1ee7e8ada38ad24a698e01d6ea9ff8
Linux Linux 7.2

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in the Linux kernel involves incorrect restoration of the Kernel User Access Prevention (KUAP) mechanism on PowerPC systems. KUAP prevents the kernel from accessing user memory unless explicitly enabled. The issue occurs when the kernel restores the user's AMR (Address Mask Register) value too early during the transition back to user mode, specifically in the arch_exit_to_user_mode_prepare() function. This can lead to security risks as the kernel might access user memory prematurely.

Detection Guidance

This vulnerability is specific to the Linux kernel's PowerPC architecture and involves incorrect KUAP (Kernel User Access Protection) restoration timing. Detection requires checking kernel logs for warnings related to KUAP or interrupt_exit_user_prepare. Look for messages like 'WARNING: arch/powerpc/include/asm/book3s/64/kup.h' in system logs when CONFIG_PPC_KUAP_DEBUG is enabled.

Impact Analysis

This vulnerability could allow unauthorized access to user memory by the kernel, potentially leading to data leaks or privilege escalation. Attackers might exploit this to read sensitive data or manipulate system behavior. Systems running affected versions of the Linux kernel on PowerPC architectures are at risk.

Compliance Impact

This vulnerability does not directly affect compliance with GDPR, HIPAA, or other standards. It is a low-level kernel memory access control issue specific to PowerPC architecture in the Linux kernel. No evidence suggests it impacts data protection, privacy, or security controls required by these regulations.

Mitigation Strategies

Apply the kernel patch that fixes the GENERIC_ENTRY integration with arch_exit_to_user_mode_prepare. Ensure your Linux distribution has incorporated commit bee25f97ad24 or later. Monitor kernel updates from your vendor and update immediately if using PowerPC architecture.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-98396. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart