Linux: tracing: Take the reference before publishing the named histogram trigger
What fixes it
- 2ffaade3611bd9501bc0b9d5d19fc75bfee7a16bLinuxCVE List
- 91c15cdda6033e2439f5975b938754152f3d6e38LinuxCVE List
- 0fe23b8eaba0d3372c66b7b31204408da0715edcLinuxCVE List
- 6.6.160LinuxCVE List
- 6.12.112LinuxCVE List
- 6.16LinuxCVE 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:
tracing: Take the reference before publishing the named histogram trigger
event_hist_trigger_named_init() puts the trigger on the global named_triggers list and only then takes the reference on the trigger it shares its histogram with:
data->ref++;
save_named_trigger(data->named_data->name, data);
ret = event_hist_trigger_init(data->named_data); if (ret < 0) { kfree(data->cmd_ops); data->cmd_ops = &trigger_hist_cmd; }
return ret;
event_hist_trigger_init() fails when alloc_hist_pad() cannot allocate, and nothing takes the trigger back off the list on the way out. event_hist_trigger_parse() frees it, and the next lookup by name reads the freed object:
BUG: KASAN: slab-use-after-free in find_named_trigger+0xac/0xc0 Read of size 8 at addr ffff888009346860 by task init/1 find_named_trigger+0xac/0xc0 hist_register_trigger+0xc1/0xa00 event_hist_trigger_parse+0x3146/0x6af0 event_trigger_write+0xce/0x160 Freed by task 67: kfree+0x154/0x420 trigger_kthread_fn+0xfd/0x160
Do the reference first and publish once it has succeeded, so that nothing which can fail runs after the trigger becomes findable.
Text from CVE List
Affected versions 16
- Linuxaffected: ac7ab38c271ba2edaeb0dc35b200ec13339776ae before e5c5dad169fb569161d3eed6c3f6a59e65db1830CVE List
- Linuxaffected: e53a8dcd36b9ebc9229450eb594ae20e0b2ae0fd before b6fb2f5370a9a6aec325ab2db1ca3d1a881499b8CVE List
- Linuxaffected: 7ab0fc61ce73040f89b12d76a8279995ec283541 before 2ffaade3611bd9501bc0b9d5d19fc75bfee7a16bCVE List
- Linuxaffected: 7ab0fc61ce73040f89b12d76a8279995ec283541 before 91c15cdda6033e2439f5975b938754152f3d6e38CVE List
- Linuxaffected: 7ab0fc61ce73040f89b12d76a8279995ec283541 before 0fe23b8eaba0d3372c66b7b31204408da0715edcCVE List
- Linuxaffected: 740dab2338f70d93aa8235db5a9541d846d7b21cCVE List
- Linuxaffected: 6.6.94 before 6.6.160CVE List
- Linuxaffected: 6.12.34 before 6.12.112CVE List
- Linuxaffected: 6.15.3 before 6.16CVE List
- Linuxaffected: 6.16CVE List
- Linuxunaffected: all versions before 6.16CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 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/e5c5dad169fb569161d3eed6c3f6a59e65db1830Referencevia CVE List
- git.kernel.org/stable/c/b6fb2f5370a9a6aec325ab2db1ca3d1a881499b8Referencevia CVE List
- git.kernel.org/stable/c/2ffaade3611bd9501bc0b9d5d19fc75bfee7a16bReferencevia CVE List
- git.kernel.org/stable/c/91c15cdda6033e2439f5975b938754152f3d6e38Referencevia CVE List
- git.kernel.org/stable/c/0fe23b8eaba0d3372c66b7b31204408da0715edcReferencevia CVE List