CVE-2026-98870 (GCVE-0-2026-98870)
Vulnerability from cvelistv5 – Published: 2026-10-23 11:37 – Updated: 2026-10-23 11:37
VLAI
EPSS
VEX
Title
ksmbd: remove stale channels from all sessions on teardown
Summary
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: remove stale channels from all sessions on teardown
ksmbd_sessions_deregister() removes a connection's channels from other
sessions' channel lists only while conn->binding is still set:
if (conn->binding) {
hash_for_each_safe(sessions_table, ...)
ksmbd_chann_del(conn, sess);
}
conn->binding is a transient flag: it is cleared once a binding
SESSION_SETUP completes, and also by a subsequent non-binding
SESSION_SETUP on the same connection (a reauthentication on a bound
channel, or a new SessionId==0 setup). A connection that has bound a
channel into another session's ksmbd_chann_list and then clears
conn->binding leaves that channel behind when it disconnects: the
channel, whose chann->conn points at the now freed struct ksmbd_conn,
stays on the owner session's list.
When the owning connection later tears down, the second loop
dereferences the stale channel:
xa_for_each(&sess->ksmbd_chann_list, chann_id, chann)
if (chann->conn != conn)
ksmbd_conn_set_exiting(chann->conn); /* freed */
which is a use-after-free write into the freed ksmbd_conn (the same
stale channel is also walked by show_proc_session() through /proc). The
session is leaked as well, because its channel list never empties.
Remove the conn->binding gate so a connection always removes its
channels from every session on teardown.
Severity
No CVSS data available.
Assigner
References
Impacted products
2 products
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
b1b6ed903a6e2b3505a48706bcd499b447ef9e44 , < f8200bb4994e65a2e5c5b314789eeae39078619d
(git)
Affected: 47b018dba6ec7ebf403fd2d1e713bc7acc9bbb23 , < 9cd6d714d3ca0cff296542dc989696884e41970f (git) Affected: 9ef4dfd5edbd02f4bf10cd420a30896093d98a67 , < b145f9b56c87f9c23ad5464ab0844dbc1de12b36 (git) Affected: 5a5b0b7a01fe19b383b3c046546b5ae30c1a7d71 , < a15cae16f4432a5ad919ee633e31b07178492955 (git) Affected: faf8578c77f3d846aca9cd882c293e03eafcc6df , < b10665730fbf6b5e45fe422badcbbc3f0df96ef5 (git) Affected: e632f21a8bc0c59abc4960482836ac3782db93c0 (git) Affected: 5.15.222 , < 5.16 (semver) |
guessed | |
| Linux | Linux | guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "f8200bb4994e65a2e5c5b314789eeae39078619d",
"status": "affected",
"version": "b1b6ed903a6e2b3505a48706bcd499b447ef9e44",
"versionType": "git"
},
{
"lessThan": "9cd6d714d3ca0cff296542dc989696884e41970f",
"status": "affected",
"version": "47b018dba6ec7ebf403fd2d1e713bc7acc9bbb23",
"versionType": "git"
},
{
"lessThan": "b145f9b56c87f9c23ad5464ab0844dbc1de12b36",
"status": "affected",
"version": "9ef4dfd5edbd02f4bf10cd420a30896093d98a67",
"versionType": "git"
},
{
"lessThan": "a15cae16f4432a5ad919ee633e31b07178492955",
"status": "affected",
"version": "5a5b0b7a01fe19b383b3c046546b5ae30c1a7d71",
"versionType": "git"
},
{
"lessThan": "b10665730fbf6b5e45fe422badcbbc3f0df96ef5",
"status": "affected",
"version": "faf8578c77f3d846aca9cd882c293e03eafcc6df",
"versionType": "git"
},
{
"status": "affected",
"version": "e632f21a8bc0c59abc4960482836ac3782db93c0",
"versionType": "git"
},
{
"lessThan": "5.16",
"status": "affected",
"version": "5.15.222",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux"
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.15.222",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nksmbd: remove stale channels from all sessions on teardown\n\nksmbd_sessions_deregister() removes a connection\u0027s channels from other\nsessions\u0027 channel lists only while conn-\u003ebinding is still set:\n\n\tif (conn-\u003ebinding) {\n\t\thash_for_each_safe(sessions_table, ...)\n\t\t\tksmbd_chann_del(conn, sess);\n\t}\n\nconn-\u003ebinding is a transient flag: it is cleared once a binding\nSESSION_SETUP completes, and also by a subsequent non-binding\nSESSION_SETUP on the same connection (a reauthentication on a bound\nchannel, or a new SessionId==0 setup). A connection that has bound a\nchannel into another session\u0027s ksmbd_chann_list and then clears\nconn-\u003ebinding leaves that channel behind when it disconnects: the\nchannel, whose chann-\u003econn points at the now freed struct ksmbd_conn,\nstays on the owner session\u0027s list.\n\nWhen the owning connection later tears down, the second loop\ndereferences the stale channel:\n\n\txa_for_each(\u0026sess-\u003eksmbd_chann_list, chann_id, chann)\n\t\tif (chann-\u003econn != conn)\n\t\t\tksmbd_conn_set_exiting(chann-\u003econn); /* freed */\n\nwhich is a use-after-free write into the freed ksmbd_conn (the same\nstale channel is also walked by show_proc_session() through /proc). The\nsession is leaked as well, because its channel list never empties.\n\nRemove the conn-\u003ebinding gate so a connection always removes its\nchannels from every session on teardown."
}
],
"providerMetadata": {
"dateUpdated": "2026-10-23T11:37:07.113Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/f8200bb4994e65a2e5c5b314789eeae39078619d"
},
{
"url": "https://git.kernel.org/stable/c/9cd6d714d3ca0cff296542dc989696884e41970f"
},
{
"url": "https://git.kernel.org/stable/c/b145f9b56c87f9c23ad5464ab0844dbc1de12b36"
},
{
"url": "https://git.kernel.org/stable/c/a15cae16f4432a5ad919ee633e31b07178492955"
},
{
"url": "https://git.kernel.org/stable/c/b10665730fbf6b5e45fe422badcbbc3f0df96ef5"
}
],
"title": "ksmbd: remove stale channels from all sessions on teardown",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-98870",
"datePublished": "2026-10-23T11:37:07.113Z",
"dateReserved": "2026-09-25T10:25:14.377Z",
"dateUpdated": "2026-10-23T11:37:07.113Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "f8200bb4994e65a2e5c5b314789eeae39078619d",
"status": "affected",
"version": "b1b6ed903a6e2b3505a48706bcd499b447ef9e44",
"versionType": "git"
},
{
"lessThan": "9cd6d714d3ca0cff296542dc989696884e41970f",
"status": "affected",
"version": "47b018dba6ec7ebf403fd2d1e713bc7acc9bbb23",
"versionType": "git"
},
{
"lessThan": "b145f9b56c87f9c23ad5464ab0844dbc1de12b36",
"status": "affected",
"version": "9ef4dfd5edbd02f4bf10cd420a30896093d98a67",
"versionType": "git"
},
{
"lessThan": "a15cae16f4432a5ad919ee633e31b07178492955",
"status": "affected",
"version": "5a5b0b7a01fe19b383b3c046546b5ae30c1a7d71",
"versionType": "git"
},
{
"lessThan": "b10665730fbf6b5e45fe422badcbbc3f0df96ef5",
"status": "affected",
"version": "faf8578c77f3d846aca9cd882c293e03eafcc6df",
"versionType": "git"
},
{
"status": "affected",
"version": "e632f21a8bc0c59abc4960482836ac3782db93c0",
"versionType": "git"
},
{
"lessThan": "5.16",
"status": "affected",
"version": "5.15.222",
"versionType": "semver"
}
]
},
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"fs/smb/server/mgmt/user_session.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux"
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nksmbd: remove stale channels from all sessions on teardown\n\nksmbd_sessions_deregister() removes a connection\u0027s channels from other\nsessions\u0027 channel lists only while conn-\u003ebinding is still set:\n\n\tif (conn-\u003ebinding) {\n\t\thash_for_each_safe(sessions_table, ...)\n\t\t\tksmbd_chann_del(conn, sess);\n\t}\n\nconn-\u003ebinding is a transient flag: it is cleared once a binding\nSESSION_SETUP completes, and also by a subsequent non-binding\nSESSION_SETUP on the same connection (a reauthentication on a bound\nchannel, or a new SessionId==0 setup). A connection that has bound a\nchannel into another session\u0027s ksmbd_chann_list and then clears\nconn-\u003ebinding leaves that channel behind when it disconnects: the\nchannel, whose chann-\u003econn points at the now freed struct ksmbd_conn,\nstays on the owner session\u0027s list.\n\nWhen the owning connection later tears down, the second loop\ndereferences the stale channel:\n\n\txa_for_each(\u0026sess-\u003eksmbd_chann_list, chann_id, chann)\n\t\tif (chann-\u003econn != conn)\n\t\t\tksmbd_conn_set_exiting(chann-\u003econn); /* freed */\n\nwhich is a use-after-free write into the freed ksmbd_conn (the same\nstale channel is also walked by show_proc_session() through /proc). The\nsession is leaked as well, because its channel list never empties.\n\nRemove the conn-\u003ebinding gate so a connection always removes its\nchannels from every session on teardown."
}
],
"id": "CVE-2026-98870",
"lastModified": "2026-10-23T12:18:20.397",
"metrics": {},
"published": "2026-10-23T12:18:20.397",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/9cd6d714d3ca0cff296542dc989696884e41970f"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/a15cae16f4432a5ad919ee633e31b07178492955"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/b10665730fbf6b5e45fe422badcbbc3f0df96ef5"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/b145f9b56c87f9c23ad5464ab0844dbc1de12b36"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/f8200bb4994e65a2e5c5b314789eeae39078619d"
}
],
"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.