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 C8459C36018 for ; Wed, 2 Apr 2025 01:29:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 90015280004; Tue, 1 Apr 2025 21:29:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8AF09280001; Tue, 1 Apr 2025 21:29:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 74F80280004; Tue, 1 Apr 2025 21:29:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 5B649280001 for ; Tue, 1 Apr 2025 21:29:23 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 97C06A9734 for ; Wed, 2 Apr 2025 01:29:23 +0000 (UTC) X-FDA: 83287371006.29.61E3072 Received: from invmail4.hynix.com (exvmail4.skhynix.com [166.125.252.92]) by imf17.hostedemail.com (Postfix) with ESMTP id A11244000C for ; Wed, 2 Apr 2025 01:29:21 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf17.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=1743557362; 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=kmAMx3Zt33Xn45VqgWXChmhfFP/vzhDCP1SUFaGuy+w=; b=TcvQbuC9l7PakU34JE6/dm/xFdWv0kMwInhqXFt48qj6OBHS0OX6RY5g7XgHMF3yWT/a9D dmx7CteLjqOc+d1pM7IOC/LCETs8j48l/TgQIJbRl2RNeO2fDeZBlEaXf0C1oc+WtQDkwA rsIefkWJVHvVjWxBLrNtCp9aVRFQbi4= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf17.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=1743557362; a=rsa-sha256; cv=none; b=qLvGsk4C/mkCCLAiuzRg0RU1RoeI+eHhTV3wBIS1+Lx1dEyP32Z/bX9tMr0IsAkgsu71tV Tat/S/U/rA5rRLfxFXJ9XsS55k/ZShxaJaAXkGs+CSS+dHDTZRSB03YPYSBjRVOpMqAhi9 DPFa/aGFIp0K4ieQdMhGz8Mc8Tc43hc= X-AuditID: a67dfc5b-681ff7000002311f-4c-67ec92ede4e8 From: Rakie Kim To: Dan Williams Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-cxl@vger.kernel.org, joshua.hahnjy@gmail.com, ying.huang@linux.alibaba.com, david@redhat.com, Jonathan.Cameron@huawei.com, kernel_team@skhynix.com, honggyu.kim@sk.com, yunjeong.mun@sk.com, rakie.kim@sk.com, gourry@gourry.net Subject: Re: [PATCH v4 1/3] mm/mempolicy: Fix memory leaks in weighted interleave sysfs Date: Wed, 2 Apr 2025 10:29:03 +0900 Message-ID: <20250402012912.1075-1-rakie.kim@sk.com> X-Mailer: git-send-email 2.48.1.windows.1 In-Reply-To: <67ec58c8c637_1d472949b@dwillia2-xfh.jf.intel.com.notmuch> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrILMWRmVeSWpSXmKPExsXC9ZZnoe7bSW/SDS7stLCYs34Nm8X0qRcY Lb6u/8Vs8fPucXaLVQuvsVkc3zqP3eL8rFMsFpd3zWGzuLfmP6vF6jUZDlweO2fdZffobrvM 7tFy5C2rx+I9L5k8Nn2axO5xYsZvFo+dDy093u+7yubxeZNcAGcUl01Kak5mWWqRvl0CV8aG tcsZC/bIVczoe8XSwHhWoouRk0NCwETi/os7LDD2rW0nmLsYOTjYBJQkju2NAQmLCGhLTJxz ECjMxcEscJ5J4kX3HHaQhLBAuMSD9rNgNouAqsSczQcZQWxeoDlHbt9lg5ipKdFw6R4TiM0p 4C5xZMsbsF1CAjwSrzbsh6oXlDg58wlYnFlAXqJ562ywZRICr9kkZl09AzVIUuLgihssExj5 ZyHpmYWkZwEj0ypGocy8stzEzBwTvYzKvMwKveT83E2MwIBfVvsnegfjpwvBhxgFOBiVeHgb eN+kC7EmlhVX5h5ilOBgVhLhjfj6Ml2INyWxsiq1KD++qDQntfgQozQHi5I4r9G38hQhgfTE ktTs1NSC1CKYLBMHp1QDI2/B8mn28+qnmedNTv+gfVS3qppLarHImxvCrXuvONSHz7JPzTa8 2S93l+Pvt5svJz48uafnc2GkjF7KceOvE66E7CphP8MhktTSdnHqo4MPzpmHMGcuFfk7T0l9 hXhuk5O7yYatBs9S188w6p1UE735x8zTYkI/7/a/4yi22OE18/3Zb2y7fiuxFGckGmoxFxUn AgCx7ATxdAIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrNLMWRmVeSWpSXmKPExsXCNUNNS/ftpDfpBlv26VrMWb+GzWL61AuM Fl/X/2K2+Hn3OLvF52evmS1WLbzGZnF86zx2i8NzT7JanJ91isXi8q45bBb31vxntTh07Tmr xeo1GRa/t61gc+Dz2DnrLrtHd9tldo+WI29ZPRbvecnksenTJHaPEzN+s3jsfGjp8X7fVTaP b7c9PBa/+MDk8XmTXAB3FJdNSmpOZllqkb5dAlfGhrXLGQv2yFXM6HvF0sB4VqKLkZNDQsBE 4ta2E8xdjBwcbAJKEsf2xoCERQS0JSbOOQgU5uJgFjjPJPGiew47SEJYIFziQftZMJtFQFVi zuaDjCA2L9CcI7fvskHM1JRouHSPCcTmFHCXOLLlDQuILSTAI/Fqw36oekGJkzOfgMWZBeQl mrfOZp7AyDMLSWoWktQCRqZVjCKZeWW5iZk5pnrF2RmVeZkVesn5uZsYgUG+rPbPxB2MXy67 H2IU4GBU4uEV6HmTLsSaWFZcmXuIUYKDWUmEN+Lry3Qh3pTEyqrUovz4otKc1OJDjNIcLEri vF7hqQlCAumJJanZqakFqUUwWSYOTqkGRsM2NYZWT5ZF1tzL4x/9lupz5zw2eeKrFOEX5/Of +pUcWfujR2CB/VdV/yfeYUVH3dyYKt7O2/V5ktTfPW8Xrro7RUti9/O7mr9Tt2/dMXOlkeCV Lyult6n8r9C47fDR/cGECL/TB05piklyb5necs/K9ojhF0+OmU9iLIv/XUiYt6LLxE16Bq8S S3FGoqEWc1FxIgBuu/7EbgIAAA== X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: A11244000C X-Stat-Signature: s5aygrdres8t6ao8s3tm1sjo48j8h9o5 X-HE-Tag: 1743557361-699979 X-HE-Meta: U2FsdGVkX19iBOraYTd6DiBI0ivYAjMt3i6j1EoHae1ID5JjCT+OlRCDRfSzbdCNIGHEmogDrefAxeQAG/IdgyTLmturfZGBTdal0O2mm3evptX/lXbYNeADEtHKZ6aNsvwOycNkjvx9cT0SkwDMcWudxrHg5UoraIiYPvnS0BWMkBvBL+xzgJ5Sut5fLxCYlP6X2dGdxtMGkMyEv9xIluOwRP0gGTvnpYoeI/w6rNVJpW9IeYNtWkMdv0C7yhxa3DhgWPYR7LF9A8OxDXqLkQnDhERKzbx+WRo6Py4RxPQT5a/nfxDLijE3GXnWOrYKaMfjZvQUcJQAMlMsdzCrJPysPmbb3mtwUpzaWeTAKGwUFPTwZFCRvmvn0Gu5HKZijKNdGPQqrACw49tDAQRnpfGMvIXY+dtG41m+0IpWmqwAVeO79E2wzAA03FKf966vvsoNg0zDswilhkqAXWfVszIw8JbNtRQPQwafY5heeHCFRcTrsOojMsd1HxPxQNbWheNDVnKt19fc9LdiKFvxboX01zR5DKkITaz7WJNpXYDJ4upw2eENftkuUZVbBhk0sVpvPHlysnRBCUpDXd8BYTj5CHVmHpMscpRPI/vu9dKal4W7cxaKZWGIVtHVmnvXXQqus9Qxw+qXoV/fAdMt5uvIe6iCooXooIWZ09T73nGpMj9HM3Q/cKmAG7Grtb3j4IK3GJA1wsOLvotAoiebvZ2HLRI81fwkH0WDuUbkzjZd9fqhZnrFuve0zcju1YR7B5S+GeQRKKBJWGY9+lf9ZH3DeRMPx3P29xtxT0cVZPLe02pnycFRTKdl+LEifyprJeWnJb8Ex/in1tX0Ny4kmwVR8yMQCQlqe2fyv/RyYG8vUei/9+O1yiVO2/zkbTa2sUIFrMkIkyeZ93l/kNmBFSlVNudp2fbrBG66Tg4xA43IfLcGSOXInkHI3Xh81vhdE7Bf/fRauf7LvVD9cDt 8Zi07FvY A8I6irAVGU+saE6CovE1+3V85EjInzFy6FBqYcF0uqSDse7zlt3VOV3MagUwEIbibshJGdO2pjKWGoBbZ1z3MuCepehz8lNqiLaWs3CnZoiZbOZL3oqtd5UPAnOcrVOm90jy4Fz7a9PtyszQ6xfku5UYnfK8QXus/90eP+gNnsGNJFMPfyKbXaevxWg== 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: On Tue, 1 Apr 2025 14:21:12 -0700 Dan Williams wrote: > Rakie Kim wrote: > > 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 `kobject_put()`, ensuring proper cleanup and preventing > > memory leaks. > > > > By correctly using `kobject_put()`, the release function now > > properly deallocates memory without causing 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 | 61 +++++++++++++++++++++++++------------------------- > > 1 file changed, 31 insertions(+), 30 deletions(-) > > > > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > > index bbaadbeeb291..5950d5d5b85e 100644 > > --- a/mm/mempolicy.c > > +++ b/mm/mempolicy.c > > @@ -3448,7 +3448,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 = { > > @@ -3494,15 +3496,22 @@ static int add_weighted_interleave_group(struct kobject *root_kobj) > > struct kobject *wi_kobj; > > int nid, err; > > > > - wi_kobj = kzalloc(sizeof(struct kobject), GFP_KERNEL); > > - if (!wi_kobj) > > + 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) { > > + err = -ENOMEM; > > + goto node_out; > > + } > > + > > err = kobject_init_and_add(wi_kobj, &wi_ktype, root_kobj, > > "weighted_interleave"); > > It would be nice if this could take advantage of scope-based cleanup to > avoid the new gotos. It would need a new: > > DEFINE_FREE(kobject_put, struct kobject *, if (!IS_ERR_OR_NULL(_T)) kobject_put(_T)) > > ...and a wrapper around kobject_init_and_add() to support auto cleanup: > > struct kobject *kobject_init_and_add_or_errptr(struct kobject *kobj) > { > int err = kobject_init_and_add(kobj...); > > if (err) > return ERR_PTR(err); > return kobj; > } > > With those then you could do: > > struct kobject *wi_kobj __free(kfree) = kzalloc(sizeof(struct kobject), GFP_KERNEL); > struct kobject *kobj __free(kobject_put) = kobject_init_and_add_or_errptr(no_free_ptr(wi_kobj), ...) > > Otherwise, the patch does look good to me as is, but it seems like an > opportunity for further cleanups that might also help other > kobject_init_and_add() code paths. Thank you for your response regarding this patch. I believe that the method you suggested using `DEFINE_FREE` is an optimal solution for addressing the memory release issue related to `kobject`. I also think that similar problems may arise in many other kernel modules that use `kobject`, and therefore, it would be beneficial to address this issue more generally in those modules as well. However, I believe that including such functionality as part of this patch series may not be ideal. Instead, I think it's better to introduce this approach as a separate patch for broader application and review. I will work on creating a follow-up patch based on your suggestion. Once again, thank you for proposing a clean and helpful solution. Rakie