В ядре Linux устранена следующая уязвимость:
iio: adc: at91-sama5d2_adc: исправлено потенциальное использование после освобождения в драйвере sama5d2_adc.
at91_adc_interrupt может вызывать функцию at91_adc_touch_data_handler
чтобы начать работу, Schedule_work(&st->touch_st.workq).
Если мы удалим модуль, который будет вызывать at91_adc_remove для
сделайте очистку, она освободит indio_dev через iio_device_unregister, но
совсем немного позже. Пока будут использоваться упомянутые выше работы.
последовательность действий, которые могут привести к ошибке UAF, следующая:
ЦП0 ЦП1
| at91_adc_workq_handler
at91_adc_remove |
iio_device_unregister(indio_dev) |
//бесплатный indio_dev чуть позже |
| iio_push_to_buffers (indio_dev)
| //используем indio_dev
Исправьте это, убедившись, что работа отменена, прежде чем продолжить
очистка в at91_adc_remove.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver at91_adc_interrupt can call at91_adc_touch_data_handler function to start the work by schedule_work(&st->touch_st.workq). If we remove the module which will call at91_adc_remove to make cleanup, it will free indio_dev through iio_device_unregister but quite a bit later. While the work mentioned above will be used. The sequence of operations that may lead to a UAF bug is as follows: CPU0 CPU1 | at91_adc_workq_handler at91_adc_remove | iio_device_unregister(indio_dev) | //free indio_dev a bit later | | iio_push_to_buffers(indio_dev) | //use indio_dev Fix it by ensuring that the work is canceled before proceeding with the cleanup in at91_adc_remove.