{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2026-93045",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2026-09-17T15:57:05.658Z",
        "datePublished": "2026-09-17T16:10:36.988Z",
        "dateUpdated": "2026-10-19T09:04:40.316Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-10-19T09:04:40.316Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Reject arena frees below the arena base\n\nbpf_arena_free_pages() accepts scalar arena addresses. The runtime\nmasks the address to the low 32 bits and reconstructs a full user\naddress from the arena base before returning the range to the arena\nfree tree.\n\nWhen the scalar value is below the low 32 bits of the arena base,\nfull_uaddr falls below user_vm_start. The existing upper-end clipping\nthen turns this into an out-of-range free-tree offset. A later\nallocation can reuse that offset and return an address below the arena\nmapping.\n\nReject such frees before computing the clipped range."
                }
            ],
            "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 attacker-controlled input is the scalar ptr passed to bpf_arena_free_pages() from a locally loaded BPF program after bpf(BPF_MAP_CREATE) of BPF_MAP_TYPE_ARENA, mmap() of that map, bpf(BPF_PROG_LOAD), and bpf(BPF_PROG_TEST_RUN) (e.g. BPF_PROG_TYPE_SYSCALL). The below-base address is not carried in a network protocol message.\nAC:L - The attacker chooses the scalar whose low 32 bits are below (u32)arena->user_vm_start and the page_cnt passed to bpf_arena_free_pages(); compute_pgoff() then underflows and range_tree_set() records that offset deterministically. No race, victim state, or rare non-default config is required on JITs that implement bpf_jit_supports_arena() (x86_64/arm64).\nPR:L - map_create() requires bpf_token_capable(CAP_BPF) for BPF_MAP_TYPE_ARENA, and check_map_prog_compatibility() additionally requires CAP_PERFMON (env->allow_ptr_leaks) before a program may reference the arena. Those caps are delegable through BPF tokens into a user namespace rather than requiring init-namespace root.\nUI:N - The attacker creates their own arena map, mmap()s it so user_vm_start is set, loads their own program that calls bpf_arena_free_pages() with a below-base scalar, and runs it via BPF_PROG_TEST_RUN. No separate victim mount, open, or other interaction is required.\nS:U - arena_free_pages() corrupts the arena range_tree and kernel PTEs of the same host kernel that loaded the program. This is in-kernel memory unsafety, not a KVM/Xen guest-to-host escape or IOMMU/DMA boundary cross.\nC:H - With a below-base scalar and a large page_cnt, arena_free_pages() clips uaddr_end to user_vm_end so apply_to_existing_page_range() walks from kern_vm_start+uaddr32 across in-use arena PTEs and __free_page()s those pages while compute_pgoff() records a wrapped offset, leaving a page UAF that can disclose kernel memory.\nI:H - The same clipped free desynchronizes PTEs from the range_tree, and zap_pages() calls zap_vma_range() with full_uaddr below vma->vm_start, clearing mm PTEs outside the arena VMA. A later bpf_arena_alloc_pages() reuses the out-of-range offset via range_tree_find(), giving an exploitable page-reuse write primitive.\nA:H - Accessing a below-base pointer with a negative LDX/STX off faults below kern_vm_start, where bpf_arena_handle_page_fault() refuses recovery and oopses; zap_vma_range() also VM_WARN_ON_ONCE()s for a range outside the arena VMA, and the UAF of freed arena pages can panic the kernel."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "kernel/bpf/arena.c"
                    ],
                    "versions": [
                        {
                            "version": "317460317a02a1af512697e6e964298dedd8a163",
                            "lessThan": "90453eaf8f14e7be0ab03983f2a93aeb6b990a58",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "317460317a02a1af512697e6e964298dedd8a163",
                            "lessThan": "a968dffa5ab3c74d2ebb3a6233bf8b843f0bfc20",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "317460317a02a1af512697e6e964298dedd8a163",
                            "lessThan": "8a08635656037aee9c12231ed384449c4ffb1a93",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "317460317a02a1af512697e6e964298dedd8a163",
                            "lessThan": "b5a71cb2db6d84ac0042549dcec266b18429d41e",
                            "status": "affected",
                            "versionType": "git"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "kernel/bpf/arena.c"
                    ],
                    "versions": [
                        {
                            "version": "6.9",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "6.9",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.12.110",
                            "lessThanOrEqual": "6.12.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.18.52",
                            "lessThanOrEqual": "6.18.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.2.6",
                            "lessThanOrEqual": "7.2.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "7.3",
                            "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.9",
                                    "versionEndExcluding": "6.12.110"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.9",
                                    "versionEndExcluding": "6.18.52"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.9",
                                    "versionEndExcluding": "7.2.6"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.9",
                                    "versionEndExcluding": "7.3"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/90453eaf8f14e7be0ab03983f2a93aeb6b990a58"
                },
                {
                    "url": "https://git.kernel.org/stable/c/a968dffa5ab3c74d2ebb3a6233bf8b843f0bfc20"
                },
                {
                    "url": "https://git.kernel.org/stable/c/8a08635656037aee9c12231ed384449c4ffb1a93"
                },
                {
                    "url": "https://git.kernel.org/stable/c/b5a71cb2db6d84ac0042549dcec266b18429d41e"
                }
            ],
            "title": "bpf: Reject arena frees below the arena base",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        }
    }
}