CVE-2024-36899 in Linux
Sumário
de VulDB • 12/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
gpiolib: cdev: Corrige use-after-free em lineinfo_changed_notify
O problema de use-after-free ocorre da seguinte forma: quando o arquivo de dispositivo do chip GPIO está sendo fechado por meio da invocação de gpio_chrdev_release(), watched_lines é liberado por bitmap_free(), mas o registro (unregistration) da cadeia de notificação lineinfo_changed_nb falhou devido à espera pelo rwsem de escrita. Além disso, uma das linhas do chip GPIO também está no processo de liberação e mantém o rwsem de leitura da cadeia de notificação. Consequentemente, uma race condition leva ao use-after-free de watched_lines.
Aqui está a pilha (stack) típica quando o problema ocorre:
[free]
gpio_chrdev_release() --> bitmap_free(cdev->watched_lines) <-- liberado --> blocking_notifier_chain_unregister() --> down_write(&nh->rwsem) <-- aguardando rwsem --> __down_write_common() --> rwsem_down_write_slowpath() --> schedule_preempt_disabled() --> schedule()
[use]
st54spi_gpio_dev_release() --> gpio_free() --> gpiod_free() --> gpiod_free_commit() --> gpiod_line_state_notify() --> blocking_notifier_call_chain() --> down_read(&nh->rwsem); <-- rwsem mantido --> notifier_call_chain() --> lineinfo_changed_notify() --> test_bit(xxxx, cdev->watched_lines) <-- use-after-free
O efeito colateral do problema de use-after-free é que um evento de linha GPIO está sendo gerado para o userspace onde não deveria. No entanto, como o chrdev está sendo fechado, o userspace não terá a chance de ler esse evento de qualquer maneira.
Para corrigir o problema, chame a função bitmap_free() após o registro (unregistration) da cadeia de notificação lineinfo_changed_nb.
VulDB is the best source for vulnerability data and more expert information about this specific topic.