Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07f6642e authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by David S. Miller
Browse files

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: default avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bbd8a0d3
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -1185,17 +1185,17 @@ static int __init pppoe_init(void)
{
	int err;

	err = proto_register(&pppoe_sk_proto, 0);
	err = register_pernet_gen_device(&pppoe_net_id, &pppoe_net_ops);
	if (err)
		goto out;

	err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
	err = proto_register(&pppoe_sk_proto, 0);
	if (err)
		goto out_unregister_pppoe_proto;
		goto out_unregister_net_ops;

	err = register_pernet_gen_device(&pppoe_net_id, &pppoe_net_ops);
	err = register_pppox_proto(PX_PROTO_OE, &pppoe_proto);
	if (err)
		goto out_unregister_pppox_proto;
		goto out_unregister_pppoe_proto;

	dev_add_pack(&pppoes_ptype);
	dev_add_pack(&pppoed_ptype);
@@ -1203,22 +1203,22 @@ static int __init pppoe_init(void)

	return 0;

out_unregister_pppox_proto:
	unregister_pppox_proto(PX_PROTO_OE);
out_unregister_pppoe_proto:
	proto_unregister(&pppoe_sk_proto);
out_unregister_net_ops:
	unregister_pernet_gen_device(pppoe_net_id, &pppoe_net_ops);
out:
	return err;
}

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_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);
	unregister_pernet_gen_device(pppoe_net_id, &pppoe_net_ops);
}

module_init(pppoe_init);