diff options
author | Kozlov Dmitry <dima@server> | 2010-10-06 17:27:46 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-10-06 17:27:46 +0400 |
commit | fc096cb1079a8ba334fdfd555bf56c8bb6f944bf (patch) | |
tree | 83008cb77e7472d1db26ea95e0dae3e61a8e4357 | |
parent | ba3db9f17477ea4b49c266c5cb50f63f3b074db2 (diff) | |
download | accel-ppp-xebd-fc096cb1079a8ba334fdfd555bf56c8bb6f944bf.tar.gz accel-ppp-xebd-fc096cb1079a8ba334fdfd555bf56c8bb6f944bf.zip |
forgotten rcu_dereference
-rw-r--r-- | kernel/driver/pptp.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/driver/pptp.c b/kernel/driver/pptp.c index 696d407..58eb307 100644 --- a/kernel/driver/pptp.c +++ b/kernel/driver/pptp.c @@ -50,7 +50,7 @@ #include "gre.h" #endif -#define PPTP_DRIVER_VERSION "0.8.5-rc1" +#define PPTP_DRIVER_VERSION "0.8.5" static int log_level=0; static int log_packets=10; @@ -274,7 +274,13 @@ static int lookup_chan_dst(u16 call_id, __be32 d_addr) #endif for(i = find_next_bit(callid_bitmap,MAX_CALLID,1); i < MAX_CALLID; i = find_next_bit(callid_bitmap, MAX_CALLID, i + 1)){ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) + sock = rcu_dereference(callid_sock[i]); +#else sock = callid_sock[i]; +#endif + if (!sock) + continue; opt = &sock->proto.pptp; if (opt->dst_addr.call_id == call_id && opt->dst_addr.sin_addr.s_addr == d_addr) break; } @@ -308,12 +314,12 @@ static int add_chan(struct pppox_sock *sock) else if (test_bit(sock->proto.pptp.src_addr.call_id,callid_bitmap)) goto exit; - set_bit(sock->proto.pptp.src_addr.call_id,callid_bitmap); #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) rcu_assign_pointer(callid_sock[sock->proto.pptp.src_addr.call_id],sock); #else callid_sock[sock->proto.pptp.src_addr.call_id] = sock; #endif + set_bit(sock->proto.pptp.src_addr.call_id,callid_bitmap); res=0; exit: |