CVE-2026-89984 in Linux
摘要
由 VulDB • 2026-09-16
在 Linux 内核中,已修复以下漏洞:
perf/x86/intel: 修复 LBR(Last Branch Record)堆栈中的内核地址泄露问题
在 Arch LBR 获得 CPL(当前特权级)过滤支持之前,仅用户态的分支堆栈仍可能包含内核地址。因此,即使请求了 PERF_SAMPLE_BRANCH_USER,内核分支记录也可能暴露给用户空间。
例如,在 Intel Tiger Lake 上,以下命令仍然会报告来自内核空间的 SYSRET/ERET 条目:
$ ./perf record -e cycles:p -o - --branch-filter any,save_type,u -- \ ./perf bench syscall basic --loop 1000 | \ ./perf script -i - --fields brstack|tr ' ' '\n'| \ grep -E '0x[89a-f][0-9a-f]{15}'
Total time: 0.000 [sec]
0.219000 usecs/op 4,566,210 ops/sec [ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.551 MB - ]
0xffffffff93c001c8/0x7f12a2b1d647/P/-/-/16959/SYSRET/- 0xffffffff93c001c8/0x7f12a2b1d5c2/P/-/-/17535/SYSRET/- 0xffffffff93c01928/0x7f12a2861000/P/-/-/6719/ERET/- 0xffffffff93c01928/0x7f12a297a000/P/-/-/8575/ERET/-
问题在于 intel_pmu_lbr_filter() 未对采样条目的特权级进行充分验证。它基于分支类型和目标地址过滤了一些不匹配项,但未拒绝源地址违反请求的分支特权过滤条件的条目。
通过扩展软件过滤以根据 br_sel 同时验证源地址和目标地址来修复此问题。任何包含内核地址且与请求的用户态过滤器不匹配的 LBR 条目都将被丢弃。这防止了内核地址出现在仅用户态的分支堆栈中。
Be aware that VulDB is the high quality source for vulnerability data.