From: Philipp Stanner <pstanner@redhat.com>
To: Bjorn Helgaas <bhelgaas@google.com>,
Arnd Bergmann <arnd@arndb.de>, Hanjun Guo <guohanjun@huawei.com>,
NeilBrown <neilb@suse.de>,
Kent Overstreet <kent.overstreet@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
Niklas Schnelle <schnelle@linux.ibm.com>,
Uladzislau Koshchanka <koshchanka@gmail.com>,
John Sanpe <sanpeqf@gmail.com>, Dave Jiang <dave.jiang@intel.com>,
Philipp Stanner <pstanner@redhat.com>,
"Masami Hiramatsu (Google)" <mhiramat@kernel.org>,
Kees Cook <keescook@chromium.org>,
David Gow <davidgow@google.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Shuah Khan <skhan@linuxfoundation.org>,
"wuqiang.matt" <wuqiang.matt@bytedance.com>,
Yury Norov <yury.norov@gmail.com>,
Jason Baron <jbaron@akamai.com>,
Andrew Morton <akpm@linux-foundation.org>,
Ben Dooks <ben.dooks@codethink.co.uk>,
dakr@redhat.com
Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arch@vger.kernel.org, stable@vger.kernel.org,
Arnd Bergmann <arnd@kernel.org>
Subject: [PATCH v3 1/5] lib/pci_iomap.c: fix cleanup bugs in pci_iounmap()
Date: Mon, 4 Dec 2023 13:38:28 +0100 [thread overview]
Message-ID: <20231204123834.29247-2-pstanner@redhat.com> (raw)
In-Reply-To: <20231204123834.29247-1-pstanner@redhat.com>
pci_iounmap() in lib/pci_iomap.c is supposed to check whether an address
is within ioport-range IF the config specifies that ioports exist. If
so, the port should be unmapped with ioport_unmap(). If not, it's a
generic MMIO address that has to be passed to iounmap().
The bugs are:
1. ioport_unmap() is missing entirely, so this function will never
actually unmap a port.
2. the #ifdef for the ioport-ranges accidentally also guards
iounmap(), potentially compiling an empty function. This would
cause the mapping to be leaked.
Implement the missing call to ioport_unmap().
Move the guard so that iounmap() will always be part of the function.
CC: <stable@vger.kernel.org> # v5.15+
Fixes: 316e8d79a095 ("pci_iounmap'2: Electric Boogaloo: try to make sense of it all")
Reported-by: Danilo Krummrich <dakr@redhat.com>
Suggested-by: Arnd Bergmann <arnd@kernel.org>
Signed-off-by: Philipp Stanner <pstanner@redhat.com>
---
In case someone wants to look into that and provide patches for kernels
older than v5.15:
Note that this patch only applies to v5.15+ – the leaks, however, are
older. I went through the log briefly and it seems f5810e5c32923 already
contains them in asm-generic/io.h.
---
lib/pci_iomap.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c
index ce39ce9f3526..6e144b017c48 100644
--- a/lib/pci_iomap.c
+++ b/lib/pci_iomap.c
@@ -168,10 +168,12 @@ void pci_iounmap(struct pci_dev *dev, void __iomem *p)
uintptr_t start = (uintptr_t) PCI_IOBASE;
uintptr_t addr = (uintptr_t) p;
- if (addr >= start && addr < start + IO_SPACE_LIMIT)
+ if (addr >= start && addr < start + IO_SPACE_LIMIT) {
+ ioport_unmap(p);
return;
- iounmap(p);
+ }
#endif
+ iounmap(p);
}
EXPORT_SYMBOL(pci_iounmap);
--
2.43.0
next prev parent reply other threads:[~2023-12-04 12:39 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-04 12:38 [PATCH v3 0/5] Regather scattered PCI-Code Philipp Stanner
2023-12-04 12:38 ` Philipp Stanner [this message]
2023-12-04 13:35 ` [PATCH v3 1/5] lib/pci_iomap.c: fix cleanup bugs in pci_iounmap() Arnd Bergmann
2023-12-04 12:38 ` [PATCH v3 2/5] lib: move pci_iomap.c to drivers/pci/ Philipp Stanner
2023-12-04 12:39 ` kernel test robot
2023-12-04 13:37 ` Arnd Bergmann
2023-12-04 12:38 ` [PATCH v3 3/5] lib: move pci-specific devres code " Philipp Stanner
2023-12-04 12:38 ` [PATCH v3 4/5] pci: move devres code from pci.c to devres.c Philipp Stanner
2023-12-04 12:38 ` [PATCH v3 5/5] lib, pci: unify generic pci_iounmap() Philipp Stanner
2023-12-04 13:39 ` Philipp Stanner
2023-12-04 13:50 ` Arnd Bergmann
2023-12-04 14:09 ` Philipp Stanner
2023-12-04 14:29 ` Arnd Bergmann
2023-12-04 13:53 ` Arnd Bergmann
2023-12-05 10:44 ` kernel test robot
2023-12-05 14:34 ` Philipp Stanner
2023-12-05 14:43 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231204123834.29247-2-pstanner@redhat.com \
--to=pstanner@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=ben.dooks@codethink.co.uk \
--cc=bhelgaas@google.com \
--cc=dakr@redhat.com \
--cc=dave.jiang@intel.com \
--cc=davidgow@google.com \
--cc=guohanjun@huawei.com \
--cc=herbert@gondor.apana.org.au \
--cc=jbaron@akamai.com \
--cc=keescook@chromium.org \
--cc=kent.overstreet@gmail.com \
--cc=koshchanka@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=neilb@suse.de \
--cc=sanpeqf@gmail.com \
--cc=schnelle@linux.ibm.com \
--cc=skhan@linuxfoundation.org \
--cc=stable@vger.kernel.org \
--cc=wuqiang.matt@bytedance.com \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.