CVE-2026-98736
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:
Bluetooth: hci_conn: Bloquear el acceso al padre durante la configuración de SCO mejorado
Bluetooth: hci_conn: Bloquear el acceso al padre durante la configuración de SCO mejorado
hci_enhanced_setup_sync() se ejecuta en la cola de trabajo de peticiones sin que el llamador tenga adquirido hci_dev_lock cuando se encoló la configuración. Su comprobación de capacidad CVSD y find_next_esco_param() desreferencian conn->parent mientras la cola de trabajo de recepción puede desvincular y liberar ese padre.
La siguiente intercalación puede provocar un use-after-free:
Leer descripción completaMostrar menos
La referencia que se mantiene para el hijo SCO encolado no mantiene vivo a su padre ACL tras la desvinculación. El commit 42de40abe25d ("Bluetooth: hci_conn: fix the SCO setup context lifetime") protege el hijo almacenado en el contexto encolado, pero deja sin protección estos accesos al padre.
Con un retardo de diagnóstico de 40 ms tras cargar conn->parent, un kernel instrumentado basado en fd179f8a05be, que ya contiene 42de40abe25d, produce:
La dirección accedida está a 71 bytes del padre ACL liberado, en su byte features[0][3]; el hijo SCO encolado es un objeto distinto. El diagnóstico conserva el padre cargado durante el retardo, en coherencia con la comprobación de capacidad compilada sin modificar, y no altera las referencias al padre ni la ruta de destrucción.
Mantener hci_dev_lock() durante el cambio de códec, incluida cada llamada a find_next_esco_param(), y liberarlo en todos los errores de selección. Mantener configure_datapath_sync() fuera de la sección crítica porque espera eventos HCI. Conservar la selección de parámetros y los valores de retorno existentes.
Detalles técnicos trazas, registros y código del informe original
hci_enhanced_setup_sync() hci_disconn_complete_evt()
cargar conn->parent
hci_dev_lock()
hci_conn_del(ACL parent)
desvincular el hijo SCO
soltar la referencia al padre del enlace
poner a cero child->parent
liberar el padre ACL
bt_link_release()
kfree(parent)
hci_dev_unlock()
leer parent->features[0][3]
BUG: KASAN: slab-use-after-free in hci_enhanced_setup_sync+0xda5/0xdf0
Read of size 1 at addr ffff888102204047 by task kworker/u17:0/93
Call Trace:
hci_enhanced_setup_sync+0xda5/0xdf0
hci_cmd_sync_work+0x13c/0x290
process_one_work+0x6b4/0x10e0
Allocated by task 92:
__hci_conn_add+0x304/0x1df0
hci_connect_acl+0x349/0x3e0
hci_connect_sco+0x3b/0x9a0
sco_sock_connect+0x475/0xca0
Freed by task 94:
kfree+0x121/0x3c0
bt_link_release+0x79/0xa0
device_release+0xc8/0x240
kobject_put+0x14d/0x280
hci_conn_del+0x524/0xe30
hci_disconn_complete_evt+0x403/0x8c0
hci_event_packet+0x71b/0xb20
hci_rx_work+0x293/0x730Traducción automática del texto original de NVD (en inglés).
CVSS
NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días
- 0.17 %
- Percentil entre todas las CVEs puntuadas
- 6
- Fecha de la puntuación
- 20/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
Referencias
Mostrar las 4 referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-98736",
"cveTags": [],
"metrics": {},
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "e07a06b4eb417f5271d33ce2240e93c62d98b7b4",
"lessThan": "1239ef0fa809b5952fca679db3faa3e1c00e1dac",
"versionType": "git"
},
{
"status": "affected",
"version": "e07a06b4eb417f5271d33ce2240e93c62d98b7b4",
"lessThan": "cabd58d9bb66d49d481f762ce986173db397435d",
"versionType": "git"
},
{
"status": "affected",
"version": "e07a06b4eb417f5271d33ce2240e93c62d98b7b4",
"lessThan": "93a737e4e042f59673cd580d35214f278d7b757d",
"versionType": "git"
},
{
"status": "affected",
"version": "e07a06b4eb417f5271d33ce2240e93c62d98b7b4",
"lessThan": "024e05f73a4c1263d031614bc36700ec135eecb4",
"versionType": "git"
}
],
"programFiles": [
"net/bluetooth/hci_conn.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "6.1"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "6.1",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "6.12.113",
"versionType": "semver",
"lessThanOrEqual": "6.12.*"
},
{
"status": "unaffected",
"version": "6.18.56",
"versionType": "semver",
"lessThanOrEqual": "6.18.*"
},
{
"status": "unaffected",
"version": "7.2.10",
"versionType": "semver",
"lessThanOrEqual": "7.2.*"
},
{
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"net/bluetooth/hci_conn.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-10-18T16:17:27.237",
"references": [
{
"url": "https://git.kernel.org/stable/c/024e05f73a4c1263d031614bc36700ec135eecb4",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/1239ef0fa809b5952fca679db3faa3e1c00e1dac",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/93a737e4e042f59673cd580d35214f278d7b757d",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/cabd58d9bb66d49d481f762ce986173db397435d",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: hci_conn: Lock parent access during enhanced SCO setup\n\nBluetooth: hci_conn: Lock parent access during enhanced SCO setup\n\nhci_enhanced_setup_sync() runs on the request workqueue without the\nhci_dev_lock held by its caller when setup was queued. Its CVSD\ncapability check and find_next_esco_param() dereference conn->parent\nwhile the receive workqueue can unlink and release that parent.\n\nThe following interleaving can cause a use-after-free:\n\n hci_enhanced_setup_sync() hci_disconn_complete_evt()\n load conn->parent\n hci_dev_lock()\n hci_conn_del(ACL parent)\n unlink SCO child\n drop link's parent reference\n clear child->parent\n release ACL parent\n bt_link_release()\n kfree(parent)\n hci_dev_unlock()\n read parent->features[0][3]\n\nThe reference held for the queued SCO child does not keep its ACL parent\nalive after unlinking. Commit 42de40abe25d (\"Bluetooth: hci_conn: fix the\nSCO setup context lifetime\") protects the child stored in the queued\ncontext, but leaves these parent accesses unprotected.\n\nWith a 40 ms diagnostic delay after loading conn->parent, an instrumented\nkernel based on fd179f8a05be, which already contains 42de40abe25d,\n\n BUG: KASAN: slab-use-after-free in hci_enhanced_setup_sync+0xda5/0xdf0\n Read of size 1 at addr ffff888102204047 by task kworker/u17:0/93\n Call Trace:\n hci_enhanced_setup_sync+0xda5/0xdf0\n hci_cmd_sync_work+0x13c/0x290\n process_one_work+0x6b4/0x10e0\n\n Allocated by task 92:\n __hci_conn_add+0x304/0x1df0\n hci_connect_acl+0x349/0x3e0\n hci_connect_sco+0x3b/0x9a0\n sco_sock_connect+0x475/0xca0\n\n Freed by task 94:\n kfree+0x121/0x3c0\n bt_link_release+0x79/0xa0\n device_release+0xc8/0x240\n kobject_put+0x14d/0x280\n hci_conn_del+0x524/0xe30\n hci_disconn_complete_evt+0x403/0x8c0\n hci_event_packet+0x71b/0xb20\n hci_rx_work+0x293/0x730\n\nThe accessed address is 71 bytes into the freed ACL parent, at its\nfeatures[0][3] byte; the queued SCO child is a different object. The\ndiagnostic preserves the loaded parent across the delay, matching the\nunmodified compiled capability check, and does not change the parent\nreferences or teardown path.\n\nHold hci_dev_lock() across the codec switch, including every call to\nfind_next_esco_param(), and release it on all selection errors. Keep\nconfigure_datapath_sync() outside the critical section because it waits\nfor HCI events. Preserve parameter selection and existing return values."
}
],
"lastModified": "2026-10-19T10:19:37.737",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}