Fix memory leaks in grub_ntfs_read_symlink. Fixes: 5773fb641(Support NTFS reparse points.)
Signed-off-by: "t.feng" <fengta...@huawei.com> --- grub-core/fs/ntfs.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c index 3511e4e2c..eb5170ab7 100644 --- a/grub-core/fs/ntfs.c +++ b/grub-core/fs/ntfs.c @@ -667,20 +667,27 @@ grub_ntfs_read_symlink (grub_fshelp_node_t node) return NULL; if (read_mft (mft->data, mft->buf, mft->ino)) - return NULL; + { + grub_free (mft->buf); + return NULL; + } 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); + grub_free (mft->buf); return NULL; } err = read_attr (&mft->attr, (grub_uint8_t *) &symdesc, 0, sizeof (struct symlink_descriptor), 1, 0, 0); if (err) - return NULL; + { + grub_free (mft->buf); + return NULL; + } switch (grub_cpu_to_le32 (symdesc.type)) { @@ -697,23 +704,34 @@ 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)); + grub_free (mft->buf); return NULL; } buf16 = grub_malloc (len); if (!buf16) - return NULL; + { + grub_free (mft->buf); + return NULL; + } err = read_attr (&mft->attr, buf16, off, len, 1, 0, 0); if (err) - return NULL; + { + grub_free (mft->buf); + grub_free (buf16); + return NULL; + } buf = get_utf8 (buf16, len / 2); if (!buf) { + grub_free (mft->buf); grub_free (buf16); return NULL; } + + grub_free (mft->buf); grub_free (buf16); for (end = buf; *end; end++) -- 2.27.0 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel