FICHE CVE

CVE-2026-98677

Publiée le 2026-10-18 · Dernière modification le 2026-10-21

🇫🇷 EN BREF

Le pilote `ad_sigma_delta` du noyau Linux, utilisé pour la gestion des convertisseurs analogique-numérique (CAN), contient une vulnérabilité de type « use-after-free » (utilisation après libération). Le problème survient lors du processus de « déliaison » (unbind), lorsque le pilote est retiré du système. Comme le tampon mémoire pour les échantillons est libéré avant que l'interruption matérielle ne soit désactivée, le système peut tenter d'écrire des données entrantes dans une mémoire qui a déjà été libérée.

Un attaquant capable de déclencher la déliaison du pilote et de fournir des entrées matérielles spécifiques pourrait potentiellement provoquer un plantage du système (déni de service) ou exécuter du code arbitraire avec les privilèges du noyau. Toutefois, cette faille est difficile à exploiter en pratique car elle nécessite un accès administratif local pour décharger le pilote, ainsi qu'un accès physique ou spécialisé au matériel CAN concerné. Il ne s'agit pas d'une attaque réseau à distance.

CVSS—
Publiée2026-10-18
Dernière modification2026-10-21

RÉFÉRENCES

Description officielle du NVD (en anglais)

In the Linux kernel, the following vulnerability has been resolved: iio: adc: ad_sigma_delta: fix use-after-free on unbind ad_sd_buffer_postenable() allocates sigma_delta->samples_buf with devm_krealloc() at runtime, so its devres entry sits after all probe-time entries of the driver. devm resources are released in reverse allocation order, which means unbind frees samples_buf before iio_device_unregister() disables the buffers and detaches the trigger pollfunc. The data ready IRQ is still enabled at that point, so ad_sd_trigger_handler() can still run and memcpy() incoming samples into the freed samples_buf. Fix this by preallocating the buffer in devm_ad_sd_setup_buffer_and_trigger(), before the triggered buffer and the IRQ are set up, so it is freed only after iio_device_unregister() has drained the trigger handler via free_irq(). Size it for the worst case of all sequencer slots being active; ad_sd_validate_scan_mask() already caps the number of active channels at num_slots. This issue was found by an in-house static analysis tool.