Linux: perf/core: Allow list_del during perf_event_overflow()
What fixes it
- 723e85fb2c3bcd237ac02cbd69502ed62ce0068cLinuxCVE List
- 6d0b9ce3be221c9077653f3670d60d66bb725ee2LinuxCVE List
- 59e63416f5153e7d58652c616fbdcb7d5e01fff7LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
perf/core: Allow list_del during perf_event_overflow()
A PMU might use perf_sched_cb_inc() and perf_sched_cb_dec() interface to get the PMU call back function pmu::sched_task invoked at schedule in and schedule out. This is achieved by walking along the list anchored by sched_cb_list.
The following scenario might lead to a list corruption.
perf_pmu_sched_task() for_each_list_entry(..., &sched_cb_list) +--> __perf_pmu_sched_task() +--> event->pmu->sched_task()) +--> PMU_push_sample() +--> perf_event_overflow() +--> __perf_event_overflow() +--> pmu->stop() +--> perf_sched_cb_dec() remove entry from sched_cb_list while list node in use.
This happens when ioctl(fd, PERF_EVENT_IOC_REFRESH, xxx) has been invoked and perf_event::event_limit hits zero.
Prevent the list corruption and convert for_each_list_entry() to for_each_list_entry_safe().
Text from CVE List
Affected versions 12
- Linuxaffected: bd27568117664b8b3e259721393df420ed51f57b before fa360a018369f3eb4fe4f4792238adfc1f6fd5dcCVE List
- Linuxaffected: bd27568117664b8b3e259721393df420ed51f57b before 723e85fb2c3bcd237ac02cbd69502ed62ce0068cCVE List
- Linuxaffected: bd27568117664b8b3e259721393df420ed51f57b before 6d0b9ce3be221c9077653f3670d60d66bb725ee2CVE List
- Linuxaffected: bd27568117664b8b3e259721393df420ed51f57b before e2770c76a02452fddb52e9e05c7ed6acfef06c32CVE List
- Linuxaffected: bd27568117664b8b3e259721393df420ed51f57b before 59e63416f5153e7d58652c616fbdcb7d5e01fff7CVE List
- Linuxaffected: 6.2CVE List
- Linuxunaffected: all versions before 6.2CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/fa360a018369f3eb4fe4f4792238adfc1f6fd5dcReferencevia CVE List
- git.kernel.org/stable/c/723e85fb2c3bcd237ac02cbd69502ed62ce0068cReferencevia CVE List
- git.kernel.org/stable/c/6d0b9ce3be221c9077653f3670d60d66bb725ee2Referencevia CVE List
- git.kernel.org/stable/c/e2770c76a02452fddb52e9e05c7ed6acfef06c32Referencevia CVE List
- git.kernel.org/stable/c/59e63416f5153e7d58652c616fbdcb7d5e01fff7Referencevia CVE List