From: Masahiro Yamada <masahiroy@kernel.org>
To: linux-kernel@vger.kernel.org, Christoph Hellwig <hch@lst.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Robin Murphy <robin.murphy@arm.com>,
iommu@lists.linux.dev
Cc: Guenter Roeck <linux@roeck-us.net>,
linux-kbuild@vger.kernel.org,
Masahiro Yamada <masahiroy@kernel.org>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Ming Lin <ming.l@ssi.samsung.com>,
Sagi Grimberg <sagi@grimberg.me>
Subject: [PATCH] lib/sg_pool: change module_init(sg_pool_init) to subsys_initcall
Date: Fri, 23 Sep 2022 20:38:35 +0900 [thread overview]
Message-ID: <20220923113835.21544-1-masahiroy@kernel.org> (raw)
sg_alloc_table_chained() is called by several drivers, but if it is
called before sg_pool_init(), it results in a NULL pointer dereference
in sg_pool_alloc().
Since commit 9b1d6c895002 ("lib: scatterlist: move SG pool code from
SCSI driver to lib/sg_pool.c"), we rely on module_init(sg_pool_init)
is invoked before other module_init calls but this assumption is
fragile.
I slightly changed the link order while Kbuild refactoring Kbuild,
then uncovered this issue. I should keep the current link order, but
depending on a specific call order among module_init is so fragine.
We usually define the init order by specifying *_initcall correctly,
or delay the driver probing by returning -EPROBE_DEFER.
Change module_initcall() to subsys_initcall(), and also delete the
pointless module_exit() because lib/sg_pool.c is always compiled as
built-in. (CONFIG_SG_POOL is bool)
Link: https://lore.kernel.org/all/20220921043946.GA1355561@roeck-us.net/
Link: https://lore.kernel.org/all/8e70837d-d859-dfb2-bf7f-83f8b31467bc@samsung.com/
Fixes: 9b1d6c895002 ("lib: scatterlist: move SG pool code from SCSI driver to lib/sg_pool.c")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
I am sending this to DMA subsystem because I did not find
a corresponding one for lib/sg_pool.c
lib/sg_pool.c | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/lib/sg_pool.c b/lib/sg_pool.c
index a0b1a52cd6f7..9bfe60ca3f37 100644
--- a/lib/sg_pool.c
+++ b/lib/sg_pool.c
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only
-#include <linux/module.h>
+#include <linux/init.h>
#include <linux/scatterlist.h>
#include <linux/mempool.h>
#include <linux/slab.h>
@@ -177,16 +177,4 @@ static __init int sg_pool_init(void)
return -ENOMEM;
}
-static __exit void sg_pool_exit(void)
-{
- int i;
-
- for (i = 0; i < SG_MEMPOOL_NR; i++) {
- struct sg_pool *sgp = sg_pools + i;
- mempool_destroy(sgp->pool);
- kmem_cache_destroy(sgp->slab);
- }
-}
-
-module_init(sg_pool_init);
-module_exit(sg_pool_exit);
+subsys_initcall(sg_pool_init);
--
2.34.1
next reply other threads:[~2022-09-23 11:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20220923113941eucas1p2e5f7b9bc7316114e69ab6348d40d3b6d@eucas1p2.samsung.com>
2022-09-23 11:38 ` Masahiro Yamada [this message]
2022-09-23 11:43 ` [PATCH] lib/sg_pool: change module_init(sg_pool_init) to subsys_initcall Masahiro Yamada
2022-09-23 12:09 ` Robin Murphy
2022-09-23 12:20 ` Marek Szyprowski
2022-09-23 14:49 ` Christoph Hellwig
2022-09-23 15:28 Guenter Roeck
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=20220923113835.21544-1-masahiroy@kernel.org \
--to=masahiroy@kernel.org \
--cc=hch@lst.de \
--cc=iommu@lists.linux.dev \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=m.szyprowski@samsung.com \
--cc=martin.petersen@oracle.com \
--cc=ming.l@ssi.samsung.com \
--cc=robin.murphy@arm.com \
--cc=sagi@grimberg.me \
/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.