From patchwork Thu Dec 8 12:05:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 31290 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp128464wrr; Thu, 8 Dec 2022 03:05:50 -0800 (PST) X-Google-Smtp-Source: AA0mqf5nr/96AaG9i85laVxYJ2jHKCO1zkjLyYpVlfpWhuZeuVjZjkjBGdNwa2fphOGbOpyL/7Gk X-Received: by 2002:a17:90a:4747:b0:219:73d1:6d78 with SMTP id y7-20020a17090a474700b0021973d16d78mr35999928pjg.122.1670497550612; Thu, 08 Dec 2022 03:05:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670497550; cv=none; d=google.com; s=arc-20160816; b=kToeRjdrezjbo6mpNEse2DIEcxKonLYTQs7PTfLuFFvbAkRb2LxtZszvw7AlUcivqi gK9xLGvLycG48J8ys4VkQrDcAhnzsdyshczhL74SUQtd7yGZab62FrVjETnc+xZ+8Ruj Hh2GzK3YlQ3L8l7wjzGUMjjmkTD2D2gPqrVE/BRghiu/0jISdZVfR3YXzhAAcBnaDLjt 2pcPffADEun8rbroT7M4LoL8JcAe9/B8SyGgPhU3D+F4CaXNfaBpqcUKZ8kWylBfIn+K CrpHG+VM4V3H2+yDRmxRu5yKmZ0EVq5xxPOgIxaytWDUogn/Lw1q+0KeAMr0Nq51NtxU bkVA== 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 :message-id:date:subject:cc:to:from; bh=JGvaxnXRwV6ggSGcayDlUAaj40WgHKU0r8vFc3W28mo=; b=kMZh4DXpuSINFhYKxIjxXJTXw6ZLKXH14mgS+ML4LHh89MiQmnrZhgLWMDQdL17XqK pd5POgm7o5RITRmU7h8R3XCQEthxCMFIq1W57Cz8CMA9Wap7KHXcv0ETTd9TiG1SnVGi MIJvUVb8tEflN586DQ1bLNlawixz/j7qanistCB9gBLl3T1h6mzTXDSL4bOGdMgGbChb FrwXWZo8OUhiH9cmZHzRA0f26BYZq+Cyc8NmjRMSXMeWtZXM14x9ySBKbiDTNRdedA/r aVtbQusBYbPf+HFn7SGfDP/l4QaWbarBN1Uxccluk2dekOh+rrHTqILZuDVUcyHEmTpB 3Itw== 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 Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i18-20020a170902e49200b00189eaaea1basi6921283ple.552.2022.12.08.03.05.36; Thu, 08 Dec 2022 03:05:50 -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 S230251AbiLHLDv (ORCPT + 99 others); Thu, 8 Dec 2022 06:03:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35672 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230366AbiLHLDE (ORCPT ); Thu, 8 Dec 2022 06:03:04 -0500 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2A0F060B7F; Thu, 8 Dec 2022 03:01:24 -0800 (PST) Received: from kwepemi500012.china.huawei.com (unknown [172.30.72.54]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4NSWLt6dS9znTmV; Thu, 8 Dec 2022 18:57:10 +0800 (CST) Received: from huawei.com (10.175.101.6) by kwepemi500012.china.huawei.com (7.221.188.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Thu, 8 Dec 2022 19:01:21 +0800 From: Li Zetao To: , , , , CC: , , Subject: [PATCH] net: farsync: Fix kmemleak when rmmods farsync Date: Thu, 8 Dec 2022 20:05:40 +0800 Message-ID: <20221208120540.3758720-1-lizetao1@huawei.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Originating-IP: [10.175.101.6] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To kwepemi500012.china.huawei.com (7.221.188.12) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751643639485415489?= X-GMAIL-MSGID: =?utf-8?q?1751643639485415489?= There are two memory leaks reported by kmemleak: unreferenced object 0xffff888114b20200 (size 128): comm "modprobe", pid 4846, jiffies 4295146524 (age 401.345s) hex dump (first 32 bytes): e0 62 57 09 81 88 ff ff e0 62 57 09 81 88 ff ff .bW......bW..... 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [] kmalloc_trace+0x22/0x60 [] __hw_addr_add_ex+0x198/0x6c0 [] dev_addr_init+0x13d/0x230 [] alloc_netdev_mqs+0x10d/0xe50 [] alloc_hdlcdev+0x2e/0x80 [] fst_add_one+0x601/0x10e0 [farsync] ... unreferenced object 0xffff88810b85b000 (size 1024): comm "modprobe", pid 4846, jiffies 4295146523 (age 401.346s) hex dump (first 32 bytes): 00 00 b0 02 00 c9 ff ff 00 70 0a 00 00 c9 ff ff .........p...... 00 00 00 f2 00 00 00 f3 0a 00 00 00 02 00 00 00 ................ backtrace: [] kmalloc_trace+0x22/0x60 [] fst_add_one+0x154/0x10e0 [farsync] [] local_pci_probe+0xd3/0x170 ... The root cause is traced to the netdev and fst_card_info are not freed when removes one fst in fst_remove_one(), which may trigger oom if repeated insmod and rmmod module. Fix it by adding free_netdev() and kfree() in fst_remove_one(), just as the operations on the error handling path in fst_add_one(). Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Li Zetao Reviewed-by: Jiri Pirko --- drivers/net/wan/farsync.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c index 6a212c085435..5b01642ca44e 100644 --- a/drivers/net/wan/farsync.c +++ b/drivers/net/wan/farsync.c @@ -2545,6 +2545,7 @@ fst_remove_one(struct pci_dev *pdev) struct net_device *dev = port_to_dev(&card->ports[i]); unregister_hdlc_device(dev); + free_netdev(dev); } fst_disable_intr(card); @@ -2564,6 +2565,7 @@ fst_remove_one(struct pci_dev *pdev) card->tx_dma_handle_card); } fst_card_array[card->card_no] = NULL; + kfree(card); } static struct pci_driver fst_driver = {