Re: [PATCH net] net: pppoe: check register_netdevice_notifier() error in pppoe_init()
Qingfang Deng <[email protected]> Tue, 4 Aug 2026 16:28:43 +0800
| Newsgroups | gmane.linux.network,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
Hi,
On 2026/8/3 16:59, Minhong He wrote:
> pppoe_init() ignores register_netdevice_notifier() errors and always
> returns success after installing packet handlers, which can leave the
> module loaded without its netdev notifier registered.
>
> Check the error and unwind the packet handlers and protocol registration
> on failure.
A patch for the net tree requires a Fixes tag. As the notifier has been
present since day 1 of the Linux git repository, you can use:
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Signed-off-by: Minhong He <[email protected]>
> ---
> drivers/net/ppp/pppoe.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
> index 4a018acb5262..035795b120e0 100644
> --- a/drivers/net/ppp/pppoe.c
> +++ b/drivers/net/ppp/pppoe.c
> @@ -1278,10 +1278,19 @@ static int __init pppoe_init(void)
> dev_add_offload(&pppoe_packet_offload);
> dev_add_pack(&pppoes_ptype);
> dev_add_pack(&pppoed_ptype);
> - register_netdevice_notifier(&pppoe_notifier);
> +
> + err = register_netdevice_notifier(&pppoe_notifier);
> + if (err)
> + goto out_unregister_packs;
You can move the registration above the dev_add_offload(), so that the
unwind path is cleaner.
>
> return 0;
>
> +out_unregister_packs:
> + dev_remove_pack(&pppoed_ptype);
> + dev_remove_pack(&pppoes_ptype);
> + if (IS_ENABLED(CONFIG_INET))
> + dev_remove_offload(&pppoe_packet_offload);
> + unregister_pppox_proto(PX_PROTO_OE);
> out_unregister_pppoe_proto:
> proto_unregister(&pppoe_sk_proto);
> out_unregister_net_ops:
Best regards,
Qingfang