]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
disk/ldm: Fix memory leak on uninserted lv references
authorDarren Kenny <darren.kenny@oracle.com>
Tue, 8 Dec 2020 10:00:51 +0000 (10:00 +0000)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 2 Mar 2021 14:54:16 +0000 (15:54 +0100)
The problem here is that the memory allocated to the variable lv is not
yet inserted into the list that is being processed at the label fail2.

As we can already see at line 342, which correctly frees lv before going
to fail2, we should also be doing that at these earlier jumps to fail2.

Fixes: CID 73824
Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/disk/ldm.c

index c25941ec91b0fd699e8864b677c3f38891f5dd65..4577a51dc5d28b0fd36eda018892cf38359d2f70 100644 (file)
@@ -321,7 +321,10 @@ make_vg (grub_disk_t disk,
          lv->visible = 1;
          lv->segments = grub_zalloc (sizeof (*lv->segments));
          if (!lv->segments)
-           goto fail2;
+           {
+             grub_free (lv);
+             goto fail2;
+           }
          lv->segments->start_extent = 0;
          lv->segments->type = GRUB_DISKFILTER_MIRROR;
          lv->segments->node_count = 0;
@@ -329,7 +332,10 @@ make_vg (grub_disk_t disk,
          lv->segments->nodes = grub_calloc (lv->segments->node_alloc,
                                             sizeof (*lv->segments->nodes));
          if (!lv->segments->nodes)
-           goto fail2;
+           {
+             grub_free (lv);
+             goto fail2;
+           }
          ptr = vblk[i].dynamic;
          if (ptr + *ptr + 1 >= vblk[i].dynamic
              + sizeof (vblk[i].dynamic))