0065-disk-ldm-Fix-memory-leak-on-uninserted-lv-references.patch 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. From 156c281a1625dc73fd350530630c6f2d5673d4f6 Mon Sep 17 00:00:00 2001
  2. From: Darren Kenny <darren.kenny@oracle.com>
  3. Date: Tue, 8 Dec 2020 10:00:51 +0000
  4. Subject: [PATCH] disk/ldm: Fix memory leak on uninserted lv references
  5. The problem here is that the memory allocated to the variable lv is not
  6. yet inserted into the list that is being processed at the label fail2.
  7. As we can already see at line 342, which correctly frees lv before going
  8. to fail2, we should also be doing that at these earlier jumps to fail2.
  9. Fixes: CID 73824
  10. Signed-off-by: Darren Kenny <darren.kenny@oracle.com>
  11. Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
  12. Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
  13. ---
  14. grub-core/disk/ldm.c | 10 ++++++++--
  15. 1 file changed, 8 insertions(+), 2 deletions(-)
  16. diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c
  17. index 54713f4..e82e989 100644
  18. --- a/grub-core/disk/ldm.c
  19. +++ b/grub-core/disk/ldm.c
  20. @@ -321,7 +321,10 @@ make_vg (grub_disk_t disk,
  21. lv->visible = 1;
  22. lv->segments = grub_zalloc (sizeof (*lv->segments));
  23. if (!lv->segments)
  24. - goto fail2;
  25. + {
  26. + grub_free (lv);
  27. + goto fail2;
  28. + }
  29. lv->segments->start_extent = 0;
  30. lv->segments->type = GRUB_DISKFILTER_MIRROR;
  31. lv->segments->node_count = 0;
  32. @@ -329,7 +332,10 @@ make_vg (grub_disk_t disk,
  33. lv->segments->nodes = grub_calloc (lv->segments->node_alloc,
  34. sizeof (*lv->segments->nodes));
  35. if (!lv->segments->nodes)
  36. - goto fail2;
  37. + {
  38. + grub_free (lv);
  39. + goto fail2;
  40. + }
  41. ptr = vblk[i].dynamic;
  42. if (ptr + *ptr + 1 >= vblk[i].dynamic
  43. + sizeof (vblk[i].dynamic))
  44. --
  45. 2.14.2