Description (CNA)
In the Linux kernel, the following vulnerability has been resolved: perf/x86/intel/uncore: Fix uncore_box ref/unref ordering In uncore_event_cpu_online(), uncore_box_ref() was called before uncore_change_context(). uncore_box_ref() gates on box->cpu >= 0, but box->cpu is still -1 at that point because uncore_change_context() has not run yet. As a result, the box is never initialized on the first CPU to come online in a die, leaving it permanently uninitialized in the single-CPU-per-die case. Thus, box->refcnt is one count below the true value, and in the CPU offline path, the box will be torn down on the second-to-last CPU. In uncore_event_cpu_offline(), uncore_box_unref() was called after uncore_change_context(), so box->cpu is already -1 when the collector CPU goes offline, which prevents it from tearing down the box. Fix by swapping the call order in both paths so that uncore_box_{ref,unref}() runs at the point where box->cpu reflects the correct context. Move allocate_boxes() out of uncore_box_ref() to enable this reordering.
Affected (CNA)
| Vendor / product | Versions |
|---|---|
| Linux / Linux | affected c74443d92f68f07c03ae242ced554b749e6c6736 before 3cfd351602e6704cce9bc766a974afb9f745d44b; affected c74443d92f68f07c03ae242ced554b749e6c6736 before 64aa1bb4017d598828c6d8cd718f43daf2a83375; affected c74443d92f68f07c03ae242ced554b749e6c6736 before 174f0582e38abe03b88e15f04bfe58490f88cb19 |
| Linux / Linux | affected 6.11; unaffected 0 before 6.11; unaffected 6.12.114 through 6.12.*; unaffected 7.2.6 through 7.2.*; unaffected 7.3 through * |
CWE
No CWE identifiers supplied.