1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- From 6becb747027c4f9cdb10f23d6eb24fcc238e8b68 Mon Sep 17 00:00:00 2001
- From: Egor Ignatov <egori@altlinux.org>
- Date: Thu, 23 Jan 2025 20:44:15 +0300
- Subject: [PATCH] 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 <egori@altlinux.org>
- Upstream: https://www.mail-archive.com/grub-devel@gnu.org/msg40098.html
- [Not accepted upstream, but in Debian]
- Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
- ---
- 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 e0daeb45f..28a342996 100644
- --- a/grub-core/fs/xfs.c
- +++ b/grub-core/fs/xfs.c
- @@ -806,7 +806,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;
- }
-
- @@ -818,7 +817,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;
- }
- @@ -858,9 +856,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++)
- @@ -901,6 +903,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;
- @@ -998,6 +1003,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
- --
- 2.50.1
|