Description (CNA)
In the Linux kernel, the following vulnerability has been resolved: powerpc/perf: fix preempt count underflow in fsl_emb_pmu_del fsl_emb_pmu_del() unconditionally calls put_cpu_var(cpu_hw_events) at the 'out:' label, but only calls the matching get_cpu_var() after the 'i < 0' early-return check. When event->hw.idx is negative the function jumps to 'out:' without having taken get_cpu_var(), and the trailing put_cpu_var() then issues an unmatched preempt_enable(), underflowing preempt_count. On a CONFIG_PREEMPT=y kernel preempt_count would underflow and eventually present as a 'scheduling while atomic' BUG. Move put_cpu_var() to pair with get_cpu_var() so the percpu access is correctly bracketed and the 'out:' label only handles perf_pmu_enable.
Affected (CNA)
| Vendor / product | Versions |
|---|---|
| Linux / Linux | affected a11106544f33c104706ae42d27219a409b67478e before c0c7722308c5f303117d8bd555290fdf26b098da; affected a11106544f33c104706ae42d27219a409b67478e before 67aeb1eb93d4ffd898a3e74a7f3fe46ee71feb28; affected a11106544f33c104706ae42d27219a409b67478e before 9a515e00b00132b6fc3f1dd62dc5204bbda8cb10; affected a11106544f33c104706ae42d27219a409b67478e before 5397142d60aa29dcf636f5459d960bfc4f97c42a; affected a11106544f33c104706ae42d27219a409b67478e before b89477077c834d94381c7bf07d81193bebefcff9; affected a11106544f33c104706ae42d27219a409b67478e before 73711688479df333acc134e3730fff1acba1843e; affected a11106544f33c104706ae42d27219a409b67478e before b504fd953664c3f4d176ae8cb594adb3fda9d577; affected a11106544f33c104706ae42d27219a409b67478e before 81e3a86030462824a67d697739cf3f387f4ba350 |
| Linux / Linux | affected 2.6.34; unaffected 0 before 2.6.34; unaffected 5.10.261 through 5.10.*; unaffected 5.15.212 through 5.15.*; unaffected 6.1.178 through 6.1.*; unaffected 6.6.145 through 6.6.*; unaffected 6.12.97 through 6.12.*; unaffected 6.18.40 through 6.18.*; unaffected 7.1.5 through 7.1.*; unaffected 7.2 through * |
CWE
No CWE identifiers supplied.
References
- https://git.kernel.org/stable/c/c0c7722308c5f303117d8bd555290fdf26b098da
- https://git.kernel.org/stable/c/67aeb1eb93d4ffd898a3e74a7f3fe46ee71feb28
- https://git.kernel.org/stable/c/9a515e00b00132b6fc3f1dd62dc5204bbda8cb10
- https://git.kernel.org/stable/c/5397142d60aa29dcf636f5459d960bfc4f97c42a
- https://git.kernel.org/stable/c/b89477077c834d94381c7bf07d81193bebefcff9
- https://git.kernel.org/stable/c/73711688479df333acc134e3730fff1acba1843e
- https://git.kernel.org/stable/c/b504fd953664c3f4d176ae8cb594adb3fda9d577
- https://git.kernel.org/stable/c/81e3a86030462824a67d697739cf3f387f4ba350