]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
fs/squash4: Fix memory leaks in grub_squash_iterate_dir()
authort.feng <fengtao40@huawei.com>
Tue, 29 Nov 2022 09:14:14 +0000 (17:14 +0800)
committerDaniel Kiper <daniel.kiper@oracle.com>
Wed, 7 Dec 2022 22:38:26 +0000 (23:38 +0100)
Fixes: 20dd511c8 (Handle "." and ".." on squashfs)
Signed-off-by: t.feng <fengtao40@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/fs/squash4.c

index 02b1f9b6d1012ba57453c8afbdd4ac6b3f13601d..a30e6ebe14a753c6c9c77e49defecc8615bb4dd4 100644 (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_offset);
        if (err)
-         return 0;
+         {
+           grub_free (node);
+           return 0;
+         }
 
        if (hook ("..", GRUB_FSHELP_DIR, node, hook_data))
          return 1;
@@ -600,7 +603,10 @@ grub_squash_iterate_dir (grub_fshelp_node_t dir,
                            grub_le_to_cpu64 (dir->data->sb.diroffset)
                            + chunk, off);
          if (err)
-           return 0;
+           {
+             grub_free (buf);
+             return 0;
+           }
 
          off += grub_le_to_cpu16 (di.namelen) + 1;
          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) ||
              grub_mul (sz, sizeof (dir->stack[0]), &sz) ||
              grub_add (sz, sizeof (*node), &sz))
-           return 0;
+           {
+             grub_free (buf);
+             return 0;
+           }
 
          node = grub_malloc (sz);
          if (! node)
-           return 0;
+           {
+             grub_free (buf);
+             return 0;
+           }
 
          grub_memcpy (node, dir, sz - sizeof(dir->stack[0]));