[PATCH net] net: pppoe: check register_netdevice_notifier() error in pppoe_init()
Minhong He <[email protected]>
| Newsgroups | org.kernel.vger.netdev,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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. 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; 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: -- 2.25.1