CVE-2026-89548: SUNRPC: always drain cache_cleaner before destroying a cache_detail

Published Sep 11, 2026
·
Updated

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

SUNRPC: always drain cachecleaner before destroying a cachedetail

sunrpcdestroycachedetail() only cancels the global cachecleaner delayedwork when cachelist is empty. During per-netns teardown cachelist is never empty because initnet's caches remain registered, so the cancel never fires. After unlink, the caller proceeds to cachedestroynet() which kfrees the cachedetail while cacheclean() may still hold a dangling pointer to it. The result is a use-after-free: cachedequeue() takes cd->queuelock on freed memory, and cacheput() dereferences cd->cacheput as a function pointer from freed slab.

Drop the listempty guard so that canceldelayedworksync() always runs, ensuring any in-flight cacheclean() completes before the cachedetail is freed. Re-arm the cleaner afterwards if other caches are still registered.

Affected Software

1 affected component
Linux Linux kernel

Event History

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

Frequently Asked Questions

1

When is this vulnerability reachable?

It is reachable during per-network-namespace teardown when a cache_detail is destroyed while the global SUNRPC cache_cleaner delayed work can still be running. The condition occurs because init_net caches remain registered, leaving cache_list non-empty.

2

What could happen if the race is triggered?

The cleaner can access a freed cache_detail, causing a use-after-free. This includes taking queue_lock from freed memory and dereferencing the cache_put function pointer from freed slab memory.

3

What mitigation is described if the fix is not yet applied?

The provided data describes the corrective change: always run cancel_delayed_work_sync() before freeing cache_detail, then re-arm the cleaner if other caches remain registered. No separate operational workaround is provided.

4

How does the fix prevent the use-after-free?

It removes the cache_list-empty condition that prevented cancellation during per-netns teardown. Draining the delayed work ensures any in-flight cache_clean() finishes before cache_detail is freed.

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