fs/squash4: Fix memory leaks in grub_squash_iterate_dir()

Fixes: 20dd511c8 (Handle "." and ".." on squashfs)

Signed-off-by: t.feng <fengtao40@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
t.feng authored and Daniel Kiper committed 2022-12-07 23:38:26 +01:00
1 parent 7338cbe91a
commit 98ae234000
1 file changed
+16 -4
+16 -4
View File
@@ -550,7 +550,10 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir,
+ node->stack[node->stsize - 1].ino_chunk, + node->stack[node->stsize - 1].ino_chunk,
node->stack[node->stsize - 1].ino_offset); node->stack[node->stsize - 1].ino_offset);
if (err) if (err)
return 0; {
grub_free (node);
return 0;
}
if (hook ("..", GRUB_FSHELP_DIR, node, hook_data)) if (hook ("..", GRUB_FSHELP_DIR, node, hook_data))
return 1; return 1;
@@ -600,7 +603,10 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir,
grub_le_to_cpu64 (dir->data->sb.diroffset) grub_le_to_cpu64 (dir->data->sb.diroffset)
+ chunk, off); + chunk, off);
if (err) if (err)
return 0; {
grub_free (buf);
return 0;
}
off += grub_le_to_cpu16 (di.namelen) + 1; off += grub_le_to_cpu16 (di.namelen) + 1;
buf[grub_le_to_cpu16 (di.namelen) + 1] = 0; buf[grub_le_to_cpu16 (di.namelen) + 1] = 0;
@@ -612,11 +618,17 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir,
if (grub_add (dir->stsize, 1, &sz) || if (grub_add (dir->stsize, 1, &sz) ||
grub_mul (sz, sizeof (dir->stack[0]), &sz) || grub_mul (sz, sizeof (dir->stack[0]), &sz) ||
grub_add (sz, sizeof (*node), &sz)) grub_add (sz, sizeof (*node), &sz))
return 0; {
grub_free (buf);
return 0;
}
node = grub_malloc (sz); node = grub_malloc (sz);
if (! node) if (! node)
return 0; {
grub_free (buf);
return 0;
}
grub_memcpy (node, dir, sz - sizeof(dir->stack[0])); grub_memcpy (node, dir, sz - sizeof(dir->stack[0]));