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.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
ac7ab38c271ba2edaeb0dc35b200ec13339776ae to < e5c5dad169fb569161d3eed6c3f6a59e65db1830affectede53a8dcd36b9ebc9229450eb594ae20e0b2ae0fd to < b6fb2f5370a9a6aec325ab2db1ca3d1a881499b8affected7ab0fc61ce73040f89b12d76a8279995ec283541 to < 2ffaade3611bd9501bc0b9d5d19fc75bfee7a16baffected7ab0fc61ce73040f89b12d76a8279995ec283541 to < 91c15cdda6033e2439f5975b938754152f3d6e38affected7ab0fc61ce73040f89b12d76a8279995ec283541 to < 0fe23b8eaba0d3372c66b7b31204408da0715edcaffected740dab2338f70d93aa8235db5a9541d846d7b21caffected6.6.94 to < 6.6.160affected6.12.34 to < 6.12.112affected6.15.3 to < 6.16affected
Linux Linux
Default version status: affected
6.16affected0 to < 6.16unaffected6.6.160 to ≤ 6.6.*unaffected6.12.112 to ≤ 6.12.*unaffected6.18.53 to ≤ 6.18.*unaffected7.2.7 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/e5c5dad169fb569161d3eed6c3f6a59e65db1830 ↗
- https://git.kernel.org/stable/c/b6fb2f5370a9a6aec325ab2db1ca3d1a881499b8 ↗
- https://git.kernel.org/stable/c/2ffaade3611bd9501bc0b9d5d19fc75bfee7a16b ↗
- https://git.kernel.org/stable/c/91c15cdda6033e2439f5975b938754152f3d6e38 ↗
- https://git.kernel.org/stable/c/0fe23b8eaba0d3372c66b7b31204408da0715edc ↗