CVE-2026-98457
Full vulnerability record from the local CVENow database.
Description
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: L2CAP: validate frame length before control and FCS access l2cap_data_rcv() unpacks either a two-byte or four-byte control field without first ensuring that it is present. A short ERTM or streaming-mode frame can therefore cause an out-of-bounds read. There is a second short-frame case when CRC16 is enabled. After the control field is pulled, l2cap_check_fcs() subtracts two from skb->len without checking it. If fewer than two bytes remain, the subtraction wraps; skb_trim() leaves the buffer unchanged and the subsequent FCS load reads past the logical end of the frame. Validate that the frame contains both its control field and, when enabled, its FCS before either field is accessed.
View original CVE JSON
{
"id": "CVE-2026-98457",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"published": "2026-10-18T16:16:56.110",
"lastModified": "2026-10-19T10:18:55.100",
"vulnStatus": "Received",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: L2CAP: validate frame length before control and FCS access\n\nl2cap_data_rcv() unpacks either a two-byte or four-byte control field\nwithout first ensuring that it is present. A short ERTM or streaming-mode\nframe can therefore cause an out-of-bounds read.\n\nThere is a second short-frame case when CRC16 is enabled. After the\ncontrol field is pulled, l2cap_check_fcs() subtracts two from skb->len\nwithout checking it. If fewer than two bytes remain, the subtraction\nwraps; skb_trim() leaves the buffer unchanged and the subsequent FCS\nload reads past the logical end of the frame.\n\nValidate that the frame contains both its control field and, when\nenabled, its FCS before either field is accessed."
}
],
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "unaffected",
"programFiles": [
"net/bluetooth/l2cap_core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "4373ba79a267947e771c438507f7b103e30bdb21",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "965bd88ed4b4763cb765dd65885adcfa588c6b14",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "3acf6a0038ec0d4e8f4dcbfc2a557dff5f61cb70",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "8c7556c7cd17e073bbefdc4a9a4694a207544c37",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "1fdbb2a712a9a162ee817c959740face80b3d929",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "c6a288e6001bcce16553c3853e0f5a45eaaf85c7",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "f557274af7b94b6134692e6f26b880f1e34c15bf",
"versionType": "git",
"status": "affected"
},
{
"version": "1c2acffb76d4bc5fd27c4ea55cc27ad8ead10f9a",
"lessThan": "6c78a213d9070b610c7f418af2c25b66180b7e37",
"versionType": "git",
"status": "affected"
}
]
},
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "affected",
"programFiles": [
"net/bluetooth/l2cap_core.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "2.6.32",
"status": "affected"
},
{
"version": "0",
"lessThan": "2.6.32",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "5.10.271",
"lessThanOrEqual": "5.10.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "5.15.222",
"lessThanOrEqual": "5.15.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.1.189",
"lessThanOrEqual": "6.1.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.6.158",
"lessThanOrEqual": "6.6.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.12.112",
"lessThanOrEqual": "6.12.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.18.55",
"lessThanOrEqual": "6.18.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "7.2.9",
"lessThanOrEqual": "7.2.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "7.3",
"lessThanOrEqual": "*",
"versionType": "original_commit_for_fix",
"status": "unaffected"
}
]
}
]
}
],
"metrics": {},
"references": [
{
"url": "https://git.kernel.org/stable/c/1fdbb2a712a9a162ee817c959740face80b3d929",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/3acf6a0038ec0d4e8f4dcbfc2a557dff5f61cb70",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/4373ba79a267947e771c438507f7b103e30bdb21",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/6c78a213d9070b610c7f418af2c25b66180b7e37",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/8c7556c7cd17e073bbefdc4a9a4694a207544c37",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/965bd88ed4b4763cb765dd65885adcfa588c6b14",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/c6a288e6001bcce16553c3853e0f5a45eaaf85c7",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/f557274af7b94b6134692e6f26b880f1e34c15bf",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
]
}