123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- From 156c281a1625dc73fd350530630c6f2d5673d4f6 Mon Sep 17 00:00:00 2001
- From: Darren Kenny <darren.kenny@oracle.com>
- Date: Tue, 8 Dec 2020 10:00:51 +0000
- Subject: [PATCH] disk/ldm: Fix memory leak on uninserted lv references
- 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>
- Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
- ---
- grub-core/disk/ldm.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
- diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c
- index 54713f4..e82e989 100644
- --- a/grub-core/disk/ldm.c
- +++ b/grub-core/disk/ldm.c
- @@ -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))
- --
- 2.14.2
|