diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2012-08-13 02:50:55 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-14 16:52:02 -0700 |
commit | aadf31de16a7b2878af00a02e6557df84efa784b (patch) | |
tree | 8ad3aa78fdabdc1c60e5608b342ec1782eb72513 /net/llc/llc_station.c | |
parent | f4f8720febf0d785a054fc09bde5e3ad09728a58 (diff) | |
download | op-kernel-dev-aadf31de16a7b2878af00a02e6557df84efa784b.zip op-kernel-dev-aadf31de16a7b2878af00a02e6557df84efa784b.tar.gz |
llc: Fix races between llc2 handler use and (un)registration
When registering the handlers, any state they rely on must be
completely initialised first. When unregistering, we must wait until
they are definitely no longer running. llc_rcv() must also avoid
reading the handler pointers again after checking for NULL.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/llc/llc_station.c')
-rw-r--r-- | net/llc/llc_station.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/llc/llc_station.c b/net/llc/llc_station.c index bba5184..b2f2bac 100644 --- a/net/llc/llc_station.c +++ b/net/llc/llc_station.c @@ -696,9 +696,9 @@ void __init llc_station_init(void) (unsigned long)&llc_main_station); llc_main_station.ack_timer.expires = jiffies + sysctl_llc_station_ack_timeout; - llc_set_station_handler(llc_station_rcv); llc_main_station.maximum_retry = 1; llc_main_station.state = LLC_STATION_STATE_UP; + llc_set_station_handler(llc_station_rcv); } void llc_station_exit(void) |