Message ID | 20231110142921.3398072-4-harshit.m.mogalapalli@oracle.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b129:0:b0:403:3b70:6f57 with SMTP id q9csp1298175vqs; Fri, 10 Nov 2023 10:18:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IHkPYph8AZO0Xh7IbR8WtkI+ywqEFbXwsbhx8mTkUcupj81z/1JdO/7HiGcsluuvNmFviUA X-Received: by 2002:a05:6a21:3e14:b0:180:f7a1:cfae with SMTP id bk20-20020a056a213e1400b00180f7a1cfaemr9773881pzc.56.1699640330271; Fri, 10 Nov 2023 10:18:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699640330; cv=none; d=google.com; s=arc-20160816; b=dX1Trc74ooDaC2ZE0CSQou9UcoYXFCBEejxN8hw+rDhkRlZLakZOxTrOTmpDvhi1uG IG7ByNbtRQq7ovsQ4BTLlA9IFFYeUReCkIeMCVw2GkEVAiCFpm3NwLREgQ+soM/Vtncw qAJA3jNfS2yVPgf5bmviU9XmPm+i35nR8FBW3s4xyWXI4MdpzTkVkUJnNBXC+j3eVnOW p7RhMNxSGUpFIUMHOrdDQnIRj4QTXEkFGNRX3enQCPJcjzwX5oIdn0zRF/U8agVcOa3l jNmnBlAkU2QYm02EQuSQ+JbM607VlMd8+tHTv9oPSc8PJR5pz5SDfq5nd+5MfGdgBoNt 33+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=sBjpIK++JXnPTXaWZkhseiMkubPswd2UzXR7UEnOCSk=; fh=hvXYu+39xkzzPxwpNcH/2ax0hAzfL6QZ8c2IOzQ9n/s=; b=vCGJXH9W/nzEukbwZpxOa2NjQg8Z+iwY+A5N92+JJXqKETkUKyYNGIClKGv36Chl4o TxSpDfvXt5sOVH+TeH5WxbptGHPsStpr5kDFv2WFCP6KqNDEMKMpHFwUeOuvgaeAajyX nAC5gcaSH+Hn9t0qmJudmMWQfdzUMfawfzEJB3Mx5V0pGfuA57ZAVTnng/Zkm75/qr4h eqlhwecq8gohpVQq12EkctSgAifxzouA/TMzB15TLg43Qd+kiGZ6dTAsR/7LTU7T7t9H 2PXvkm/s2V3C+PzMSKhFMLlgSKuSzEZzPRDh/8MU1UEoZX39m3EC1So4BP9QMCkvaNNQ toHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2023-03-30 header.b=JjyYfIHX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id u19-20020aa78493000000b006b6119c4695si18074635pfn.380.2023.11.10.10.18.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Nov 2023 10:18:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2023-03-30 header.b=JjyYfIHX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 046B583BE2FF; Fri, 10 Nov 2023 10:18:27 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345479AbjKJSST (ORCPT <rfc822;lhua1029@gmail.com> + 30 others); Fri, 10 Nov 2023 13:18:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345415AbjKJSPu (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 10 Nov 2023 13:15:50 -0500 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85F8638EB6; Fri, 10 Nov 2023 06:29:56 -0800 (PST) Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACERvX026574; Fri, 10 Nov 2023 14:29:45 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2023-03-30; bh=sBjpIK++JXnPTXaWZkhseiMkubPswd2UzXR7UEnOCSk=; b=JjyYfIHX6a4d+TmzxZxcF86krAqa08CaXhnTvC9+E+nTDUNqvb7buX35h3ytVxc1miUB lOON7pvYFzWXcIAhLhu1AwWFtqagTIRAWOTmxFALfWQIgJzDxygLuwmex1jZUjsG3KlJ OqHF05NORfhhu59mFIfCbiXyfjnprDOQVQh3klj+hCYzzRUAg77Zb3r/JiEuOzYJVBdm iZ1BRP9hPNpE5ilEG0BHFBrU3yK9YpbaVvEZn7M88nkXykXY+0HEM1PK8IftJ6tiYDme BcNWEhCjTQ0470KGMApqsCNkJAHHGj5Q33uwp4nBW4Is7TX21ZY++/m88nMmIESSa+8+ 6A== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3u7w23pcyr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 10 Nov 2023 14:29:45 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 3AACpJVB024860; Fri, 10 Nov 2023 14:29:43 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3u9fr6y1hc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 10 Nov 2023 14:29:43 +0000 Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3AAEQwWP000777; Fri, 10 Nov 2023 14:29:43 GMT Received: from ca-dev112.us.oracle.com (ca-dev112.us.oracle.com [10.129.136.47]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTP id 3u9fr6y1bq-4; Fri, 10 Nov 2023 14:29:43 +0000 From: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> To: Jorge Lopez <jorge.lopez2@hp.com>, Hans de Goede <hdegoede@redhat.com>, =?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>, Mark Gross <markgross@kernel.org>, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= <linux@weissschuh.net>, platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Cc: dan.carpenter@linaro.org, kernel-janitors@vger.kernel.org, error27@gmail.com, vegard.nossum@oracle.com, harshit.m.mogalapalli@oracle.com, darren.kenny@oracle.com, kernel test robot <lkp@intel.com> Subject: [PATCH v2 4/4] platform/x86: hp-bioscfg: Fix error handling in hp_add_other_attributes() Date: Fri, 10 Nov 2023 06:29:19 -0800 Message-ID: <20231110142921.3398072-4-harshit.m.mogalapalli@oracle.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231110142921.3398072-1-harshit.m.mogalapalli@oracle.com> References: <20231110142921.3398072-1-harshit.m.mogalapalli@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-10_11,2023-11-09_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 malwarescore=0 phishscore=0 mlxlogscore=999 adultscore=0 mlxscore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311100120 X-Proofpoint-ORIG-GUID: f495O1Enwq1l80b996G1gVIsuaffdqMb X-Proofpoint-GUID: f495O1Enwq1l80b996G1gVIsuaffdqMb X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 10 Nov 2023 10:18:27 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782201692566569482 X-GMAIL-MSGID: 1782202059082602972 |
Series |
[v2,1/4] platform/x86: hp-bioscfg: Remove unused obj in hp_add_other_attributes()
|
|
Commit Message
Harshit Mogalapalli
Nov. 10, 2023, 2:29 p.m. UTC
We have two issues:
1. Memory leak of 'attr_name_kobj' in the error handling path.
2. When kobject_init_and_add() fails on every subsequent error path call
kobject_put() to cleanup.
Both of these issues will be fixed when we add kobject_put() in the goto
label, as kfree() is already part of kobject_put().
Fixes: a34fc329b189 ("platform/x86: hp-bioscfg: bioscfg")
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <error27@gmail.com>
Closes: https://lore.kernel.org/r/202309201412.on0VXJGo-lkp@intel.com/
Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
---
Only compile tested, based on static analysis
v1-> v2: Split this into mutliple patches doing one thing in a patch.
---
drivers/platform/x86/hp/hp-bioscfg/bioscfg.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Comments
Hi Ilpo, On 10/11/23 8:14 pm, Ilpo Järvinen wrote: > On Fri, 10 Nov 2023, Harshit Mogalapalli wrote: > Thanks for the review. > This changelog needs to be rewritten, it contains multiple errors. I > suppose even this patch could be split into two but I'll not be too picky > here if you insist on fixing them in the same patch. > Any thoughts on how to split this into two patches ? I thought of fixing memory leak in separate patch, but that would add more code which should be removed when we move kobject_put() to the end. >> We have two issues: >> 1. Memory leak of 'attr_name_kobj' in the error handling path. > > True, but not specific enough to be useful. > Should I mention something like: 'attr_name_kobj' is allocated using kzalloc, but on all the error paths we don't free it, hence we have a memory leak. >> 2. When kobject_init_and_add() fails on every subsequent error path call >> kobject_put() to cleanup. > > This makes no sense. The only case when there old code had no issue is > "when kobject_init_and_add() fails" but now your wording claims it to be > source of problem. Please rephrase this. > Does this look better: kobject_put() must be called to cleanup memory associated with the object if kobject_init_and_add() returns an error , before this patch only the error path which is immediately next to kobject_init_and_add() has a kobject_put() not any other error paths after it. Fix this by moving the kobject_put() into a goto label "err_other_attr_init:" and use that for error paths after kobject_init_and_add(). >> Both of these issues will be fixed when we add kobject_put() in the goto >> label, as kfree() is already part of kobject_put(). > > No, you're fixing a problem in the patch which is not covered by moving > kobject_put()! Sure, I will try to rephrase it to: 1. Add a new label "unlock_drv_mutex" 2. Add a kfree() in the default statement of switch before going to "unlock_drv_mutex" to free up the memory allocated with kzalloc. 2. Move kobject_put() to goto "err_other_attr_init:" and use this goto label in every error path after kobject_init_and_add(). Please let me know if you have any comments. Thank you very much. Regards, Harshit >
On Sat, 11 Nov 2023, Harshit Mogalapalli wrote: > On 10/11/23 8:14 pm, Ilpo Järvinen wrote: > > On Fri, 10 Nov 2023, Harshit Mogalapalli wrote: > > > > Thanks for the review. > > > This changelog needs to be rewritten, it contains multiple errors. I > > suppose even this patch could be split into two but I'll not be too picky > > here if you insist on fixing them in the same patch. > > > > Any thoughts on how to split this into two patches ? > > I thought of fixing memory leak in separate patch, but that would add more > code which should be removed when we move kobject_put() to the end. I meant that in the first patch you fix add the missing kfree(). Then in the second one, you correct kobject_put() + play with goto labels. There's no extra code that needs to be added and then removed AFAICT. That way, you can make the commit messages more to the point too per patch. > > > We have two issues: > > > 1. Memory leak of 'attr_name_kobj' in the error handling path. > > > > True, but not specific enough to be useful. > > > > Should I mention something like: > > 'attr_name_kobj' is allocated using kzalloc, but on all the error paths we > don't free it, hence we have a memory leak. > > > > 2. When kobject_init_and_add() fails on every subsequent error path call > > > kobject_put() to cleanup. > > > > This makes no sense. The only case when there old code had no issue is > > "when kobject_init_and_add() fails" but now your wording claims it to be > > source of problem. Please rephrase this. > > > > Does this look better: > > kobject_put() must be called to cleanup memory associated with the object if > kobject_init_and_add() returns an error , before this patch only the error > path which is immediately next to kobject_init_and_add() has a kobject_put() > not any other error paths after it. Fix this by moving the kobject_put() into > a goto label "err_other_attr_init:" and use that for error paths after > kobject_init_and_add(). This is easier to understand I think: kobject_put() must be always called after passing the object to kobject_init_and_add(). Only the error path which is immediately next to kobject_init_and_add() calls kobject_put() and not any other error path after it. Fix the error handling by moving the kobject_put() into the goto label err_other_attr_init that is already used by all the error paths after kobject_init_and_add(). > > > Both of these issues will be fixed when we add kobject_put() in the goto > > > label, as kfree() is already part of kobject_put(). > > > > No, you're fixing a problem in the patch which is not covered by moving > > kobject_put()! > > Sure, I will try to rephrase it to: > > 1. Add a new label "unlock_drv_mutex" > 2. Add a kfree() in the default statement of switch before going to > "unlock_drv_mutex" to free up the memory allocated with kzalloc. > 2. Move kobject_put() to goto "err_other_attr_init:" and use this goto label > in every error path after kobject_init_and_add(). > > Please let me know if you have any comments. I think none of this is needed for this patch after you move the other fix into a separate patch. Those two paragraphs I suggest above would explain the problem and solution (no need to have these numbered bullets or anything else besides those 2 paragraphs).
Hi Ilpo, On 13/11/23 7:01 pm, Ilpo Järvinen wrote: > On Sat, 11 Nov 2023, Harshit Mogalapalli wrote: >> On 10/11/23 8:14 pm, Ilpo Järvinen wrote: >>> On Fri, 10 Nov 2023, Harshit Mogalapalli wrote: >>> >> >> Thanks for the review. >> >>> This changelog needs to be rewritten, it contains multiple errors. I >>> suppose even this patch could be split into two but I'll not be too picky >>> here if you insist on fixing them in the same patch. >>> >> >> Any thoughts on how to split this into two patches ? >> >> I thought of fixing memory leak in separate patch, but that would add more >> code which should be removed when we move kobject_put() to the end. > Thanks for the suggestions. > I meant that in the first patch you fix add the missing kfree(). Then in > the second one, you correct kobject_put() + play with goto labels. There's > no extra code that needs to be added and then removed AFAICT. > This is the problem I am trying to explain: Let us say we do memory leak fixing in first patch: diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c index 351d782f3e96..7f29a746210e 100644 --- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c +++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c @@ -612,6 +612,7 @@ static int hp_add_other_attributes(int attr_type) default: pr_err("Error: Unknown attr_type: %d\n", attr_type); ret = -EINVAL; + kfree(attr_name_kobj); goto err_other_attr_init; } @@ -637,8 +638,10 @@ static int hp_add_other_attributes(int attr_type) ret = -EINVAL; } - if (ret) + if (ret) { + kfree(attr_name_kobj); ///// [1] goto err_other_attr_init; + } mutex_unlock(&bioscfg_drv.mutex); return 0; Now when we want to move kobject_put() to goto label in next patch, we should remove the kfree [1], as kobject_put() already does a kfree(). If that sounds okay, I will split this into two patches, (first one, only fixing memory leak; and second one fixing missing kobject_put() calls on error paths) Thanks, Harshit > That way, you can make the commit messages more to the point too per > patch. > >>>> We have two issues: >>>> 1. Memory leak of 'attr_name_kobj' in the error handling path. >>> >>> True, but not specific enough to be useful. >>> >> >> Should I mention something like: >> >> 'attr_name_kobj' is allocated using kzalloc, but on all the error paths we >> don't free it, hence we have a memory leak. >> >>>> 2. When kobject_init_and_add() fails on every subsequent error path call >>>> kobject_put() to cleanup. >>> >>> This makes no sense. The only case when there old code had no issue is >>> "when kobject_init_and_add() fails" but now your wording claims it to be >>> source of problem. Please rephrase this. >>> >> >> Does this look better: >> >> kobject_put() must be called to cleanup memory associated with the object if >> kobject_init_and_add() returns an error , before this patch only the error >> path which is immediately next to kobject_init_and_add() has a kobject_put() >> not any other error paths after it. Fix this by moving the kobject_put() into >> a goto label "err_other_attr_init:" and use that for error paths after >> kobject_init_and_add(). > > This is easier to understand I think: > > kobject_put() must be always called after passing the object to > kobject_init_and_add(). Only the error path which is immediately next > to kobject_init_and_add() calls kobject_put() and not any other error > path after it. > > Fix the error handling by moving the kobject_put() into the goto label > err_other_attr_init that is already used by all the error paths after > kobject_init_and_add(). > >>>> Both of these issues will be fixed when we add kobject_put() in the goto >>>> label, as kfree() is already part of kobject_put(). >>> >>> No, you're fixing a problem in the patch which is not covered by moving >>> kobject_put()! >> >> Sure, I will try to rephrase it to: >> >> 1. Add a new label "unlock_drv_mutex" >> 2. Add a kfree() in the default statement of switch before going to >> "unlock_drv_mutex" to free up the memory allocated with kzalloc. >> 2. Move kobject_put() to goto "err_other_attr_init:" and use this goto label >> in every error path after kobject_init_and_add(). >> >> Please let me know if you have any comments. > > I think none of this is needed for this patch after you move the other fix > into a separate patch. Those two paragraphs I suggest above would explain > the problem and solution (no need to have these numbered bullets or > anything else besides those 2 paragraphs). >
On Mon, 13 Nov 2023, Harshit Mogalapalli wrote: > On 13/11/23 7:01 pm, Ilpo Järvinen wrote: > > On Sat, 11 Nov 2023, Harshit Mogalapalli wrote: > > > On 10/11/23 8:14 pm, Ilpo Järvinen wrote: > > > > On Fri, 10 Nov 2023, Harshit Mogalapalli wrote: > > > > > > > > > > Thanks for the review. > > > > > > > This changelog needs to be rewritten, it contains multiple errors. I > > > > suppose even this patch could be split into two but I'll not be too > > > > picky > > > > here if you insist on fixing them in the same patch. > > > > > > > > > > Any thoughts on how to split this into two patches ? > > > > > > I thought of fixing memory leak in separate patch, but that would add more > > > code which should be removed when we move kobject_put() to the end. > > > Thanks for the suggestions. > > > I meant that in the first patch you fix add the missing kfree(). Then in > > the second one, you correct kobject_put() + play with goto labels. There's > > no extra code that needs to be added and then removed AFAICT. > > > > This is the problem I am trying to explain: > > Let us say we do memory leak fixing in first patch: > > diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c > b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c > index 351d782f3e96..7f29a746210e 100644 > --- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c > +++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c > @@ -612,6 +612,7 @@ static int hp_add_other_attributes(int attr_type) > default: > pr_err("Error: Unknown attr_type: %d\n", attr_type); > ret = -EINVAL; > + kfree(attr_name_kobj); > goto err_other_attr_init; > } > > @@ -637,8 +638,10 @@ static int hp_add_other_attributes(int attr_type) > ret = -EINVAL; > } > > - if (ret) > + if (ret) { > + kfree(attr_name_kobj); ///// [1] This relates to the 2nd problem (missing kobject_put()) and will be covered by the other patch. Don't try to solve this in the first patch at all! There are two indepedent problems: - Before kobject_init_and_add(), kfree() is missing - After kobject_init_and_add(), kobject_put() is missing Solve each in own patch and don't mix the solutions. I know both patches are needed to solve _both_ problems so it's fine to have "still broken" intermediate state as long as you didn't make things worse in the first patch which you didn't. > goto err_other_attr_init; > + } > > mutex_unlock(&bioscfg_drv.mutex); > return 0; > > Now when we want to move kobject_put() to goto label in next patch, > we should remove the kfree [1], as kobject_put() already does a kfree(). > > If that sounds okay, I will split this into two patches, (first one, only > fixing memory leak; and second one fixing missing kobject_put() calls on error > paths)
On Mon, Nov 13, 2023 at 04:15:50PM +0200, Ilpo Järvinen wrote: > This relates to the 2nd problem (missing kobject_put()) and will be > covered by the other patch. Don't try to solve this in the first patch > at all! > > There are two indepedent problems: > - Before kobject_init_and_add(), kfree() is missing > - After kobject_init_and_add(), kobject_put() is missing It's the same problem, though. The attr_name_kobj is leaked on all the error paths. It's just that it needs to be freed different ways depending on where you are. To me splitting it up makes it harder to review and I would not allow it in Staging. You can't fix half the problem. regards, dan carpenter
On Mon, 13 Nov 2023, Dan Carpenter wrote: > On Mon, Nov 13, 2023 at 04:15:50PM +0200, Ilpo Järvinen wrote: > > This relates to the 2nd problem (missing kobject_put()) and will be > > covered by the other patch. Don't try to solve this in the first patch > > at all! > > > > There are two indepedent problems: > > - Before kobject_init_and_add(), kfree() is missing > > - After kobject_init_and_add(), kobject_put() is missing > > It's the same problem, though. The attr_name_kobj is leaked on all the > error paths. I'll have politely disagree beyond that the symptoms are indeed about the same, the problem is clearly different like you immediately admit even yourself by stating this: ;-) > It's just that it needs to be freed different ways depending on where > you are. ...And that's because "it" actually changed in between so the problem became a different one. > To me splitting it up makes it harder to review This has already been proven incorrect in the context of this patch so your argument is rather weak... While reviewing it I clearly noted that the different way of handling things was not properly covered, and that was because what needs to be "freed" was changed by kobject_init_and_add(). If one would have done them separately, each commit message would have been more to the point and it would have been simpler to review which is exactly the opposite to your claim. But I guess we'll end up disagreing on this too :-). > and I would not allow it in Staging. You can't fix half the problem. I don't have that strong opinion on this so Harshit please follow what Dan is suggesting, just fix the changelog to clearly cover both cases.
diff --git a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c index 351d782f3e96..8c9f4f3227fc 100644 --- a/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c +++ b/drivers/platform/x86/hp/hp-bioscfg/bioscfg.c @@ -575,75 +575,77 @@ static void release_attributes_data(void) /** * hp_add_other_attributes() - Initialize HP custom attributes not * reported by BIOS and required to support Secure Platform and Sure * Start. * * @attr_type: Custom HP attribute not reported by BIOS * * Initialize all 2 types of attributes: Platform and Sure Start * object. Populates each attribute types respective properties * under sysfs files. * * Returns zero(0) if successful. Otherwise, a negative value. */ static int hp_add_other_attributes(int attr_type) { struct kobject *attr_name_kobj; int ret; char *attr_name; attr_name_kobj = kzalloc(sizeof(*attr_name_kobj), GFP_KERNEL); if (!attr_name_kobj) return -ENOMEM; mutex_lock(&bioscfg_drv.mutex); /* Check if attribute type is supported */ switch (attr_type) { case HPWMI_SECURE_PLATFORM_TYPE: attr_name_kobj->kset = bioscfg_drv.authentication_dir_kset; attr_name = SPM_STR; break; case HPWMI_SURE_START_TYPE: attr_name_kobj->kset = bioscfg_drv.main_dir_kset; attr_name = SURE_START_STR; break; default: pr_err("Error: Unknown attr_type: %d\n", attr_type); ret = -EINVAL; - goto err_other_attr_init; + kfree(attr_name_kobj); + goto unlock_drv_mutex; } ret = kobject_init_and_add(attr_name_kobj, &attr_name_ktype, NULL, "%s", attr_name); if (ret) { pr_err("Error encountered [%d]\n", ret); - kobject_put(attr_name_kobj); goto err_other_attr_init; } /* Populate attribute data */ switch (attr_type) { case HPWMI_SECURE_PLATFORM_TYPE: ret = hp_populate_secure_platform_data(attr_name_kobj); break; case HPWMI_SURE_START_TYPE: ret = hp_populate_sure_start_data(attr_name_kobj); break; default: ret = -EINVAL; } if (ret) goto err_other_attr_init; mutex_unlock(&bioscfg_drv.mutex); return 0; err_other_attr_init: + kobject_put(attr_name_kobj); +unlock_drv_mutex: mutex_unlock(&bioscfg_drv.mutex); return ret; }