CVE-2026-90046 (GCVE-0-2026-90046)
Vulnerability from cvelistv5 – Published: 2026-09-16 10:33 – Updated: 2026-09-16 14:42
VLAI
EPSS
VEX
Title
mm/page_alloc: don't spin_trylock() in NMI on UP
Summary
In the Linux kernel, the following vulnerability has been resolved:
mm/page_alloc: don't spin_trylock() in NMI on UP
Patch series "mm/page_alloc: fixes for free_pages_nolock() on RT/UP".
Pre-existing bugs found by Sashiko during review of this other series:
https://lore.kernel.org/all/20260703-alloc-trylock-v5-0-c87b714e19d3@google.com/
I have not reproduced these bugs, and I suspect there is no real-world
user that is affected by them.
This patch (of 2):
As noted in can_spin_trylock(), using this is unsafe in this context.
commit 620b46ed6ae17 ("mm/page_alloc: return NULL early from
alloc_frozen_pages_nolock() in NMI on UP") fixed this on the alloc side
but missed the free side.
Impact: If BPF programs using these features in NMI (probably tracing) are
present on non-SMP builds this might crash the kernel and is probably
exploitable by local attackers for privilege escalation.
Severity
7.8 (High)
Assigner
References
Impacted products
2 products
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
8c57b687e8331eb80e302a2c528b18b966a9ac7a , < 06c76d3c389ff504052f64b1acee44651bd847fa
(git)
Affected: 8c57b687e8331eb80e302a2c528b18b966a9ac7a , < 68a069b407303e71db371df85036101e8ff59280 (git) Affected: 8c57b687e8331eb80e302a2c528b18b966a9ac7a , < 3105ae628fb785d48b49256468be4f21a7b3cfc0 (git) |
guessed | |
| Linux | Linux |
Affected:
6.15
Unaffected: 0 , < 6.15 (semver) Unaffected: 6.18.51 , ≤ 6.18.* (semver) Unaffected: 7.2.5 , ≤ 7.2.* (semver) Unaffected: 7.3-rc1 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"mm/page_alloc.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "06c76d3c389ff504052f64b1acee44651bd847fa",
"status": "affected",
"version": "8c57b687e8331eb80e302a2c528b18b966a9ac7a",
"versionType": "git"
},
{
"lessThan": "68a069b407303e71db371df85036101e8ff59280",
"status": "affected",
"version": "8c57b687e8331eb80e302a2c528b18b966a9ac7a",
"versionType": "git"
},
{
"lessThan": "3105ae628fb785d48b49256468be4f21a7b3cfc0",
"status": "affected",
"version": "8c57b687e8331eb80e302a2c528b18b966a9ac7a",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"mm/page_alloc.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.15"
},
{
"lessThan": "6.15",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.51",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.5",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3-rc1",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.51",
"versionStartIncluding": "6.15",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.5",
"versionStartIncluding": "6.15",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3-rc1",
"versionStartIncluding": "6.15",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmm/page_alloc: don\u0027t spin_trylock() in NMI on UP\n\nPatch series \"mm/page_alloc: fixes for free_pages_nolock() on RT/UP\".\n\nPre-existing bugs found by Sashiko during review of this other series:\nhttps://lore.kernel.org/all/20260703-alloc-trylock-v5-0-c87b714e19d3@google.com/\n\nI have not reproduced these bugs, and I suspect there is no real-world\nuser that is affected by them.\n\n\nThis patch (of 2):\n\nAs noted in can_spin_trylock(), using this is unsafe in this context. \ncommit 620b46ed6ae17 (\"mm/page_alloc: return NULL early from\nalloc_frozen_pages_nolock() in NMI on UP\") fixed this on the alloc side\nbut missed the free side.\n\nImpact: If BPF programs using these features in NMI (probably tracing) are\npresent on non-SMP builds this might crash the kernel and is probably\nexploitable by local attackers for privilege escalation."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - free_pages_nolock is reached from local BPF programs (arena/bpf_map_alloc_pages and related nolock helpers) running in NMI, typically a BPF_PROG_TYPE_PERF_EVENT overflow handler installed via bpf()/perf_event_open. It is not reachable from unauthenticated network packets or in-kernel servers such as ksmbd/nfsd.\nAC:L - Scoring assumes a uniprocessor (!CONFIG_SMP) kernel, a reasonable embedded/IoT deployment. An attacker who can attach a BPF perf-event program controls the NMI that calls free_pages_nolock and can concurrently run page-allocator work so the NMI interrupts zone-\u003elock; the in-tree slub_kunit NMI overflow test shows this reentry is reliably triggerable.\nPR:L - Loading the NMI BPF program requires CAP_BPF and CAP_PERFMON, which are sub-root capabilities. BPF tokens can delegate those checks into a non-init user namespace in plausible container/tracing deployments, so this is treated as low privileges rather than init-namespace root.\nUI:N - The attacker loads the BPF program, programs the PMU, and drives local memory activity themselves. No separate victim action such as mounting a filesystem or opening a crafted file is required.\nS:U - Re-entrant buddy/zone-lock corruption stays inside the kernel\u0027s own security authority and yields local privilege escalation, not a VM, IOMMU, or other cross-boundary escape.\nC:H - Nested spin_trylock of zone-\u003elock on UP lets the NMI mutate buddy freelists while the interrupted context is mid-update, corrupting page-allocator metadata. That overlapping-page primitive can be leveraged for arbitrary kernel memory disclosure.\nI:H - The same freelist corruption is a well-known arbitrary-write and control-flow hijack primitive, and the fix commit states the bug is probably exploitable by local attackers for privilege escalation.\nA:H - Re-entrant zone-lock and buddy updates crash the kernel via oops, panic, or a DEBUG_SPINLOCK BUG on UP, which is a full availability loss."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-16T14:42:01.386Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/06c76d3c389ff504052f64b1acee44651bd847fa"
},
{
"url": "https://git.kernel.org/stable/c/68a069b407303e71db371df85036101e8ff59280"
},
{
"url": "https://git.kernel.org/stable/c/3105ae628fb785d48b49256468be4f21a7b3cfc0"
}
],
"title": "mm/page_alloc: don\u0027t spin_trylock() in NMI on UP",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-90046",
"datePublished": "2026-09-16T10:33:43.156Z",
"dateReserved": "2026-09-11T19:38:34.783Z",
"dateUpdated": "2026-09-16T14:42:01.386Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"nvd": "{\"cve\":{\"id\":\"CVE-2026-90046\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-16T11:17:17.867\",\"lastModified\":\"2026-09-16T15:18:27.317\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nmm/page_alloc: don\u0027t spin_trylock() in NMI on UP\\n\\nPatch series \\\"mm/page_alloc: fixes for free_pages_nolock() on RT/UP\\\".\\n\\nPre-existing bugs found by Sashiko during review of this other series:\\nhttps://lore.kernel.org/all/20260703-alloc-trylock-v5-0-c87b714e19d3@google.com/\\n\\nI have not reproduced these bugs, and I suspect there is no real-world\\nuser that is affected by them.\\n\\n\\nThis patch (of 2):\\n\\nAs noted in can_spin_trylock(), using this is unsafe in this context. \\ncommit 620b46ed6ae17 (\\\"mm/page_alloc: return NULL early from\\nalloc_frozen_pages_nolock() in NMI on UP\\\") fixed this on the alloc side\\nbut missed the free side.\\n\\nImpact: If BPF programs using these features in NMI (probably tracing) are\\npresent on non-SMP builds this might crash the kernel and is probably\\nexploitable by local attackers for privilege escalation.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"mm/page_alloc.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"8c57b687e8331eb80e302a2c528b18b966a9ac7a\",\"lessThan\":\"06c76d3c389ff504052f64b1acee44651bd847fa\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"8c57b687e8331eb80e302a2c528b18b966a9ac7a\",\"lessThan\":\"68a069b407303e71db371df85036101e8ff59280\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"8c57b687e8331eb80e302a2c528b18b966a9ac7a\",\"lessThan\":\"3105ae628fb785d48b49256468be4f21a7b3cfc0\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"mm/page_alloc.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.15\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.15\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.51\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.5\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"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\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/06c76d3c389ff504052f64b1acee44651bd847fa\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/3105ae628fb785d48b49256468be4f21a7b3cfc0\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/68a069b407303e71db371df85036101e8ff59280\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
}
}
Loading…
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Loading…
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.
Loading…