Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp2642302pxp; Mon, 7 Mar 2022 21:25:11 -0800 (PST) X-Google-Smtp-Source: ABdhPJxLpR+8cmOsTesrLn50ln1x3VDO6349b2uN0bUjBgjoPox4lcaAgPLfTXoTamtucw51TQvy X-Received: by 2002:a17:902:e74f:b0:151:c20b:5f39 with SMTP id p15-20020a170902e74f00b00151c20b5f39mr15413165plf.43.1646717110929; Mon, 07 Mar 2022 21:25:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646717110; cv=none; d=google.com; s=arc-20160816; b=aG2vMCUKvbUaZifoK6JDEMN72o3+GaFaCsnYawd13bSoEudvBZXnjqKV2pc9aQVMcy QczwaHolE2qw3byMXlumdNORXK9Vlt77bkYND3VjT71y/PtC0vic+Lj3mBZARaoNwV87 IXl7zqLl4HIKgvK5/P/hd35+gXNyM67EONDSR9Ki9S1Wr8XVOtlAm0wce1lnGDqyLEjn 0qVCKyr8ROTHFvJ+K3KIigxcTEUAF+DtR01qNORYtmyRelsNlQm9UqpeYOH0rLRlnqPP 1YFWp+/6fM33xsrxN6Gq91r24tASjX2UQwJzWPNU3PEIS+KLXkn4wac1GW7W5AFhaXJa ApAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=0Akyhz7vH6VKwPZ6SzmwSLGDpir+HYmnf9pS/MOOIxI=; b=Oq1xv4ncSG82t5aaheM4bH1obz5vjm2h0l0sL9pok+1WzImqwllg028huTrfkG8rX4 fIE1hOty6pS8vcvHoqvsXN/jKuiTuhfarasZNi7RR0U/NDpKZ62NN2SnF2fKCH/yX7cG JciQ+8Rx8zEhP+zAGxyy2vYBSLtsE5fztb5rgKl/fpHVrL2Mtl5z5E3Q+Wjz+yxHqcV0 fCcV/buVkOWWy5RKkwivAd41j6cnU/rVnRfmazZ2jX1qgeoUUddJk+gZqWbZCgh5P1w+ mdZZycVJRj8mCBGmpkUG62rk9QA080vkPwn79BBMzMeT3B9Pz0rCB6E8UfmIM9x44h6Q rYlA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d83-20020a621d56000000b004f41abe3900si2459885pfd.273.2022.03.07.21.24.53; Mon, 07 Mar 2022 21:25:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237841AbiCGLXR (ORCPT + 99 others); Mon, 7 Mar 2022 06:23:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237654AbiCGLWl (ORCPT ); Mon, 7 Mar 2022 06:22:41 -0500 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DF8A33379; Mon, 7 Mar 2022 02:48:56 -0800 (PST) Received: from dggpemm500024.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4KBwC93sP0zdfml; Mon, 7 Mar 2022 18:47:33 +0800 (CST) Received: from huawei.com (10.67.175.31) by dggpemm500024.china.huawei.com (7.185.36.203) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Mon, 7 Mar 2022 18:48:54 +0800 From: GUO Zihua To: CC: , , , , , , Subject: [PATCH] tpm: Fix memory leak in tpmm_chip_alloc Date: Mon, 7 Mar 2022 18:48:27 +0800 Message-ID: <20220307104827.40843-1-guozihua@huawei.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.175.31] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpemm500024.china.huawei.com (7.185.36.203) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS, 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: X-Mailing-List: linux-kernel@vger.kernel.org Fix a memory leak in tpmm_chip_alloc. devm_add_action_or_reset would call put_device on error, while tpm->devs is left untouched. Call put_device on tpm->devs as well if devm_add_action_or_reset returns an error. Fixes: fdc915f7f719 ("tpm: expose spaces via a device link /dev/tpmrm") Signed-off-by: GUO Zihua --- drivers/char/tpm/tpm-chip.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index b009e7479b70..0a92334e8c40 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -308,6 +308,12 @@ static int tpm_class_shutdown(struct device *dev) return 0; } +static void tpm_chip_free(struct tpm_chip *chip) +{ + put_device(&chip->devs); + put_device(&chip->dev); +} + /** * tpm_chip_alloc() - allocate a new struct tpm_chip instance * @pdev: device to which the chip is associated @@ -396,8 +402,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev, return chip; out: - put_device(&chip->devs); - put_device(&chip->dev); + tpm_chip_free(chip); return ERR_PTR(rc); } EXPORT_SYMBOL_GPL(tpm_chip_alloc); @@ -420,8 +425,8 @@ struct tpm_chip *tpmm_chip_alloc(struct device *pdev, return chip; rc = devm_add_action_or_reset(pdev, - (void (*)(void *)) put_device, - &chip->dev); + (void (*)(void *)) tpm_chip_free, + chip); if (rc) return ERR_PTR(rc); -- 2.17.1