CVE-2026-98859
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:
HID: multitouch: impedir que el temporizador de liberación se vuelva a armar al eliminar
mt_remove() detiene el temporizador de dedos pegajosos antes de detener el hardware:
timer_delete_sync() espera a que termine una callback en ejecución y desencola el temporizador, pero no impide que vuelva a armarse. En ese momento el transporte sigue entregando informes, y la ruta de procesamiento de informes lo vuelve a armar:
Por tanto, un informe que llegue después de que timer_delete_sync() haya retornado deja el temporizador encolado. td se asigna con devm_kzalloc() sobre hdev->dev, de modo que se libera al desvincular el controlador, después de que mt_remove() retorne.
Leer descripción completaMostrar menos
Cuando el temporizador se dispara posteriormente, mt_expired_timeout() desreferencia el td ya liberado:
Mover la limpieza después de hid_hw_stop() no soluciona el problema por sí solo, porque mt_expired_timeout() llama a mt_release_contacts(), que recorre hdev->inputs; el temporizador debe seguir silenciado antes de que hid_hw_stop() desmonte los dispositivos de entrada.
Se utiliza en su lugar timer_shutdown_sync(), que además hace que cualquier mod_timer() posterior no tenga efecto, de modo que no hay que sacrificar ninguna de las dos restricciones de orden en favor de la otra. Este es el patrón de desmontaje final para el que se introdujo la función, y hid-wiimote ya lo utiliza por la misma razón.
Detalles técnicos trazas, registros y código del informe original
timer_delete_sync(&td->release_timer);
sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
hid_hw_stop(hdev);
if (app->quirks & MT_QUIRK_STICKY_FINGERS) {
if (td->mt_io_flags & MT_IO_SLOTS_MASK)
mod_timer(&td->release_timer,
jiffies + msecs_to_jiffies(100));
struct mt_device *td = timer_container_of(td, t, release_timer);
struct hid_device *hdev = td->hdev;
if (test_and_set_bit_lock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))Traducció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.16 %
- Percentil entre todas las CVEs puntuadas
- 4
- 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-98859",
"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": "4f4001bc76fd1a138a501fbd3d68cce72cbf96ce",
"lessThan": "1f1bd9a3117f082eb891c0986c4f0e04cd974c9a",
"versionType": "git"
},
{
"status": "affected",
"version": "4f4001bc76fd1a138a501fbd3d68cce72cbf96ce",
"lessThan": "0c19a6c1d25fd5ed66d1f80dc6f6e56cc1f0a787",
"versionType": "git"
},
{
"status": "affected",
"version": "4f4001bc76fd1a138a501fbd3d68cce72cbf96ce",
"lessThan": "a0125ca86e405b8a704e96157a6c10ca51087652",
"versionType": "git"
},
{
"status": "affected",
"version": "4f4001bc76fd1a138a501fbd3d68cce72cbf96ce",
"lessThan": "5acb2dace582f061aab5e14c399ac9480315f44b",
"versionType": "git"
}
],
"programFiles": [
"drivers/hid/hid-multitouch.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "4.13"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "4.13",
"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": [
"drivers/hid/hid-multitouch.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-10-18T16:17:40.363",
"references": [
{
"url": "https://git.kernel.org/stable/c/0c19a6c1d25fd5ed66d1f80dc6f6e56cc1f0a787",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/1f1bd9a3117f082eb891c0986c4f0e04cd974c9a",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/5acb2dace582f061aab5e14c399ac9480315f44b",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/a0125ca86e405b8a704e96157a6c10ca51087652",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nHID: multitouch: stop the release timer from being rearmed on remove\n\nmt_remove() quiesces the sticky-finger timer before stopping the\nhardware:\n\n timer_delete_sync(&td->release_timer);\n\n sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);\n hid_hw_stop(hdev);\n\ntimer_delete_sync() waits for a running callback and dequeues the timer,\nbut it does not stop the timer from being armed again. The transport is\nstill delivering reports at that point, and the report path rearms it:\n\n if (app->quirks & MT_QUIRK_STICKY_FINGERS) {\n if (td->mt_io_flags & MT_IO_SLOTS_MASK)\n mod_timer(&td->release_timer,\n jiffies + msecs_to_jiffies(100));\n\nA report that arrives after timer_delete_sync() has returned therefore\nleaves the timer queued. td is allocated with devm_kzalloc() against\nhdev->dev, so it is freed when the driver is unbound, after mt_remove()\nreturns. When the timer fires afterwards, mt_expired_timeout()\ndereferences the freed td:\n\n struct mt_device *td = timer_container_of(td, t, release_timer);\n struct hid_device *hdev = td->hdev;\n\n if (test_and_set_bit_lock(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))\n\nSimply moving the teardown after hid_hw_stop() does not fix this on its\nown, because mt_expired_timeout() calls mt_release_contacts(), which\nwalks hdev->inputs; the timer still has to be quiesced before\nhid_hw_stop() tears the input devices down.\n\nUse timer_shutdown_sync() instead, which additionally makes any later\nmod_timer() a no-op, so neither ordering constraint has to be traded off\nagainst the other. This is the final-teardown pattern the function was\nintroduced for, and hid-wiimote already uses it for the same reason."
}
],
"lastModified": "2026-10-19T10:19:49.980",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}