CVE-2025-40143 (GCVE-0-2025-40143)
Vulnerability from cvelistv5
Published
2025-11-12 10:23
Modified
2025-11-12 10:23
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
bpf: dont report verifier bug for missing bpf_scc_visit on speculative path
Syzbot generated a program that triggers a verifier_bug() call in
maybe_exit_scc(). maybe_exit_scc() assumes that, when called for a
state with insn_idx in some SCC, there should be an instance of struct
bpf_scc_visit allocated for that SCC. Turns out the assumption does
not hold for speculative execution paths. See example in the next
patch.
maybe_scc_exit() is called from update_branch_counts() for states that
reach branch count of zero, meaning that path exploration for a
particular path is finished. Path exploration can finish in one of
three ways:
a. Verification error is found. In this case, update_branch_counts()
is called only for non-speculative paths.
b. Top level BPF_EXIT is reached. Such instructions are never a part of
an SCC, so compute_scc_callchain() in maybe_scc_exit() will return
false, and maybe_scc_exit() will return early.
c. A checkpoint is reached and matched. Checkpoints are created by
is_state_visited(), which calls maybe_enter_scc(), which allocates
bpf_scc_visit instances for checkpoints within SCCs.
Hence, for non-speculative symbolic execution paths, the assumption
still holds: if maybe_scc_exit() is called for a state within an SCC,
bpf_scc_visit instance must exist.
This patch removes the verifier_bug() call for speculative paths.
References
Impacted products
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"kernel/bpf/verifier.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "3861e7c4324aa20a632fb74eb3904114f6afdb57",
"status": "affected",
"version": "c9e31900b54cadf5398dfb838c0a63effa1defec",
"versionType": "git"
},
{
"lessThan": "a3c73d629ea1373af3c0c954d41fd1af555492e3",
"status": "affected",
"version": "c9e31900b54cadf5398dfb838c0a63effa1defec",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"kernel/bpf/verifier.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.17"
},
{
"lessThan": "6.17",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.17.*",
"status": "unaffected",
"version": "6.17.3",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "6.18-rc1",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.17.3",
"versionStartIncluding": "6.17",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18-rc1",
"versionStartIncluding": "6.17",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: dont report verifier bug for missing bpf_scc_visit on speculative path\n\nSyzbot generated a program that triggers a verifier_bug() call in\nmaybe_exit_scc(). maybe_exit_scc() assumes that, when called for a\nstate with insn_idx in some SCC, there should be an instance of struct\nbpf_scc_visit allocated for that SCC. Turns out the assumption does\nnot hold for speculative execution paths. See example in the next\npatch.\n\nmaybe_scc_exit() is called from update_branch_counts() for states that\nreach branch count of zero, meaning that path exploration for a\nparticular path is finished. Path exploration can finish in one of\nthree ways:\na. Verification error is found. In this case, update_branch_counts()\n is called only for non-speculative paths.\nb. Top level BPF_EXIT is reached. Such instructions are never a part of\n an SCC, so compute_scc_callchain() in maybe_scc_exit() will return\n false, and maybe_scc_exit() will return early.\nc. A checkpoint is reached and matched. Checkpoints are created by\n is_state_visited(), which calls maybe_enter_scc(), which allocates\n bpf_scc_visit instances for checkpoints within SCCs.\n\nHence, for non-speculative symbolic execution paths, the assumption\nstill holds: if maybe_scc_exit() is called for a state within an SCC,\nbpf_scc_visit instance must exist.\n\nThis patch removes the verifier_bug() call for speculative paths."
}
],
"providerMetadata": {
"dateUpdated": "2025-11-12T10:23:25.489Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/3861e7c4324aa20a632fb74eb3904114f6afdb57"
},
{
"url": "https://git.kernel.org/stable/c/a3c73d629ea1373af3c0c954d41fd1af555492e3"
}
],
"title": "bpf: dont report verifier bug for missing bpf_scc_visit on speculative path",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2025-40143",
"datePublished": "2025-11-12T10:23:25.489Z",
"dateReserved": "2025-04-16T07:20:57.175Z",
"dateUpdated": "2025-11-12T10:23:25.489Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"nvd": "{\"cve\":{\"id\":\"CVE-2025-40143\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-11-12T11:15:44.130\",\"lastModified\":\"2025-11-12T16:19:12.850\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: dont report verifier bug for missing bpf_scc_visit on speculative path\\n\\nSyzbot generated a program that triggers a verifier_bug() call in\\nmaybe_exit_scc(). maybe_exit_scc() assumes that, when called for a\\nstate with insn_idx in some SCC, there should be an instance of struct\\nbpf_scc_visit allocated for that SCC. Turns out the assumption does\\nnot hold for speculative execution paths. See example in the next\\npatch.\\n\\nmaybe_scc_exit() is called from update_branch_counts() for states that\\nreach branch count of zero, meaning that path exploration for a\\nparticular path is finished. Path exploration can finish in one of\\nthree ways:\\na. Verification error is found. In this case, update_branch_counts()\\n is called only for non-speculative paths.\\nb. Top level BPF_EXIT is reached. Such instructions are never a part of\\n an SCC, so compute_scc_callchain() in maybe_scc_exit() will return\\n false, and maybe_scc_exit() will return early.\\nc. A checkpoint is reached and matched. Checkpoints are created by\\n is_state_visited(), which calls maybe_enter_scc(), which allocates\\n bpf_scc_visit instances for checkpoints within SCCs.\\n\\nHence, for non-speculative symbolic execution paths, the assumption\\nstill holds: if maybe_scc_exit() is called for a state within an SCC,\\nbpf_scc_visit instance must exist.\\n\\nThis patch removes the verifier_bug() call for speculative paths.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/3861e7c4324aa20a632fb74eb3904114f6afdb57\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a3c73d629ea1373af3c0c954d41fd1af555492e3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
}
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…
Loading…