mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-21 06:49:35 +00:00
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:
1 parent
7338cbe91a
commit
98ae234000
1 file changed
+16
-4
+16
-4
@@ -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]));
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user