From: Egor Ignatov Date: Thu, 23 Jan 2025 17:44:15 +0000 (+0300) Subject: fs/xfs: Propagate incorrect inode error from grub_xfs_read_inode X-Git-Tag: archive/raspbian/2.14_git20250718.0e36779-2+rpi1^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=7555970ec157d997e50b7295ff1b6a0c488eca6c;p=grub2.git fs/xfs: Propagate incorrect inode error from grub_xfs_read_inode The incorrect inode error from grub_xfs_read_inode did not propagate because grub_print_error() resetted grub_errno, and grub_xfs_iterate_dir() did not handle it at all. Signed-off-by: Egor Ignatov Gbp-Pq: Topic upstream Gbp-Pq: Name fs-xfs-Propagate-incorrect-inode-error-from-grub_xfs_read.patch --- diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c index 1bc4017..0fb7d80 100644 --- a/grub-core/fs/xfs.c +++ b/grub-core/fs/xfs.c @@ -821,7 +821,6 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename, fdiro = grub_malloc (sz); if (!fdiro) { - grub_print_error (); return 0; } @@ -833,7 +832,6 @@ static int iterate_dir_call_hook (grub_uint64_t ino, const char *filename, err = grub_xfs_read_inode (ctx->diro->data, ino, &fdiro->inode); if (err) { - grub_print_error (); grub_free (fdiro); return 0; } @@ -873,9 +871,13 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, /* Synthesize the direntries for `.' and `..'. */ if (iterate_dir_call_hook (diro->ino, ".", &ctx)) return 1; + else if (grub_errno) + return 0; if (iterate_dir_call_hook (parent, "..", &ctx)) return 1; + else if (grub_errno) + return 0; for (i = 0; i < head->count && (grub_uint8_t *) de < ((grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data)); i++) @@ -916,6 +918,9 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, } de->name[de->len] = c; + if (grub_errno) + return 0; + de = grub_xfs_inline_next_de(dir->data, head, de); } break; @@ -1023,6 +1028,11 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir, grub_free (dirblock); return 1; } + else if (grub_errno) + { + grub_free (dirblock); + return 0; + } /* * The expected number of directory entries is only tracked for the