]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: replace ASSERT with proper error handling in stripe lookup fallback
authorrobbieko <robbieko@synology.com>
Mon, 13 Apr 2026 06:52:35 +0000 (14:52 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 21 Apr 2026 02:02:30 +0000 (04:02 +0200)
After falling back to the previous item in btrfs_delete_raid_extent(),
the code uses ASSERT(found_start <= start) to verify the found extent
actually precedes our target range. If the B-tree state is unexpected
(e.g. no overlapping extent exists), this triggers a kernel BUG/panic
in debug builds, or silently continues with wrong data otherwise.

Replace the ASSERT with a proper bounds check that returns -ENOENT if
the found extent does not actually overlap with the start position.

Signed-off-by: robbieko <robbieko@synology.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/raid-stripe-tree.c

index 1a0ea21076886e3e77787db70757f69fbb38dd08..d454894b9e665a996181e3681691665aba9eac81 100644 (file)
@@ -154,7 +154,10 @@ int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 le
                        btrfs_item_key_to_cpu(leaf, &key, slot);
                        found_start = key.objectid;
                        found_end = found_start + key.offset;
-                       ASSERT(found_start <= start);
+                       if (found_start > start || found_end <= start) {
+                               ret = -ENOENT;
+                               break;
+                       }
                }
 
                if (key.type != BTRFS_RAID_STRIPE_KEY)