Description
In the Linux kernel, the following vulnerability has been resolved: bpf, cgroup: Fix invalid storage access after __cgroup_bpf_attach failed A potential invalid storage access issue can occur after replacing a cgroup bpf prog. This occurs in the following scenario: 1. prog1 with storage is attached to a cgroup in multi-attach mode. 2. prog1 is replaced with prog2 using BPF_F_REPLACE in multi-attach mode, but fails midway (e.g. in bpf_trampoline_link_cgroup_shim or update_effective_progs). 3. A new prog3 is attached to the cgroup in multi-attach mode. The reason is that __cgroup_bpf_attach overwrites pl->storage with the new storage prior to attachment completion. When attachment fails midway, the cleanup path calls bpf_cgroup_storages_free(new_storage) to free the newly allocated storage, but fails to restore pl->storage back to old_storage. Consequently, the still-active prog1 holds invalid or dangling storage pointers, leading to an invalid memory access when prog1 executes and calls bpf_get_local_storage. Additionally, original pl->flags and cgrp->bpf.flags[atype] are left unrestored. Fix this by saving old_pl_flags, old_storage, and old_flags prior to the update, and properly restoring all of them in the cleanup path on error.
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
7d9c3427894fe70d1347b4820476bf37736d2ff0 to < 217b257d2c39e8dc32d691e8952f3cd921a80233affected7d9c3427894fe70d1347b4820476bf37736d2ff0 to < e26db0d636e4c24a6b16683ea95cf5077c64d74baffected7d9c3427894fe70d1347b4820476bf37736d2ff0 to < aaca16e042527f7efe48b50799bc662f1a191ce1affected7d9c3427894fe70d1347b4820476bf37736d2ff0 to < 86ead176301109b78e1d14c0e9d0d9ff9723c769affected7d9c3427894fe70d1347b4820476bf37736d2ff0 to < 2c2218560b6e28a63ff7834ba26d09ff8efdee39affected7d9c3427894fe70d1347b4820476bf37736d2ff0 to < 6655c409707ec8ce9ce0850ffe4fe02331fd4d9caffected
Linux Linux
Default version status: affected
5.9affected0 to < 5.9unaffected6.1.191 to ≤ 6.1.*unaffected6.6.157 to ≤ 6.6.*unaffected6.12.110 to ≤ 6.12.*unaffected6.18.52 to ≤ 6.18.*unaffected7.2.6 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/217b257d2c39e8dc32d691e8952f3cd921a80233 ↗
- https://git.kernel.org/stable/c/e26db0d636e4c24a6b16683ea95cf5077c64d74b ↗
- https://git.kernel.org/stable/c/aaca16e042527f7efe48b50799bc662f1a191ce1 ↗
- https://git.kernel.org/stable/c/86ead176301109b78e1d14c0e9d0d9ff9723c769 ↗
- https://git.kernel.org/stable/c/2c2218560b6e28a63ff7834ba26d09ff8efdee39 ↗
- https://git.kernel.org/stable/c/6655c409707ec8ce9ce0850ffe4fe02331fd4d9c ↗