From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE0EFC369A4 for ; Tue, 8 Apr 2025 07:33:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BD98D6B000E; Tue, 8 Apr 2025 03:33:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B0D0F6B0012; Tue, 8 Apr 2025 03:33:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 95CFA6B0022; Tue, 8 Apr 2025 03:33:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 78FD16B000E for ; Tue, 8 Apr 2025 03:33:54 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id C095F80723 for ; Tue, 8 Apr 2025 07:33:55 +0000 (UTC) X-FDA: 83310062430.11.3B820A8 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf05.hostedemail.com (Postfix) with ESMTP id CFE73100009 for ; Tue, 8 Apr 2025 07:33:53 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744097634; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZfHw8ibluN4knRSruEFgPtEGzBCta2F09ljYy2qmp1A=; b=eW3DJLpQJpKpf+o/QcDye7g+NiU81/GezOuP3ZiZK0CA0Z+3LQphzCApGJfVIrs2XnzEeG zCdRgn8s6p6SccqODydfuA7sAuH6EU6FuMY4SfDyPC2sDFAY5VALCchFczdhvOIJ9MbPbf 6gANcZEZ7cHzg+jXlHz5UA46rMiU/j8= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf05.hostedemail.com: domain of rakie.kim@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=rakie.kim@sk.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744097634; a=rsa-sha256; cv=none; b=Mln4GppDBLUbhinKWbM6JZzRVrbi+rYrTYppeM6Wepx8l3iYPgo88/1DzWgBzZsh/pD8qD JDPcdVt0noTdexSzN0t4+gA6XgPmgFw3KrCTGUgIahaDvEME/WDF/yP64CMKMraVtxwkXt QGpe++47Xrj457oGhAMzlH7rsnqET0k= X-AuditID: a67dfc5b-681ff7000002311f-f7-67f4d160c5cb From: Rakie Kim To: akpm@linux-foundation.org Cc: gourry@gourry.net, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, dan.j.williams@intel.com, ying.huang@linux.alibaba.com, david@redhat.com, Jonathan.Cameron@huawei.com, osalvador@suse.de, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com Subject: [PATCH v7 1/3] mm/mempolicy: Fix memory leaks in weighted interleave sysfs Date: Tue, 8 Apr 2025 16:32:40 +0900 Message-ID: <20250408073243.488-2-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <20250408073243.488-1-rakie.kim@sk.com> References: <20250408073243.488-1-rakie.kim@sk.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsXC9ZZnkW7CxS/pBhuPWVrMWb+GzWL61AuM Fl/X/2K2+Hn3OLvFqoXX2CyOb53HbnF+1ikWi8u75rBZ3Fvzn9XizLQii9VrMhy4PXbOusvu 0d12md2j5chbVo/Fe14yeWz6NInd48SM3yweOx9aerzfd5XNY/Ppao/Pm+QCuKK4bFJSczLL Uov07RK4Ms6/3MZUsFWu4u+RtcwNjPcluhg5OSQETCQ+Lj3OAmO/WrqPsYuRg4NNQEni2N4Y kLCIgKzE1L/ngUq4OJgFHjNJPHr+ghEkISwQLPHg2m82EJtFQFVi4apF7CA2r4CxxI0dyxgh ZmpKNFy6xwRicwLN/396NwvIfCGgmt7piRDlghInZz4BO4FZQF6ieetsZpBdEgLf2SQ6971g hpgjKXFwxQ2WCYz8s5D0zELSs4CRaRWjUGZeWW5iZo6JXkZlXmaFXnJ+7iZGYPgvq/0TvYPx 04XgQ4wCHIxKPLweRz+nC7EmlhVX5h5ilOBgVhLhfTvxS7oQb0piZVVqUX58UWlOavEhRmkO FiVxXqNv5SlCAumJJanZqakFqUUwWSYOTqkGxpj0PZadc5b/b7oT2Hf3t+hhtZI59z9vy8yQ rTLYblpzota5L0ruxuQAi/nZGUU2c2/yBa+2UhLMels2sTp7X2rD+f9GF7uOmK1SmZheph5n o9zZHOl64wLzp3cGgZXhCwxWi5z943mjW1plksdLBnth47W3IkIPTzXu5H13Zv/TbBaXyxnX lFiKMxINtZiLihMBHMqARXsCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsXCNUNNSzfh4pd0g7sLdCzmrF/DZjF96gVG i6/rfzFb/Lx7nN3i87PXzBarFl5jszi+dR67xeG5J1ktzs86xWJxedccNot7a/6zWpyZVmRx 6NpzVovVazIsfm9bwebA77Fz1l12j+62y+weLUfesnos3vOSyWPTp0nsHidm/Gbx2PnQ0uP9 vqtsHt9ue3gsfvGByWPz6WqPz5vkAniiuGxSUnMyy1KL9O0SuDLOv9zGVLBVruLvkbXMDYz3 JboYOTkkBEwkXi3dx9jFyMHBJqAkcWxvDEhYREBWYurf8yxdjFwczAKPmSQePX/BCJIQFgiW eHDtNxuIzSKgKrFw1SJ2EJtXwFjixo5ljBAzNSUaLt1jArE5geb/P72bBWS+EFBN7/REiHJB iZMzn7CA2MwC8hLNW2czT2DkmYUkNQtJagEj0ypGkcy8stzEzBxTveLsjMq8zAq95PzcTYzA kF9W+2fiDsYvl90PMQpwMCrx8Hoc/ZwuxJpYVlyZe4hRgoNZSYT37cQv6UK8KYmVValF+fFF pTmpxYcYpTlYlMR5vcJTE4QE0hNLUrNTUwtSi2CyTBycUg2MzfXLj3v/Tjp06bDTK51tfEZe erfOTol+s7ho49UHcy6UPC6R987V2xl4WKnR6v6DvZVSCxLrOndsW2LVvuxQklXsseMK062u XLzQz+aez3buqOtV53SmmzPFA7R5vb1ijvgfdF7j13355rYTjMd0d8h45sS+1Li469buHRw2 fM5mc4/e3iY0VYmlOCPRUIu5qDgRAIKE/dZ1AgAA X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: CFE73100009 X-Stat-Signature: mj68kfmuis3d19rkr9rpx9wduegskajh X-HE-Tag: 1744097633-337186 X-HE-Meta: U2FsdGVkX19F8pq973YwDSQumwbSwDnzfmiptxvmuVpz74GH0UhWtK1iY7PsCPka+fQeku26guuV/bIprR4sozJ0nV4jwzq4DSRls3oAx0zlX/gZh2+YzCTBTKknlWFWEx0gYAAJj1pPNi0QiuuK4UPwNTzeRrVuws6W4REv1AXmp4Bgka9HXOjq2E69+Lk6yZMIw/F1ND6894I9i4qxLMIeTG7UcOUv5mA2/ineooA28UUKNcQ5uorZlwYdTwXhBLDypLCzIorsCTyJxErswNTVsOopwcrtqa5Wn4JOY0KpjPOsYpNO6zRdL66bRjrXALuJIPAPFrlYNylbjbyema+6/krLmWtX2P7xDZeWEWpIsD0KbY8WBsMXmr6DOtnTKCuuSQ8yu/LuMmDPwZsd6A/Zg0jGmJWKbhmcMUPHfKFNln7ZI6N2wknSOzuFWV9KlPo5jxgewwfS7991TIOJSW9ZBsgwNwDA7k9M4L3WWH/yrpc8JWtAGffJhFYUGSqCMlRwci+YG839LBwNAm/fUMe8oewE4GFy7tCrwAH/UpTk4c/CBLbPBJTs52F09gwnoVQGVo2HMDh3UBAV51W7BKlapZv4H6EtRKHzgwIcv3MxTkq6wLNTYfLMqm1lP9a2v6Jcb+YQQ7SnZ9thWvzZtOZ04VJz35APBkg+AQMQzl5CutFHiqxsmDCbeaqOBQbCfqESWkOw03TRdL3DIZzm4pmwV4V3zJPiEBfhv4m74bKv2xPYjnM+waNps6TJHGOWxpNZsW7e614rqiDukFMzvQ5fi/RJWwjhaZVPFvI2s3jUqPLmARpPwmFQUVTF3iPwNnw8aPemG87CcuR6cMhh3QdFmCy31mBS5ygGMgOxZxt2MQZhsfFt1v7ZoR3RdssaGBBtrga3ixv1BF6kApLw3gIDJENolihXIrRXeduMn2fH3K4ioLtIrNCSzDppzPxdiJLWQ88vM7zhsig/0mL 7crBEjg5 Y8u/IJiO6hv437cG2RGf66JRZdFAiEVQ04M5YsfcSLQ5KT9ly4ed1J2XuE3OijB/x0FD0xISI5WS9v9EtJPi7xJCCt/w0FI1ilS04vlLsU8rSIiSnAiREBBtMUPH5zR5wWtLNLZILct40yiAkkexeD5oZxh9kH82FibNk X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Memory leaks occurred when removing sysfs attributes for weighted interleave. Improper kobject deallocation led to unreleased memory when initialization failed or when nodes were removed. This patch resolves the issue by replacing unnecessary `kfree()` calls with proper `kobject_del()` and `kobject_put()` sequences, ensuring correct teardown and preventing memory leaks. By explicitly calling `kobject_del()` before `kobject_put()`, the release function is now invoked safely, and internal sysfs state is correctly cleaned up. This guarantees that the memory associated with the kobject is fully released and avoids resource leaks, thereby improving system stability. Fixes: dce41f5ae253 ("mm/mempolicy: implement the sysfs-based weighted_interleave interface") Signed-off-by: Rakie Kim Signed-off-by: Honggyu Kim Signed-off-by: Yunjeong Mun Reviewed-by: Gregory Price --- mm/mempolicy.c | 66 ++++++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/mm/mempolicy.c b/mm/mempolicy.c index b28a1e6ae096..0da102aa1cfc 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -3479,7 +3479,9 @@ static void sysfs_wi_release(struct kobject *wi_kobj) for (i = 0; i < nr_node_ids; i++) sysfs_wi_node_release(node_attrs[i], wi_kobj); - kobject_put(wi_kobj); + + kfree(node_attrs); + kfree(wi_kobj); } static const struct kobj_type wi_ktype = { @@ -3525,27 +3527,37 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) struct kobject *wi_kobj; int nid, err; + node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), + GFP_KERNEL); + if (!node_attrs) + return -ENOMEM; + wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); - if (!wi_kobj) + if (!wi_kobj) { + kfree(node_attrs); return -ENOMEM; + } err = kobject_init_and_add(wi_kobj, &wi_ktype, root_kobj, "weighted_interleave"); - if (err) { - kfree(wi_kobj); - return err; - } + if (err) + goto err_put_kobj; for_each_node_state(nid, N_POSSIBLE) { err = add_weight_node(nid, wi_kobj); if (err) { pr_err("failed to add sysfs [node%d]\n", nid); - break; + goto err_del_kobj; } } - if (err) - kobject_put(wi_kobj); + return 0; + +err_del_kobj: + kobject_del(wi_kobj); +err_put_kobj: + kobject_put(wi_kobj); + return err; } static void mempolicy_kobj_release(struct kobject *kobj) @@ -3559,7 +3571,6 @@ static void mempolicy_kobj_release(struct kobject *kobj) mutex_unlock(&iw_table_lock); synchronize_rcu(); kfree(old); - kfree(node_attrs); kfree(kobj); } @@ -3573,37 +3584,24 @@ static int __init mempolicy_sysfs_init(void) static struct kobject *mempolicy_kobj; mempolicy_kobj = kzalloc(sizeof(*mempolicy_kobj), GFP_KERNEL); - if (!mempolicy_kobj) { - err = -ENOMEM; - goto err_out; - } - - node_attrs = kcalloc(nr_node_ids, sizeof(struct iw_node_attr *), - GFP_KERNEL); - if (!node_attrs) { - err = -ENOMEM; - goto mempol_out; - } + if (!mempolicy_kobj) + return -ENOMEM; err = kobject_init_and_add(mempolicy_kobj, &mempolicy_ktype, mm_kobj, "mempolicy"); if (err) - goto node_out; + goto err_put_kobj; err = add_weighted_interleave_group(mempolicy_kobj); - if (err) { - pr_err("mempolicy sysfs structure failed to initialize\n"); - kobject_put(mempolicy_kobj); - return err; - } + if (err) + goto err_del_kobj; - return err; -node_out: - kfree(node_attrs); -mempol_out: - kfree(mempolicy_kobj); -err_out: - pr_err("failed to add mempolicy kobject to the system\n"); + return 0; + +err_del_kobj: + kobject_del(mempolicy_kobj); +err_put_kobj: + kobject_put(mempolicy_kobj); return err; } -- 2.34.1