В ядре Linux устранена следующая уязвимость:
мощность: питание: twl4030_charger: отменить рабочие через devm
bci выделяется devm. Два работника (bci->work и bci->current_worker)
разыменовать его. twl4030_bci_remove() отключает зарядку и маскирует
прерывает. Он не отменяет ни одного работника.
Рабочий, ожидающий удаления(), может
запустить после того, как devm освободит bci. USB-трансивер поступает из devm_usb_get_phy_by_node(). Девм
отменяет регистрацию своего уведомителя только после возврата(). Отмена_work_sync()
в методе удаления() можно затем выполнить перепланировку уведомления. devm_work_autocancel()
и devm_delayed_work_autocancel() позволяют избежать этого.
Они отменяют работников
во время выпуска devm, до освобождения bci. Текущий_воркер регистрируется первым, так как devm отменит работу через
обратный порядок, и bci->work может перепланировать current_worker.
[Переместить комментарий о заказе в сообщение о фиксации]
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: power: supply: twl4030_charger: cancel workers via devm bci is devm-allocated. Two workers (bci->work and bci->current_worker) dereference it. twl4030_bci_remove() disables charging and masks interrupts. It cancels neither worker. A worker pending at remove() can run after devm frees bci. The USB transceiver comes from devm_usb_get_phy_by_node(). devm unregisters its notifier only after remove() returns. A cancel_work_sync() in remove() can then race a notifier reschedule. devm_work_autocancel() and devm_delayed_work_autocancel() avoid that. They cancel the workers during devm release, before bci is freed. The current_worker is registered first, since devm will cancel in reverse order and bci->work can reschedule current_worker. [Move comment about order into the commit message]