FKIE_CVE-2026-98588
Vulnerability from fkie_nvd - Published: 2026-10-18 16:17 - Updated: 2026-10-19 10:19
Severity
Summary
In the Linux kernel, the following vulnerability has been resolved:
bpf, sockmap: Reject max_entries > INT_MAX in sock_map_alloc
sock_map_alloc() only rejects max_entries == 0 and otherwise allows any
u32 value. sock_map_free() then walks the sks[] array with a signed int
iterator:
int i;
for (i = 0; i < stab->map.max_entries; i++)
struct sock **psk = &stab->sks[i];
When a SOCKMAP is created with max_entries = 0xffffffff (UINT_MAX), the
allocation of 32 GiB can succeed on large-memory hosts. During free the
counter reaches 0x80000000, wraps to INT_MIN, is sign-extended by movslq
and turned into a ~16 GiB negative offset from stab->sks, pointing far
below the allocation.
The faulting access is an xchg() write in sock_map_free(). Without
KASAN, the same out-of-bounds write can fault on an unmapped vmalloc page
or corrupt an unrelated allocation if that vmalloc address is populated.
On a KASAN kernel with CONFIG_KASAN_VMALLOC=y, the shadow check for that
address hits an unmapped shadow page and oopses first:
BUG: unable to handle page fault for address: fffff521b59c5a00
RIP: 0010:kasan_check_range+0x107/0x190
Call Trace:
sock_map_free+0x93/0x190
map_create+0x68d/0xb30
__sys_bpf+0x21e/0x2e70
Vmcore confirmed stab->map.max_entries == 0xffffffff, stab->sks ==
0xffffc911ace2d000, and the faulting address sks + (s64)INT_MIN * 8
exactly at 0xffffc90dace2d000. The same buggy path is reached on the
normal close()/bpf_map_free_deferred() path whenever such a map is
destroyed.
sock_map_alloc() used to bound its allocation size through
bpf_map_charge_init(), but the bound was dropped when rlimit-based memory
accounting was removed. Reject max_entries > INT_MAX at creation time so
the signed iterator in sock_map_free() never sees a value that would
overflow.
Triggered by syzkaller and reproduced on both a 6.6-based KASAN kernel
and the upstream v7.3-rc2 kernel.
References
Impacted products
| Vendor | Product | Version |
|---|
{
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/core/sock_map.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "f4a73f49e256bd835368504462be3b57b03febff",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "c56191af3a578b9cc265fa3bd5fc0752c59c1781",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "909f761868fda329dc69130ef9eb5b5795bcdf00",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "cc70972ddbf0e3398f2f32624d31db78594d50d8",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "cea597519b9ca6d691c98d92460ead8ece2a07af",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "ba7d627dbc67d62df2fa66d7b41e743c3ace0ec8",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
},
{
"lessThan": "814a81c842bd88f6bd8a4ce550d560df071a5d03",
"status": "affected",
"version": "0d2c4f9640501ff57ba0be1f5644a02c29a02fa1",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/core/sock_map.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.11"
},
{
"lessThan": "5.11",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"version": "5.15.222",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"version": "6.1.189",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.158",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.112",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.55",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.9",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf, sockmap: Reject max_entries \u003e INT_MAX in sock_map_alloc\n\nsock_map_alloc() only rejects max_entries == 0 and otherwise allows any\nu32 value. sock_map_free() then walks the sks[] array with a signed int\niterator:\n\n\tint i;\n\tfor (i = 0; i \u003c stab-\u003emap.max_entries; i++)\n\t\tstruct sock **psk = \u0026stab-\u003esks[i];\n\nWhen a SOCKMAP is created with max_entries = 0xffffffff (UINT_MAX), the\nallocation of 32 GiB can succeed on large-memory hosts. During free the\ncounter reaches 0x80000000, wraps to INT_MIN, is sign-extended by movslq\nand turned into a ~16 GiB negative offset from stab-\u003esks, pointing far\nbelow the allocation.\n\nThe faulting access is an xchg() write in sock_map_free(). Without\nKASAN, the same out-of-bounds write can fault on an unmapped vmalloc page\nor corrupt an unrelated allocation if that vmalloc address is populated.\nOn a KASAN kernel with CONFIG_KASAN_VMALLOC=y, the shadow check for that\naddress hits an unmapped shadow page and oopses first:\n\n BUG: unable to handle page fault for address: fffff521b59c5a00\n RIP: 0010:kasan_check_range+0x107/0x190\n Call Trace:\n sock_map_free+0x93/0x190\n map_create+0x68d/0xb30\n __sys_bpf+0x21e/0x2e70\n\nVmcore confirmed stab-\u003emap.max_entries == 0xffffffff, stab-\u003esks ==\n0xffffc911ace2d000, and the faulting address sks + (s64)INT_MIN * 8\nexactly at 0xffffc90dace2d000. The same buggy path is reached on the\nnormal close()/bpf_map_free_deferred() path whenever such a map is\ndestroyed.\n\nsock_map_alloc() used to bound its allocation size through\nbpf_map_charge_init(), but the bound was dropped when rlimit-based memory\naccounting was removed. Reject max_entries \u003e INT_MAX at creation time so\nthe signed iterator in sock_map_free() never sees a value that would\noverflow.\n\nTriggered by syzkaller and reproduced on both a 6.6-based KASAN kernel\nand the upstream v7.3-rc2 kernel."
}
],
"id": "CVE-2026-98588",
"lastModified": "2026-10-19T10:19:19.777",
"metrics": {},
"published": "2026-10-18T16:17:11.393",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/814a81c842bd88f6bd8a4ce550d560df071a5d03"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/909f761868fda329dc69130ef9eb5b5795bcdf00"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/ba7d627dbc67d62df2fa66d7b41e743c3ace0ec8"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/c56191af3a578b9cc265fa3bd5fc0752c59c1781"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/cc70972ddbf0e3398f2f32624d31db78594d50d8"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/cea597519b9ca6d691c98d92460ead8ece2a07af"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f4a73f49e256bd835368504462be3b57b03febff"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
Loading…
Loading…
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
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.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
Loading timeline…
Loading…
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.