CVE-2026-93815: net: au1000: move free_irq out of the close-time spinlocked section

Published Sep 24, 2026
·
Updated

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

net: au1000: move freeirq out of the close-time spinlocked section

au1000close() calls freeirq() while aup->lock is still held with spinlockirqsave(). freeirq() can sleep because it takes the IRQ descriptor request mutex, so it does not belong inside the close-time spinlocked section.

This was found by our static analysis tool and then confirmed by manual review of the in-tree au1000close() .ndostop path. The reviewed path keeps aup->lock held across the MAC reset, queue stop and freeirq(dev->irq, dev).

A directed runtime validation kept that ndostop carrier and the same freeirq(dev->irq, dev) operation under the driver lock. Lockdep reported "BUG: sleeping function called from invalid context" and "Invalid wait context" while freeirq() was taking desc->requestmutex, with au1000close() and freeirq() on the stack.

Drop aup->lock before freeing the IRQ. The protected close-time work still stops the device and queue before IRQ teardown, but the sleepable IRQ core path now runs outside the spinlocked section.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Compensating control

    In au1000_close(), release aup->lock and move free_irq(dev->irq, dev) outside the close-time spinlocked section; perform IRQ teardown only after leaving the spin_lock_irqsave() context.

Event History

Sep 24, 2026
CVE Published
via MITRE·04:02 PM
Data Sourced
via MITRE·04:02 PM
Description
Data Sourced
via NVD·05:17 PM
Description

Frequently Asked Questions

1

Which systems are exposed to this issue?

Systems using the Linux kernel au1000 network driver are exposed when that driver's close/stop path is invoked. The issue is in au1000_close(), the driver's ndo_stop handler.

2

What event triggers the vulnerable code path?

The problematic path runs during device close or stop, when au1000_close() tears down the device and frees its IRQ. The failure occurs because free_irq() may sleep while the driver spinlock is held.

3

How can administrators identify whether the issue has occurred?

Lockdep can report "BUG: sleeping function called from invalid context" and "Invalid wait context" with au1000_close() and free_irq() in the stack trace. The reported sleep occurs while free_irq() takes the IRQ descriptor request mutex.

4

What does the fix change?

The fix releases aup->lock before calling free_irq(). Device and queue shutdown remain protected before IRQ teardown, while the sleepable IRQ cleanup runs outside the spinlocked section.

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