CVE-2026-89468: power: supply: lp8788-charger: fix use-after-free on remove

Published Sep 11, 2026
·
Updated

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

power: supply: lp8788-charger: fix use-after-free on remove

lp8788chargerremove() flushes chargerwork before unregistering the IRQs. An IRQ thread can queue chargerwork after flushwork() has returned. The work can then run after devres frees pchg and dereference it in lp8788chargerevent().

Unregister the IRQs first. freeirq() waits for any running threaded handler, so no handler can queue more work afterwards. Then use cancelworksync() to cancel pending work or wait for running work to finish.

This issue was found by an in-house static analysis tool.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    In lp8788_charger_remove(), cancel pending charger_work with cancel_work_sync() (or flush charger_work) before unregistering IRQs. Then unregister the IRQs first; use free_irq() (which waits for any running threaded handler) so no IRQ handler can queue charger_work after devres frees pchg. This prevents the use-after-free where a charger_work queued from an IRQ thread can run after flush_work() has returned.

    Linux kernel (lp8788 charger driver) IRQ removal order / threaded work cancellation = Register IRQs -> on remove: cancel_work_sync() and flush_work() before unregistering IRQs; then unregister IRQs and free_irq()

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 systems are exposed to this issue?

Systems using the Linux kernel lp8788 charger driver are exposed during removal of the charger device if its threaded IRQ handler can run concurrently with teardown.

2

What condition is required to trigger the use-after-free?

An IRQ thread must queue charger_work after the remove path has flushed the work but before the IRQs are unregistered. The queued work can then run after devres has freed the driver state.

3

What is the required teardown order to prevent the race?

The IRQs must be unregistered before pending charger work is handled. After free_irq() prevents further threaded handlers from queuing work, cancel_work_sync() should cancel pending work or wait for running work to complete.

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