mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-27 09:39:22 +00:00
fs/xfs: Fix grub_xfs_iterate_dir() return value in case of failure
Commitef7850c757(fs/xfs: Fix issues found while fuzzing the XFS filesystem) introduced multiple boundary checks in grub_xfs_iterate_dir() but handled the error incorrectly returning error code instead of 0. Fix it. Also change the error message so that it doesn't match the message in grub_xfs_read_inode(). Fixes:ef7850c757(fs/xfs: Fix issues found while fuzzing the XFS filesystem) Signed-off-by: Egor Ignatov <egori@altlinux.org> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
1 parent
1ed2628b56
commit
f209887381
1 file changed
+9
-2
+9
-2
@@ -885,7 +885,11 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
grub_uint8_t c;
|
grub_uint8_t c;
|
||||||
|
|
||||||
if ((inopos + (smallino ? 4 : 8)) > (grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data))
|
if ((inopos + (smallino ? 4 : 8)) > (grub_uint8_t *) dir + grub_xfs_fshelp_size (dir->data))
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a correct XFS inode");
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS inode");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* inopos might be unaligned. */
|
/* inopos might be unaligned. */
|
||||||
if (smallino)
|
if (smallino)
|
||||||
@@ -1004,7 +1008,10 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
|
|
||||||
filename = (char *)(direntry + 1);
|
filename = (char *)(direntry + 1);
|
||||||
if (filename + direntry->len + 1 > (char *) end)
|
if (filename + direntry->len + 1 > (char *) end)
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "invalid XFS directory entry");
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_FS, "invalid XFS directory entry");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* The byte after the filename is for the filetype, padding, or
|
/* The byte after the filename is for the filetype, padding, or
|
||||||
tag, which is not used by GRUB. So it can be overwritten. */
|
tag, which is not used by GRUB. So it can be overwritten. */
|
||||||
|
|||||||
Reference in new issue
Block a user