]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:53 +0000 (11:13 +0200)
[ Upstream commit d6fe0c69b3aa5c985380b794bdf8e6e9b1811e60 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/btrfs/extent_io.h

index 6c5328bfabc22a40f47e40c66cd178ce56710020..2aefc64cdd29584b3a685edeb8b5dc1c0eee5f6d 100644 (file)
@@ -297,6 +297,8 @@ static inline int num_extent_pages(const struct extent_buffer *eb)
  */
 static inline int 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);