From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1owLH9-0002Tc-Cf for mharc-grub-devel@gnu.org; Sat, 19 Nov 2022 05:40:43 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1owLH3-0002Rc-UD for grub-devel@gnu.org; Sat, 19 Nov 2022 05:40:37 -0500 Received: from szxga02-in.huawei.com ([45.249.212.188]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1owLH0-0008GS-1f for grub-devel@gnu.org; Sat, 19 Nov 2022 05:40:36 -0500 Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4NDqsW3qn4zHvnQ; Sat, 19 Nov 2022 18:39:43 +0800 (CST) Received: from kwepemm600019.china.huawei.com (7.193.23.64) by dggemv704-chm.china.huawei.com (10.3.19.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sat, 19 Nov 2022 18:40:16 +0800 Received: from huawei.com (10.44.134.232) by kwepemm600019.china.huawei.com (7.193.23.64) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Sat, 19 Nov 2022 18:40:16 +0800 From: t.feng To: CC: , , , Subject: [PATCH 1/9] fs/affs:Fix memory leaks in grub_affs_create_node Date: Sat, 19 Nov 2022 18:39:38 +0800 Message-ID: <20221119103946.657744-2-fengtao40@huawei.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20221119103946.657744-1-fengtao40@huawei.com> References: <20221119103946.657744-1-fengtao40@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.44.134.232] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemm600019.china.huawei.com (7.193.23.64) X-CFilter-Loop: Reflected Received-SPF: pass client-ip=45.249.212.188; envelope-from=fengtao40@huawei.com; helo=szxga02-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Nov 2022 10:40:38 -0000 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" --- 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