CVE-2026-89464: power: supply: twl4030_charger: cancel workers via devm

Published Sep 11, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

power: supply: twl4030charger: cancel workers via devm

bci is devm-allocated. Two workers (bci->work and bci->currentworker) dereference it. twl4030bciremove() 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 devmusbgetphybynode(). devm unregisters its notifier only after remove() returns. A cancelworksync() in remove() can then race a notifier reschedule. devmworkautocancel() and devmdelayedworkautocancel() avoid that. They cancel the workers during devm release, before bci is freed.

The currentworker is registered first, since devm will cancel in reverse order and bci->work can reschedule currentworker.

[Move comment about order into the commit message]

Event History

Sep 11, 2026
CVE Published
via MITRE·07:43 PM
Data Sourced
via MITRE·07:43 PM
Description

Frequently Asked Questions

1

Which deployments are exposed to this issue?

Systems using the Linux twl4030_charger power-supply driver are exposed when the driver is removed while either of its workers is pending. The risk occurs during device removal or driver teardown, not merely from normal charging operation.

2

What condition triggers the use-after-free?

A pending bci->work or bci->current_worker can execute after remove() returns and devm frees the devm-allocated bci structure. Those workers dereference bci, producing the use-after-free condition.

3

Why is cancel_work_sync() in the remove path not sufficient?

The USB transceiver notifier remains registered until after remove() returns, so it can reschedule a worker after cancel_work_sync() runs. The resolved approach uses devm-managed worker cancellation during devm release, before bci is freed.

4

How does the fix prevent worker rescheduling during teardown?

It uses devm_work_autocancel() and devm_delayed_work_autocancel() so the workers are cancelled as part of managed-resource release. current_worker is registered first so reverse-order cleanup cancels bci->work before current_worker, preventing bci->work from rescheduling it.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203