net,pppoe: fixup module init/exit subsequent calls
pernet data should allocated first and freed last on module init/exit routines otherwise it's possible to have unserialized calls to packet handling routines. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
bbd8a0d3a3
commit
07f6642ee9
@ -1185,40 +1185,40 @@ static int __init pppoe_init(void)
|
|||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = proto_register(&pppoe_sk_proto, 0);
|
err = register_pernet_gen_device(&pppoe_net_id, &pppoe_net_ops);
|
||||||
if (err)
|
if (err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
err = proto_register(&pppoe_sk_proto, 0);
|
||||||
|
if (err)
|
||||||
|
goto out_unregister_net_ops;
|
||||||
|
|
||||||
err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
|
err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
|
||||||
if (err)
|
if (err)
|
||||||
goto out_unregister_pppoe_proto;
|
goto out_unregister_pppoe_proto;
|
||||||
|
|
||||||
err = register_pernet_gen_device(&pppoe_net_id, &pppoe_net_ops);
|
|
||||||
if (err)
|
|
||||||
goto out_unregister_pppox_proto;
|
|
||||||
|
|
||||||
dev_add_pack(&pppoes_ptype);
|
dev_add_pack(&pppoes_ptype);
|
||||||
dev_add_pack(&pppoed_ptype);
|
dev_add_pack(&pppoed_ptype);
|
||||||
register_netdevice_notifier(&pppoe_notifier);
|
register_netdevice_notifier(&pppoe_notifier);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_unregister_pppox_proto:
|
|
||||||
unregister_pppox_proto(PX_PROTO_OE);
|
|
||||||
out_unregister_pppoe_proto:
|
out_unregister_pppoe_proto:
|
||||||
proto_unregister(&pppoe_sk_proto);
|
proto_unregister(&pppoe_sk_proto);
|
||||||
|
out_unregister_net_ops:
|
||||||
|
unregister_pernet_gen_device(pppoe_net_id, &pppoe_net_ops);
|
||||||
out:
|
out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit pppoe_exit(void)
|
static void __exit pppoe_exit(void)
|
||||||
{
|
{
|
||||||
unregister_pppox_proto(PX_PROTO_OE);
|
|
||||||
dev_remove_pack(&pppoes_ptype);
|
|
||||||
dev_remove_pack(&pppoed_ptype);
|
|
||||||
unregister_netdevice_notifier(&pppoe_notifier);
|
unregister_netdevice_notifier(&pppoe_notifier);
|
||||||
unregister_pernet_gen_device(pppoe_net_id, &pppoe_net_ops);
|
dev_remove_pack(&pppoed_ptype);
|
||||||
|
dev_remove_pack(&pppoes_ptype);
|
||||||
|
unregister_pppox_proto(PX_PROTO_OE);
|
||||||
proto_unregister(&pppoe_sk_proto);
|
proto_unregister(&pppoe_sk_proto);
|
||||||
|
unregister_pernet_gen_device(pppoe_net_id, &pppoe_net_ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(pppoe_init);
|
module_init(pppoe_init);
|
||||||
|
Loading…
Reference in New Issue
Block a user