On Thu, Jan 23, 2025 at 08:44:15PM +0300, Egor Ignatov wrote: > The incorrect inode error from grub_xfs_read_inode did not propagate because
Something is off here. You drop two grub_print_error() calls but mention one after grub_xfs_read_inode() call only. So? > grub_print_error() resetted grub_errno, and grub_xfs_iterate_dir() did not Should not we restore grub_errno after grub_print_error() instead? > handle it at all. > > Signed-off-by: Egor Ignatov <eg...@altlinux.org> > --- > grub-core/fs/xfs.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/grub-core/fs/xfs.c b/grub-core/fs/xfs.c > index ba31559c5c..60aba1dd8d 100644 > --- a/grub-core/fs/xfs.c > +++ b/grub-core/fs/xfs.c > @@ -780,7 +780,6 @@ static int iterate_dir_call_hook (grub_uint64_t ino, > const char *filename, > fdiro = grub_malloc (grub_xfs_fshelp_size(ctx->diro->data) + 1); > if (!fdiro) > { > - grub_print_error (); > return 0; > } > > @@ -792,7 +791,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; > } > @@ -832,9 +830,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) else if (grub_errno != GRUB_ERR_NONE) > + return 0; > > if (iterate_dir_call_hook (parent, "..", &ctx)) > return 1; > + else if (grub_errno) Ditto and below please... > + return 0; > > for (i = 0; i < head->count && > (grub_uint8_t *) de < ((grub_uint8_t *) dir + grub_xfs_fshelp_size > (dir->data)); i++) > @@ -875,6 +877,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; > @@ -982,6 +987,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 Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel