From edb3f9c9b1fd510775332e6788dc1a4d4af68666 Mon Sep 17 00:00:00 2001 From: openEuler Buildteam Date: Sat, 11 May 2024 09:22:03 +0800 Subject: [PATCH] Handle non-continuous data blocks in directory extents --- grub-core/fs/xfs.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c index 1ce5fa4..ed52586 100644 --- a/grub-core/fs/xfs.c +++ b/grub-core/fs/xfs.c @@ -904,6 +904,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, int entries = -1; char *end = dirblock + dirblk_size; + grub_uint32_t magic; numread = grub_xfs_read_file (dir, 0, 0, blk << dirblk_log2, @@ -914,6 +915,16 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, return 0; } + /* + * If this data block isn't actually part of the extent list then + * grub_xfs_read_file() returns a block of zeros. So, if the magic + * number field is all zeros then this block should be skipped. + */ + magic = *(grub_uint32_t *)(void *) dirblock; + if (!magic) + continue; + + /* * Leaf and tail information are only in the data block if the number * of extents is 1. -- 2.33.0