Ad

CVE-2026-72047

NONE EPSS 0.21%
Обновлено 17 августа 2026
Linux
Параметр Значение
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: ieee802154: ca8210: исправлено усечение указателя в kfifo на 64-битной версии. Обмен ca8210_test_int_driver_write() и ca8210_test_int_user_read() указатель буфера kmalloc через структуру kfifo, но передать литерал «4» — количество байтов в kfifo_in()/kfifo_out(). Это верно для 32-битной версии (указатель = 4 байта), но для 64-битной версии только младшие 4 байта 8-байтового указателя записываются в FIFO.

Читатель затем считывает обратно 4 байта в 8-байтовую переменную локального указателя, оставляя верхние 4 байта неинициализированных данных стека. Первое разыменование восстановленный указатель (fifo_buffer[1]) обращается к произвольному ядру адрес и обычно приводит к упс. Используйте sizeof(fifo_buffer), чтобы количество байтов соответствовало ширине указателя на каждом архитектура.

Драйвер не имеет ограничений по архитектуре в Kconfig, поэтому любой 64-битный сборка с CONFIG_IEEE802154_CA8210_DEBUGFS=y доступна. Проблема имеет был скрыт с момента добавления драйвера в 2017 году, поскольку он наиболее обычно используется на 32-битных микроконтроллерах. Находится с помощью специального семантического патча Coccinelle, охотящегося за короткими байтами. kfifo Ввод-вывод на kfifo в байтовом режиме, используемый для перемещения указателей.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: ieee802154: ca8210: fix pointer truncation in kfifo on 64-bit ca8210_test_int_driver_write() and ca8210_test_int_user_read() exchange a kmalloc'd buffer pointer through a struct kfifo, but pass a literal '4' as the byte count to kfifo_in()/kfifo_out(). This is correct on 32-bit (pointer = 4 bytes), but on 64-bit only the low 4 bytes of the 8-byte pointer are written into the FIFO. The reader then reads back 4 bytes into an 8-byte local pointer variable, leaving the upper 4 bytes uninitialized stack data. The first dereference of the reconstructed pointer (fifo_buffer[1]) accesses an arbitrary kernel address and generally results in an oops. Use sizeof(fifo_buffer) so the byte count matches pointer width on every architecture. The driver has no architecture restriction in Kconfig, so any 64-bit build with CONFIG_IEEE802154_CA8210_DEBUGFS=y is exposed. Issue has been latent since the driver was added in 2017 because it is most commonly deployed on 32-bit MCUs. Found via a custom Coccinelle semantic patch hunting for short-byte kfifo I/O on byte-mode kfifos used to shuttle pointers.