grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH V2 1/9] fs/affs:Fix memory leaks in grub_affs_create_node


From: t . feng
Subject: [PATCH V2 1/9] fs/affs:Fix memory leaks in grub_affs_create_node
Date: Tue, 29 Nov 2022 17:14:07 +0800

hashtable is unfreed in case GRUB_AFFS_FILETYPE_HARDLINK if
grub_disk_read failed. Because, if grub_affs_create_node
return not zero, the hashtable should be freed.
By the way hashtable is unused in grub_affs_create_node, so we can
remove the parameter and take care of it in grub_affs_iterate_dir.
(which one allocate the memory and it should be responsible for
releasing)

This is why commit ebf32bc4e9(fs/affs: Fix resource leaks), missing
this memory leak.

Fixs: ebf32bc4e9(fs/affs: Fix resource leaks)

Signed-off-by: "t.feng" <fengtao40@huawei.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
 grub-core/fs/affs.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c
index 631d3d58a..ed606b3f1 100644
--- a/grub-core/fs/affs.c
+++ b/grub-core/fs/affs.c
@@ -321,7 +321,6 @@ static int
 grub_affs_create_node (grub_fshelp_node_t dir,
                       grub_fshelp_iterate_dir_hook_t hook, void *hook_data,
                       struct grub_fshelp_node **node,
-                      grub_uint32_t **hashtable,
                       grub_uint32_t block, const struct grub_affs_file *fil)
 {
   struct grub_affs_data *data = dir->data;
@@ -332,10 +331,7 @@ grub_affs_create_node (grub_fshelp_node_t dir,
 
   *node = grub_zalloc (sizeof (**node));
   if (!*node)
-    {
-      grub_free (*hashtable);
-      return 1;
-    }
+    return 1;
 
   (*node)->data = data;
   (*node)->block = block;
@@ -395,7 +391,6 @@ grub_affs_create_node (grub_fshelp_node_t dir,
 
   if (hook ((char *) name_u8, type, *node, hook_data))
     {
-      grub_free (*hashtable);
       *node = 0;
       return 1;
     }
@@ -460,11 +455,11 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir,
          if (grub_errno)
            goto fail;
 
-         if (grub_affs_create_node (dir, hook, hook_data, &node, &hashtable,
-                                    next, &file))
+         if (grub_affs_create_node (dir, hook, hook_data, &node, next, &file))
            {
              /* Node has been replaced in function. */
              grub_free (orig_node);
+             grub_free (hashtable);
              return 1;
            }
 
-- 
2.27.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]