{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-74344","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-08-15T05:44:03.886Z","datePublished":"2026-08-15T05:58:33.231Z","dateUpdated":"2026-08-17T05:46:09.476Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-08-17T05:46:09.476Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Clear rb node linkage when freeing bpf_rb_root\n\nbpf_rb_root_free() detaches the root by copying the current rb_root_cached\nand then replacing the live root with RB_ROOT_CACHED. It then walks the\ncopied root and drops each object contained in the tree.\n\nThis leaves the rb node state intact while dropping the object. If the\nobject is refcounted and survives the drop, its bpf_rb_node_kern still\ncontains an owner pointer to the freed root and stale rb tree linkage. If\na later bpf_rb_root allocation reuses the same address, bpf_rbtree_remove()\ncan incorrectly pass the owner check and call rb_erase_cached() on a node\nwhose rb pointers belong to the old tree.\n\nMirror the list draining behavior by marking nodes as busy while the root\nis being detached, then clear the rb node and release the owner before\ndropping the containing object. This makes surviving nodes unowned and\nsafe to reject from remove or accept for a later add."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The bug is reached only through BPF kfuncs (bpf_rbtree_remove) and bpf_rb_root_free during BPF map/object teardown, all gated by the bpf(2) syscall and local BPF program loading; there is no network, adjacent-radio, or physical-device entry path.\nAC:L - An attacker fully controls refcount retention (bpf_refcount_acquire), when bpf_rb_root_free runs (map close/delete or bpf_obj_drop), and subsequent bpf_rb_root reallocation to reuse the freed address; no victim timing or uncontrollable heap layout is required beyond normal BPF allocator reuse.\nPR:L - Exploitation requires loading BPF programs/maps using bpf_rb_root and refcounted graph nodes, which the kernel enforces with CAP_BPF at map BTF setup; on typical hosts this is reachable by an unprivileged user via user namespaces (CAP_BPF inside the namespace), not init-namespace root only.\nUI:N - No action by another user or administrator is required; the attacker loads their own BPF program, populates the rbtree, triggers teardown, and calls bpf_rbtree_remove on stale nodes.\nS:U - Impact is kernel heap corruption and local privilege escalation within the same kernel security boundary; it is not a VM escape, IOMMU bypass, or cross-authority sandbox breakout.\nC:H - Stale bpf_rb_node linkage lets bpf_rbtree_remove pass the owner check and invoke rb_erase_cached on bogus rb_left/rb_right/parent pointers, corrupting adjacent kernel memory in ways that can be turned into arbitrary kernel memory disclosure.\nI:H - rb_erase_cached on nodes whose rb pointers still reference a detached tree rewrites arbitrary kernel rbtree/list metadata and enables heap grooming for control-flow hijack and local root, not merely a bounded or transient modification.\nA:H - Calling rb_erase_cached with inconsistent rb pointers commonly causes kernel BUG/oops/panic or wedged allocator state, giving reliable system crash or hang even before full exploitation."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/helpers.c"],"versions":[{"version":"9c395c1b99bd23f74bc628fa000480c49593d17f","lessThan":"2eb39de4962f842d653e96818ae372665cd481fd","status":"affected","versionType":"git"},{"version":"9c395c1b99bd23f74bc628fa000480c49593d17f","lessThan":"574612793bed416f6c05fe7c9b50e9eb0441997e","status":"affected","versionType":"git"},{"version":"9c395c1b99bd23f74bc628fa000480c49593d17f","lessThan":"4a7910ee060d8ce55612f5b3cc267f3a265a3cec","status":"affected","versionType":"git"},{"version":"1d0675957d35ac5e514073481beda62e4e1e2ec5","status":"affected","versionType":"git"},{"version":"6.2.15","lessThan":"6.3","status":"affected","versionType":"semver"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["kernel/bpf/helpers.c"],"versions":[{"version":"6.3","status":"affected"},{"version":"0","lessThan":"6.3","status":"unaffected","versionType":"semver"},{"version":"6.18.40","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.1.5","lessThanOrEqual":"7.1.*","status":"unaffected","versionType":"semver"},{"version":"7.2","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.3","versionEndExcluding":"6.18.40"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.3","versionEndExcluding":"7.1.5"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.3","versionEndExcluding":"7.2"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.2.15"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/2eb39de4962f842d653e96818ae372665cd481fd"},{"url":"https://git.kernel.org/stable/c/574612793bed416f6c05fe7c9b50e9eb0441997e"},{"url":"https://git.kernel.org/stable/c/4a7910ee060d8ce55612f5b3cc267f3a265a3cec"}],"title":"bpf: Clear rb node linkage when freeing bpf_rb_root","x_generator":{"engine":"bippy-1.2.0"}}}}