Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-98396— powerpc: Do not restore KUAP in arch_exit_to_user_mode_prepare()

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

在 Linux 内核中,已解决以下漏洞: powerpc:不要在 中恢复 KUAP KUAP(Kernel Userspace Access Prevention,内核用户空间访问防止机制)意味着:除非显式启用,否则内核不得访问用户空间内存。在内核中,AMR(Access Mode Register,访问模式寄存器)应保持为 状态。而在即将通过 RFI(Return from Exception,异常返回指令)返回用户空间之前,内核应当将用户空间的 AMR 值恢复。 看起来 机制将 视为返回用户空间前的最后一步架构

AI Predicted 3.3 Difficulty: Moderate EPSS 0.20% · P9

Affected Version Matrix 6

VendorProduct Version RangeStatus
Linux Linux 02565a782c1ee7e8ada38ad24a698e01d6ea9ff8< c8e80c19c3b9c8db83a14fab00445a6064992442 affected
02565a782c1ee7e8ada38ad24a698e01d6ea9ff8< c2549d749539487239475fbc8c614a1f9244d655 affected
7.2 affected
< 7.2 unaffected
7.2.7≤ 7.2.* unaffected
7.3-rc3≤ * unaffected
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-98396

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
powerpc: Do not restore KUAP in arch_exit_to_user_mode_prepare()
Source: CVE Program / CVE List V5
Vulnerability 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
Source: CVE Program / CVE List V5
CVSS Information
N/A
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux 02565a782c1ee7e8ada38ad24a698e01d6ea9ff8 ~ c8e80c19c3b9c8db83a14fab00445a6064992442 -
Linux Linux 7.2 -

II. Public POCs for CVE-2026-98396

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-98396

请登录查看更多情报信息。

Other References for CVE-2026-98396 (2)

Same Patch Batch · Linux · 2026-10-14 · 46 CVEs total

CVE-2026-98399 s390/ipl: Fix NULL deref in dump_reipl without re-IPL parm block
CVE-2026-98395 powerpc/entry: Fix irq_soft_mask corruption on replayed interrupt exit
CVE-2026-98393 net: ipv4: Fix UDP length overflow with PMTU discover and big MTU
CVE-2026-98391 drm/xe: Guard page-fault worker with runtime PM check
CVE-2026-98389 drm/amdgpu: skip gfx switch_power_profile during GPU reset
CVE-2026-98388 exec: do_close_on_exec() before taking exec_update_lock
CVE-2026-98387 s390/crypto: Fix skcipher_walk return code handling in aes_s390
CVE-2026-98386 scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot
CVE-2026-98390 x86/amd_node: Avoid divide by zero on virtualized systems
CVE-2026-98398 locking/lockdep: Invalidate stale class_cache entries for zapped classes
CVE-2026-98397 platform/x86: x86-android-tablets: hold device reference for secondary fwnode teardown
CVE-2026-98400 s390/ipl: Fix NULL deref in kdump without re-IPL parm block
CVE-2026-98402 net: icmp: avoid invalid transport header access in icmp_send tracepoint
CVE-2026-98401 net: iptunnel: fix stale transport header during tunnel decapsulation
CVE-2026-98403 s390/boot: Avoid IPL parameter append past command line
CVE-2026-98404 drm/virtio: Fix a NULL vs ERR_PTR() bug in virtio_gpu_user_framebuffer_create()
CVE-2026-98405 smb: client: fix missing iov bounds check in parse_posix_sids()
CVE-2026-98406 wifi: mac80211: avoid WARN in set_bitrate_mask when sdata not in driver
CVE-2026-98408 watchdog: rzv2h: Avoid division by zero
CVE-2026-98407 wifi: rsi: fix heap OOB write on key removal

Showing top 20 of 46 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2026-98396

No comments yet


Leave a comment