Linux: bpf: Skip unsettled links in link iterator
What fixes it
- 68930f8d40ab4c10ca3b019f076136758fd100a8LinuxCVE List
- 798a61edbc436cacdb659927d067368eeb1e30e2LinuxCVE List
- 6e271f093d15d323f42de26f66556af53fa8e19fLinuxCVE List
- 87ce4b53b7436b50fc984f0a6afaf77f68ac5573LinuxCVE List
- 50e80e2bb5e2be8515205b9c496b9640ddefa434LinuxCVE 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:
bpf: Skip unsettled links in link iterator
bpf_link_prime() inserts a link into link_idr before anon_inode_getfile() succeeds and before bpf_link_settle() publishes the ID in link->id. bpf_link_by_id() treats such an ID-zero link as unsettled, but the link iterator takes a reference without this check.
If anon_inode_getfile() then fails, the creator removes the ID and frees its still-private link directly. The iterator is left with a dangling reference and its next bpf_link_put() accesses freed memory.
Treat ID-zero entries as transient in bpf_link_get_curr_or_next(), just as bpf_link_by_id() does.
BUG: KASAN: slab-use-after-free in bpf_link_put Write of size 8 by task exp/384 Call Trace: bpf_link_put kernel/bpf/syscall.c:3372 bpf_link_seq_next kernel/bpf/link_iter.c:33 bpf_seq_read kernel/bpf/bpf_iter.c:158 vfs_read fs/read_write.c:572 ksys_read fs/read_write.c:716 do_syscall_64 arch/x86/entry/syscall_64.c:84 entry_SYSCALL_64_after_hwframe arch/x86/entry/entry_64.S:121 Kernel panic - not syncing: KASAN: panic_on_warn set ...
Text from CVE List
Affected versions 14
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before 68930f8d40ab4c10ca3b019f076136758fd100a8CVE List
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before c251ed48bd9063cf7de6049421e78b6de989060fCVE List
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before 798a61edbc436cacdb659927d067368eeb1e30e2CVE List
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before 6e271f093d15d323f42de26f66556af53fa8e19fCVE List
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before 87ce4b53b7436b50fc984f0a6afaf77f68ac5573CVE List
- Linuxaffected: 9f88361273082825d9f0d13a543d49f9fa0d44a8 before 50e80e2bb5e2be8515205b9c496b9640ddefa434CVE List
- Linuxaffected: 5.19CVE List
- Linuxunaffected: all versions before 5.19CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.55 through 6.18.*CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 6
- git.kernel.org/stable/c/68930f8d40ab4c10ca3b019f076136758fd100a8Referencevia CVE List
- git.kernel.org/stable/c/c251ed48bd9063cf7de6049421e78b6de989060fReferencevia CVE List
- git.kernel.org/stable/c/798a61edbc436cacdb659927d067368eeb1e30e2Referencevia CVE List
- git.kernel.org/stable/c/6e271f093d15d323f42de26f66556af53fa8e19fReferencevia CVE List
- git.kernel.org/stable/c/87ce4b53b7436b50fc984f0a6afaf77f68ac5573Referencevia CVE List
- git.kernel.org/stable/c/50e80e2bb5e2be8515205b9c496b9640ddefa434Referencevia CVE List