CVE-2026-98888: arm64: kprobes: Allow reentering kprobes while single-stepping
In the Linux kernel, the following vulnerability has been resolved:
arm64: kprobes: Allow reentering kprobes while single-stepping
A kprobe can be hit while another kprobe is in KPROBEHITSS state. This can happen when tracing or perf code runs from the debug exception path while the first kprobe is preparing or executing its out-of-line single-step instruction.
Currently arm64 treats a kprobe hit in KPROBEHITSS as unrecoverable, the same as a hit in KPROBEREENTER. This is too strict. A hit in KPROBEHITSS is still a one-level reentry and can be handled by saving the current kprobe state and setting up single-step for the new probe, just like reentry from KPROBEHITACTIVE or KPROBEHITSSDONE.
The truly unrecoverable case is hitting another kprobe while already in KPROBEREENTER, because the reentry save area has already been consumed.
Move KPROBEHITSS to the recoverable reentry cases and leave KPROBEREENTER as the unrecoverable nested reentry case.
This change also requires saving savedirqflag in struct prevkprobe. When a nested kprobe calls kprobessavelocalirqflag(), it overwrites kcb->savedirqflag with the currently masked DAIF value, losing the outer kprobe's original DAIF state. Without this fix, when the outer kprobe's single-step finishes, kprobesrestorelocalirqflag() applies the wrong DAIF mask and leaves interrupts permanently disabled.
Extend struct prevkprobe with a savedirqflag field and save/restore it alongside kp and status. This ensures the outer kprobe's original interrupt state is preserved across reentry.
This mirrors the x86 fix in commit 6a5022a56ac3 ("kprobes/x86: Allow to handle reentered kprobe on single-stepping").
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Linux kernelto a version that resolves this vulnerability.Patch 6a5022a56ac3