Message ID | 20220606045355.4160711-3-masahiroy@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 4a388f08d8784af48f352193d2b72aaf167a57a1 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: unexport some symbols that are annotated __init | expand |
On Mon, 2022-06-06 at 13:53 +0900, Masahiro Yamada wrote: > EXPORT_SYMBOL and __init is a bad combination because the .init.text > section is freed up after the initialization. Hence, modules cannot > use symbols annotated __init. The access to a freed symbol may end up > with kernel panic. > > modpost used to detect it, but it has been broken for a decade. > > Recently, I fixed modpost so it started to warn it again, then this > showed up in linux-next builds. > > There are two ways to fix it: > > - Remove __init > - Remove EXPORT_SYMBOL > > I chose the latter for this case because the only in-tree call-site, > net/ipv4/xfrm4_policy.c is never compiled as modular. > (CONFIG_XFRM is boolean) > > Fixes: 2f32b51b609f ("xfrm: Introduce xfrm_input_afinfo to access the the callbacks properly") > Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> @Steffen: are you ok if we take this one in the -net tree directly? Otherwise a repost would probably be the better option, with this patch stand-alone targeting the ipsec tree and the other 2 targeting -net. Thanks! Paolo
On Tue, Jun 07, 2022 at 01:18:32PM +0200, Paolo Abeni wrote: > On Mon, 2022-06-06 at 13:53 +0900, Masahiro Yamada wrote: > > EXPORT_SYMBOL and __init is a bad combination because the .init.text > > section is freed up after the initialization. Hence, modules cannot > > use symbols annotated __init. The access to a freed symbol may end up > > with kernel panic. > > > > modpost used to detect it, but it has been broken for a decade. > > > > Recently, I fixed modpost so it started to warn it again, then this > > showed up in linux-next builds. > > > > There are two ways to fix it: > > > > - Remove __init > > - Remove EXPORT_SYMBOL > > > > I chose the latter for this case because the only in-tree call-site, > > net/ipv4/xfrm4_policy.c is never compiled as modular. > > (CONFIG_XFRM is boolean) > > > > Fixes: 2f32b51b609f ("xfrm: Introduce xfrm_input_afinfo to access the the callbacks properly") > > Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > @Steffen: are you ok if we take this one in the -net tree directly? > Otherwise a repost would probably be the better option, with this patch > stand-alone targeting the ipsec tree and the other 2 targeting -net. Yes, just take it. Acked-by: Steffen Klassert <steffen.klassert@secunet.com> Thanks!
diff --git a/net/ipv4/xfrm4_protocol.c b/net/ipv4/xfrm4_protocol.c index 2fe5860c21d6..b146ce88c5d0 100644 --- a/net/ipv4/xfrm4_protocol.c +++ b/net/ipv4/xfrm4_protocol.c @@ -304,4 +304,3 @@ void __init xfrm4_protocol_init(void) { xfrm_input_register_afinfo(&xfrm4_input_afinfo); } -EXPORT_SYMBOL(xfrm4_protocol_init);
EXPORT_SYMBOL and __init is a bad combination because the .init.text section is freed up after the initialization. Hence, modules cannot use symbols annotated __init. The access to a freed symbol may end up with kernel panic. modpost used to detect it, but it has been broken for a decade. Recently, I fixed modpost so it started to warn it again, then this showed up in linux-next builds. There are two ways to fix it: - Remove __init - Remove EXPORT_SYMBOL I chose the latter for this case because the only in-tree call-site, net/ipv4/xfrm4_policy.c is never compiled as modular. (CONFIG_XFRM is boolean) Fixes: 2f32b51b609f ("xfrm: Introduce xfrm_input_afinfo to access the the callbacks properly") Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- net/ipv4/xfrm4_protocol.c | 1 - 1 file changed, 1 deletion(-)