Skip to content

Commit

Permalink
net ax25: Reorder ax25_exit to remove races.
Browse files Browse the repository at this point in the history
While reviewing the sysctl code in ax25 I spotted races in ax25_exit
where it is possible to receive notifications and packets after already
freeing up some of the data structures needed to process those
notifications and updates.

Call unregister_netdevice_notifier early so that the rest of the cleanup
code does not need to deal with network devices.  This takes advantage
of my recent enhancement to unregister_netdevice_notifier to send
unregister notifications of all network devices that are current
registered.

Move the unregistration for packet types, socket types and protocol
types before we cleanup any of the ax25 data structures to remove the
possibilities of other races.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
ebiederm authored and davem330 committed Apr 19, 2012
1 parent 996f739 commit 3adadc0
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions net/ax25/af_ax25.c
Expand Up @@ -2011,16 +2011,17 @@ static void __exit ax25_exit(void)
proc_net_remove(&init_net, "ax25_route");
proc_net_remove(&init_net, "ax25");
proc_net_remove(&init_net, "ax25_calls");
ax25_rt_free();
ax25_uid_free();
ax25_dev_free();

ax25_unregister_sysctl();
unregister_netdevice_notifier(&ax25_dev_notifier);
ax25_unregister_sysctl();

dev_remove_pack(&ax25_packet_type);

sock_unregister(PF_AX25);
proto_unregister(&ax25_proto);

ax25_rt_free();
ax25_uid_free();
ax25_dev_free();
}
module_exit(ax25_exit);

0 comments on commit 3adadc0

Please sign in to comment.