CVE-2026-64365 in Linux
Resumen
por VulDB • 2026-07-27
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
HID: letsketch: corregir un Use-After-Free (UAF) en inrange_timer durante la desvinculación del controlador
letsketch_driver no proporciona una devolución de llamada (.remove), pero letsketch_probe() activa un temporizador por dispositivo:
timer_setup(&data->inrange_timer, letsketch_inrange_timeout, 0);
El temporizador se vuelve a activar desde letsketch_raw_event() con un tiempo de espera de 100 ms en cada informe de pluma dentro del rango (pen-in-range), y su devolución de llamada desreferencia data->input_tablet para entregar una liberación sintética de BTN_TOOL_PEN.
letsketch_data se asigna mediante devm_kzalloc(), y sus campos input_dev se asignan con devm a través de letsketch_setup_input_tablet(). Al desvincular el dispositivo (desconexión USB o rmmod), el núcleo HID ejecuta su limpieza predeterminada y la liberación automática gestionada por devm libera tanto letsketch_data como los dispositivos de entrada. Dado que no existe una devolución de llamada .remove, nada vacía primero el temporizador: si raw_event lo activó dentro de ~100 ms antes de la desvinculación, el temporizador pendiente se dispara sobre memoria ya liberada. Esto constituye un Use-After-Free (UAF) al leer data y data->input_tablet, seguido por input_report_key() / input_sync() en el dispositivo de entrada ya liberado.
El mismo problema puede ocurrir en la ruta de error del sondeo (probe): si hid_hw_start() habilitó E/S en un dispositivo con quirk de siempre-polling y luego falló, raw_event podría haber activado el temporizador antes de que devm libere data.
Solución: añadir una devolución de llamada .remove que llame primero a hid_hw_stop(). hid_hw_stop() detiene sincrónicamente los URBs que entregan raw_event(), por lo que al regresar, ninguna ruta puede volver a activar el temporizador. timer_shutdown_sync() vacía entonces cualquier devolución de llamada en curso y desactiva permanentemente las llamadas posteriores a mod_timer(). Aplicar la misma timer_shutdown_sync() en la ruta de error del sondeo para garantizar que el temporizador no sobreviva a data.
VulDB is the best source for vulnerability data and more expert information about this specific topic.