Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp4303859pxv; Mon, 19 Jul 2021 23:51:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz/Yz6EEicYWiKUKAtbR3hgE3o43R1kxKqDhtH1cr+EWjY9AOMSyZ3UDO4Ntty61vGNvYfo X-Received: by 2002:a05:6402:1801:: with SMTP id g1mr39082618edy.208.1626763897430; Mon, 19 Jul 2021 23:51:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626763897; cv=none; d=google.com; s=arc-20160816; b=GW9lNB6xqnZ60i9xjxNVkWaE7vo3a+WDEFmXqeRIywUGe5xm0a4N4adW7aPoYU6BOA e9RfG9NCOSrMfxD9JN6xB0nqnsKWGnUdSs98qjcTNKjnD6vM1/ZYtQLXxlOfT33T1D/8 /ldUkAoOzY6QE1e4fXilVU2PAu0oRunPM6pT5w2zH8VSEAgzzHdhjZfJ73cR+7E8Z5ND 6gz0sGhrbeHv5tWdYY5r7kokBUggjBlbCO+x2jgy8oQx2M8VmxzzhYW7CADcvKwpQgoc GXFhS6gNcHFzS+tAmP9+qQT+X2SJVlr05Pgij5M3fcbv6sG+U24BUXMThQzC8BXc9LKI cerQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:mime-version :dkim-signature; bh=2gzwOcrNzq5ovIdw97A9Su7K29oDFRX3eXqBoQ79x6w=; b=ONxuToOjDBMLX3bqSUlBStirUTsk9uY1iXb24wnNnoobTS9vOolX2bpU2goWrBwlFW tAA560jRTAcBHutjzjhTPGST3wMyw4m4UDmCMZwPIRXfuise/lkyC8dcrEFIDOLRH9v+ xtVTjDn+cQJXWFHUnFP8B2x3insrjiJ9IivSdMpacchdURK3HJauDEZJ2eGHfxd3z3WB gOAlT+tc8MkEDXg/BxIM6WtzLbFyPEdDXsYCbl387fF9f/ZAceZLiJeYeGkAiQj28VhZ rsDRWEOqWaKeDjb7XSqJ7lUTRovFr3SCa5WEJD3VKH0FiKDCBcuI8nQzbR6B5m2Xd0q2 PqIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=juQi7GMJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gg2si10517338ejb.176.2021.07.19.23.51.14; Mon, 19 Jul 2021 23:51:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=juQi7GMJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239645AbhGTGIK (ORCPT + 99 others); Tue, 20 Jul 2021 02:08:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231891AbhGTGHm (ORCPT ); Tue, 20 Jul 2021 02:07:42 -0400 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2EB3BC061574 for ; Mon, 19 Jul 2021 23:47:53 -0700 (PDT) Received: by mail-ed1-x534.google.com with SMTP id t2so26775362edd.13 for ; Mon, 19 Jul 2021 23:47:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=2gzwOcrNzq5ovIdw97A9Su7K29oDFRX3eXqBoQ79x6w=; b=juQi7GMJ5MXSjzTSCvB5wbrOGuql5fmJ/bgcASd6sQr+iAl7iRhWD9Z/PcsaN3/AZv 3Tp/tKGsNIdwHx1GW+YTAv7PuvlY56HYrCal78wo068WTMKIokFz/w60MoI/efThHefB I1nNVTYnRO+dYE12YDECvgFrM3iRfdPjTxrdRCQclnSFeEjeLeZUepBU+bJMrebLxa30 ZC1Nrp+DWpLu6NuudFk3ghU8FVPDBafzS9VVqELr5aAxJsCElauo2qaUDZDroNM0whz2 mbGoVm2Wb6MlO50oGFSSLfalapRpgFlinleYEwdeyGfyfW1+Cjbj+Og0yaUdeZuxP5Ez avSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=2gzwOcrNzq5ovIdw97A9Su7K29oDFRX3eXqBoQ79x6w=; b=LVzzYGQXFdD4ZRIdSnA9uwJO0W5HBhbBq+7w/PH7VV5ijSoTGhQbc8I3SJAUpPkTtc egsRwsZK2IfwZ8e/CeFNWPadsZ0WHHrL9VS+R/RtiDplCB81jD//AJWdQcd8z8PQlHuF aUK5lflLt8IEIIufblaLPW4bQ7+jr0Au+0Rhab8fixcSOdyjAugC4zC5cTrkLGeqEZ2a A8VGOwdk5Df2P/aR0qLRplpSZmV+SiSD/tWvt1lnJ0FV69Oysrzdkh2Yq0aQXXG/KuvL 7jlYzR37sOHNRg7kdfw8IhCItDwa3fOEqMtqVU+AwP9Bif8kPjh82GyOtC0slf8V6kxw HHjQ== X-Gm-Message-State: AOAM531CJe6dYJBDdqgVZRjdFDNDeSMbC4pdnbvrN4XDB0ZOVVlvJ64I 4oHJNBt375NZL5nOe1hLDRngq+GsV6lqlye0IVU= X-Received: by 2002:a05:6402:4c5:: with SMTP id n5mr38588659edw.322.1626763671622; Mon, 19 Jul 2021 23:47:51 -0700 (PDT) MIME-Version: 1.0 From: Dongliang Mu Date: Tue, 20 Jul 2021 14:47:23 +0800 Message-ID: Subject: Doubts about Patch "ipack/carriers/tpci200: Fix a double free in tpci200_pci_probe" To: lyl2019@mail.ustc.edu.cn, siglesias@igalia.com, jens.taprogge@taprogge.org, Greg KH Cc: industrypack-devel@lists.sourceforge.net, linux-kernel Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all, I have some doubts about the patch - "ipack/carriers/tpci200: Fix a double free in tpci200_pci_probe". > In the out_err_bus_register error branch of tpci200_pci_probe, > tpci200->info->cfg_regs is freed by tpci200_uninstall()-> > tpci200_unregister()->pci_iounmap(..,tpci200->info->cfg_regs) > in the first time. From my code review, although pci_iounmap takes "tpci200->info->cfg_regs" as its 2nd parameter, the implementation of pci_iounmap may not use this parameter. Depending on if CONFIG_PCI defines, the "tpci200->info->cfg_regs" may not be freed. #ifdef CONFIG_PCI /* Destroy a virtual mapping cookie for a PCI BAR (memory or IO) */ struct pci_dev; extern void pci_iounmap(struct pci_dev *dev, void __iomem *); #elif defined(CONFIG_GENERIC_IOMAP) struct pci_dev; static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) { } #endif > But later, iounmap() is called to free tpci200->info->cfg_regs again. Even if CONFIG_PCI is undefined, it is possible that tpci200->info->cfg_regs is not freed at all. Therefore, this patch would cause memory leak. Take a look at the following code: void pci_iounmap(struct pci_dev *dev, void __iomem * addr) { IO_COND(addr, /* nothing */, iounmap(addr)); } #define IO_COND(addr, is_pio, is_mmio) do { \ unsigned long port = (unsigned long __force)addr; \ if (port >= PIO_RESERVED) { \ is_mmio; \ } else if (port > PIO_OFFSET) { \ port &= PIO_MASK; \ is_pio; \ } else \ bad_io_access(port, #is_pio ); \ } while (0) If I make any mistakes, please let me know. -- My best regards to you. No System Is Safe! Dongliang Mu