fs/ntfs: Fix memory leaks in grub_ntfs_read_symlink()

Fixes: 5773fb641 (Support NTFS reparse points)

Signed-off-by: t.feng <fengtao40@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
t.feng 2022-11-29 17:14:10 +08:00 committed by Daniel Kiper
parent f3fab3ea60
commit a2f7914c3c

View File

@ -654,7 +654,7 @@ grub_ntfs_read_symlink (grub_fshelp_node_t node)
struct grub_ntfs_file *mft;
struct symlink_descriptor symdesc;
grub_err_t err;
grub_uint8_t *buf16;
grub_uint8_t *buf16 = NULL;
char *buf, *end;
grub_size_t len;
grub_uint8_t *pa;
@ -667,20 +667,20 @@ grub_ntfs_read_symlink (grub_fshelp_node_t node)
return NULL;
if (read_mft (mft->data, mft->buf, mft->ino))
return NULL;
goto fail;
pa = locate_attr (&mft->attr, mft, GRUB_NTFS_AT_SYMLINK);
if (pa == NULL)
{
grub_error (GRUB_ERR_BAD_FS, "no $SYMLINK in MFT 0x%llx",
(unsigned long long) mft->ino);
return NULL;
goto fail;
}
err = read_attr (&mft->attr, (grub_uint8_t *) &symdesc, 0,
sizeof (struct symlink_descriptor), 1, 0, 0);
if (err)
return NULL;
goto fail;
switch (grub_cpu_to_le32 (symdesc.type))
{
@ -697,23 +697,22 @@ grub_ntfs_read_symlink (grub_fshelp_node_t node)
default:
grub_error (GRUB_ERR_BAD_FS, "symlink type invalid (%x)",
grub_cpu_to_le32 (symdesc.type));
return NULL;
goto fail;
}
buf16 = grub_malloc (len);
if (!buf16)
return NULL;
goto fail;
err = read_attr (&mft->attr, buf16, off, len, 1, 0, 0);
if (err)
return NULL;
goto fail;
buf = get_utf8 (buf16, len / 2);
if (!buf)
{
grub_free (buf16);
return NULL;
}
goto fail;
grub_free (mft->buf);
grub_free (buf16);
for (end = buf; *end; end++)
@ -728,6 +727,11 @@ grub_ntfs_read_symlink (grub_fshelp_node_t node)
end -= 6;
}
return buf;
fail:
grub_free (mft->buf);
grub_free (buf16);
return NULL;
}
static int