]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: handle empty eb->folios in num_extent_folios()
authorBoris Burkov <boris@bur.io>
Fri, 25 Apr 2025 19:47:50 +0000 (12:47 -0700)
committerDavid Sterba <dsterba@suse.com>
Fri, 2 May 2025 11:20:08 +0000 (13:20 +0200)
num_extent_folios() unconditionally calls folio_order() on
eb->folios[0]. If that is NULL this will be a segfault. It is reasonable
for it to return 0 as the number of folios in the eb when the first
entry is NULL, so do that instead.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Boris Burkov <boris@bur.io>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.h

index 2e261892c7bc796329377535f6c2a73ad5255730..f5b28b5c4908b2a9d99c1c1e29bd7736e191523f 100644 (file)
@@ -298,6 +298,8 @@ static inline int __pure num_extent_pages(const struct extent_buffer *eb)
  */
 static inline int __pure num_extent_folios(const struct extent_buffer *eb)
 {
+       if (!eb->folios[0])
+               return 0;
        if (folio_order(eb->folios[0]))
                return 1;
        return num_extent_pages(eb);