CVE-2026-89645: btrfs: drop recovered reloc root refs on recovery failure

Published Sep 11, 2026
·
Updated

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

btrfs: drop recovered reloc root refs on recovery failure

During relocation recovery, each fs root gets a reference to its relocation root. If loading or adding a later root fails, or if the first transaction commit fails, btrfsrecoverrelocation() jumps to outunset before mergerelocroots() and cleandirtysubvols().

putreloccontrol() drops the list-owned relocation root references, but it does not clear fsroot->relocroot or drop the references owned by those pointers. Mount cleanup only drops them when BTRFSFSERROR is set, so an error such as -ENOMEM while processing a later root can leave references behind.

Keep temporary references to the fs roots associated during recovery. On failure, clear their relocroot pointers and drop the corresponding references. Once the first transaction commit succeeds, drop only the temporary fs root references and let the normal merge and cleanup paths handle the relocation roots.

Fault injection on a pending-relocation image confirmed the cleanup gap. With an injected first-commit failure, 25 fs roots had relocroot set with fserror=0. With this fix, the same failure path drops that count to 0 before mount fails.

Affected Software

1 affected component
Linux Linux kernel

Event History

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

Frequently Asked Questions

1

When can this issue be triggered?

It occurs during Btrfs relocation recovery when processing a pending-relocation filesystem image. A failure while loading or adding a later filesystem root, or failure of the first transaction commit, can leave relocation-root references behind.

2

What conditions make an affected system more likely to encounter the problem?

The described failure paths include an out-of-memory error while processing a later root and an injected failure of the first transaction commit. The issue depends on relocation recovery and an error occurring before relocation roots are merged and dirty subvolumes are cleaned.

3

How can the affected state be identified?

In the demonstrated first-commit failure case, filesystem roots retained reloc_root pointers while BTRFS_FS_ERROR remained unset. The fault-injection test observed 25 such roots on a pending-relocation image before the fix.

4

What does the fix change?

On recovery failure, the fix clears the reloc_root pointers for roots associated during recovery and drops their corresponding references. After the first transaction commit succeeds, it drops only temporary filesystem-root references and leaves normal merge and cleanup paths to handle relocation roots.

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