CVE-2026-98968 (GCVE-0-2026-98968)
Vulnerability from cvelistv5 – Published: 2026-10-23 12:19 – Updated: 2026-10-23 12:19
VLAI
EPSS
VEX
Title
amt: send the relay's General Query directly from the receive path
Summary
In the Linux kernel, the following vulnerability has been resolved:
amt: send the relay's General Query directly from the receive path
An skb queued in a qdisc can outlive the tunnel it references
through a raw pointer in skb->cb. For example, with igmp_qrv set
to 1 on the relay a tunnel lives for 135s, so a netem delay of
180s on the amt device outlives it; when the tunnel expires and is
freed, the subsequent dequeue triggers a use-after-free in
amt_dev_xmit().
BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20
Call Trace:
amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]
dev_hard_start_xmit+0x22f/0x620
sch_direct_xmit+0x12e/0xac0
netem_dequeue+0x333/0xc50
net_tx_action+0x35c/0xa60
amt_send_igmp_gq() and amt_send_mld_gq() are only called from
amt_request_handler(), inside the rcu_read_lock_bh() section of
amt_rcv(). amt_request_handler() already has the tunnel the query is
for: it found or created it inside that section. Queuing the query with
dev_queue_xmit() only leads back into amt_dev_xmit(), which strips the
Ethernet header and calls amt_send_membership_query() for that tunnel.
Make that call directly from the two senders instead, the same way
amt_send_advertisement() transmits from the receive path. The query
never waits in a qdisc, the tunnel is only dereferenced inside the
RCU section that found or created it, and nothing is stored in
skb->cb, so no lookup or refcount is needed. Remove the query branch
of amt_dev_xmit(), amt_skb_cb() and struct amt_skb_cb, which have no
users left.
Behaviour changes:
- The relay's own General Queries no longer pass through the amt
device's egress path: its qdisc, tc egress (clsact/tcx), the
netfilter egress hook and packet taps. They are still visible as
UDP on the underlay.
- A query that is sent successfully is no longer counted as
tx_dropped. The old query branch left through the unlock label,
which counted every sent query as dropped.
- A query that reaches amt_dev_xmit() on a relay from elsewhere,
such as a userspace querier, is now dropped at the IGMP/MLD type
switch. Before, it trusted whatever skb->cb held, and a NULL
tunnel hit the WARN_ON(1).
Severity
No CVSS data available.
Assigner
References
Impacted products
2 products
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
cbc21dc1cfe949e37b2a54c71511579f1899e8d4 , < 95114e421196250e3d9662f12df442799477d3c3
(git)
Affected: cbc21dc1cfe949e37b2a54c71511579f1899e8d4 , < e7183b7d518ce8b3e1f7284f9881d7a87569df14 (git) Affected: cbc21dc1cfe949e37b2a54c71511579f1899e8d4 , < 181cb48c1e9af6b402567e132f879f89d1c54131 (git) Affected: cbc21dc1cfe949e37b2a54c71511579f1899e8d4 , < e7ea63b4195a150604993044ab574d8240f2a399 (git) Affected: cbc21dc1cfe949e37b2a54c71511579f1899e8d4 , < afae89de73dd693cfa329580ba0fba63bd3f0a11 (git) |
guessed | |
| Linux | Linux |
Affected:
5.16
Unaffected: 0 , < 5.16 (semver) Unaffected: 6.6.160 , ≤ 6.6.* (semver) Unaffected: 6.12.113 , ≤ 6.12.* (semver) Unaffected: 6.18.57 , ≤ 6.18.* (semver) Unaffected: 7.2.11 , ≤ 7.2.* (semver) Unaffected: 7.3 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/amt.c",
"include/net/amt.h"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "95114e421196250e3d9662f12df442799477d3c3",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "e7183b7d518ce8b3e1f7284f9881d7a87569df14",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "181cb48c1e9af6b402567e132f879f89d1c54131",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "e7ea63b4195a150604993044ab574d8240f2a399",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "afae89de73dd693cfa329580ba0fba63bd3f0a11",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/amt.c",
"include/net/amt.h"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.16"
},
{
"lessThan": "5.16",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.113",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.57",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.11",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.160",
"versionStartIncluding": "5.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.113",
"versionStartIncluding": "5.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.57",
"versionStartIncluding": "5.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.11",
"versionStartIncluding": "5.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "5.16",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\namt: send the relay\u0027s General Query directly from the receive path\n\nAn skb queued in a qdisc can outlive the tunnel it references\nthrough a raw pointer in skb-\u003ecb. For example, with igmp_qrv set\nto 1 on the relay a tunnel lives for 135s, so a netem delay of\n180s on the amt device outlives it; when the tunnel expires and is\nfreed, the subsequent dequeue triggers a use-after-free in\namt_dev_xmit().\n\n BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20\n Call Trace:\n amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]\n dev_hard_start_xmit+0x22f/0x620\n sch_direct_xmit+0x12e/0xac0\n netem_dequeue+0x333/0xc50\n net_tx_action+0x35c/0xa60\n\namt_send_igmp_gq() and amt_send_mld_gq() are only called from\namt_request_handler(), inside the rcu_read_lock_bh() section of\namt_rcv(). amt_request_handler() already has the tunnel the query is\nfor: it found or created it inside that section. Queuing the query with\ndev_queue_xmit() only leads back into amt_dev_xmit(), which strips the\nEthernet header and calls amt_send_membership_query() for that tunnel.\n\nMake that call directly from the two senders instead, the same way\namt_send_advertisement() transmits from the receive path. The query\nnever waits in a qdisc, the tunnel is only dereferenced inside the\nRCU section that found or created it, and nothing is stored in\nskb-\u003ecb, so no lookup or refcount is needed. Remove the query branch\nof amt_dev_xmit(), amt_skb_cb() and struct amt_skb_cb, which have no\nusers left.\n\nBehaviour changes:\n - The relay\u0027s own General Queries no longer pass through the amt\n device\u0027s egress path: its qdisc, tc egress (clsact/tcx), the\n netfilter egress hook and packet taps. They are still visible as\n UDP on the underlay.\n - A query that is sent successfully is no longer counted as\n tx_dropped. The old query branch left through the unlock label,\n which counted every sent query as dropped.\n - A query that reaches amt_dev_xmit() on a relay from elsewhere,\n such as a userspace querier, is now dropped at the IGMP/MLD type\n switch. Before, it trusted whatever skb-\u003ecb held, and a NULL\n tunnel hit the WARN_ON(1)."
}
],
"providerMetadata": {
"dateUpdated": "2026-10-23T12:19:39.236Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/95114e421196250e3d9662f12df442799477d3c3"
},
{
"url": "https://git.kernel.org/stable/c/e7183b7d518ce8b3e1f7284f9881d7a87569df14"
},
{
"url": "https://git.kernel.org/stable/c/181cb48c1e9af6b402567e132f879f89d1c54131"
},
{
"url": "https://git.kernel.org/stable/c/e7ea63b4195a150604993044ab574d8240f2a399"
},
{
"url": "https://git.kernel.org/stable/c/afae89de73dd693cfa329580ba0fba63bd3f0a11"
}
],
"title": "amt: send the relay\u0027s General Query directly from the receive path",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-98968",
"datePublished": "2026-10-23T12:19:39.236Z",
"dateReserved": "2026-09-25T10:25:14.383Z",
"dateUpdated": "2026-10-23T12:19:39.236Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"microsoft_vex": {
"current_release_date": "2026-10-24T01:10:18.000Z",
"cve": "CVE-2026-98968",
"id": "msrc_CVE-2026-98968",
"initial_release_date": "2026-10-24T01:10:18.000Z",
"product_status:under_investigation": "1",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "amt: send the relay\u0027s General Query directly from the receive path",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-98968.json",
"version": "1"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/amt.c",
"include/net/amt.h"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "95114e421196250e3d9662f12df442799477d3c3",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "e7183b7d518ce8b3e1f7284f9881d7a87569df14",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "181cb48c1e9af6b402567e132f879f89d1c54131",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "e7ea63b4195a150604993044ab574d8240f2a399",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
},
{
"lessThan": "afae89de73dd693cfa329580ba0fba63bd3f0a11",
"status": "affected",
"version": "cbc21dc1cfe949e37b2a54c71511579f1899e8d4",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/amt.c",
"include/net/amt.h"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.16"
},
{
"lessThan": "5.16",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.113",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.57",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.11",
"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\namt: send the relay\u0027s General Query directly from the receive path\n\nAn skb queued in a qdisc can outlive the tunnel it references\nthrough a raw pointer in skb-\u003ecb. For example, with igmp_qrv set\nto 1 on the relay a tunnel lives for 135s, so a netem delay of\n180s on the amt device outlives it; when the tunnel expires and is\nfreed, the subsequent dequeue triggers a use-after-free in\namt_dev_xmit().\n\n BUG: KASAN: slab-use-after-free in amt_dev_xmit+0x2763/0x2e20\n Call Trace:\n amt_dev_xmit+0x2763/0x2e20 [drivers/net/amt.c:1262]\n dev_hard_start_xmit+0x22f/0x620\n sch_direct_xmit+0x12e/0xac0\n netem_dequeue+0x333/0xc50\n net_tx_action+0x35c/0xa60\n\namt_send_igmp_gq() and amt_send_mld_gq() are only called from\namt_request_handler(), inside the rcu_read_lock_bh() section of\namt_rcv(). amt_request_handler() already has the tunnel the query is\nfor: it found or created it inside that section. Queuing the query with\ndev_queue_xmit() only leads back into amt_dev_xmit(), which strips the\nEthernet header and calls amt_send_membership_query() for that tunnel.\n\nMake that call directly from the two senders instead, the same way\namt_send_advertisement() transmits from the receive path. The query\nnever waits in a qdisc, the tunnel is only dereferenced inside the\nRCU section that found or created it, and nothing is stored in\nskb-\u003ecb, so no lookup or refcount is needed. Remove the query branch\nof amt_dev_xmit(), amt_skb_cb() and struct amt_skb_cb, which have no\nusers left.\n\nBehaviour changes:\n - The relay\u0027s own General Queries no longer pass through the amt\n device\u0027s egress path: its qdisc, tc egress (clsact/tcx), the\n netfilter egress hook and packet taps. They are still visible as\n UDP on the underlay.\n - A query that is sent successfully is no longer counted as\n tx_dropped. The old query branch left through the unlock label,\n which counted every sent query as dropped.\n - A query that reaches amt_dev_xmit() on a relay from elsewhere,\n such as a userspace querier, is now dropped at the IGMP/MLD type\n switch. Before, it trusted whatever skb-\u003ecb held, and a NULL\n tunnel hit the WARN_ON(1)."
}
],
"id": "CVE-2026-98968",
"lastModified": "2026-10-23T13:17:18.310",
"metrics": {},
"published": "2026-10-23T13:17:18.310",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/181cb48c1e9af6b402567e132f879f89d1c54131"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/95114e421196250e3d9662f12df442799477d3c3"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/afae89de73dd693cfa329580ba0fba63bd3f0a11"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/e7183b7d518ce8b3e1f7284f9881d7a87569df14"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/e7ea63b4195a150604993044ab574d8240f2a399"
}
],
"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.