diff options
author | Kozlov Dmitry <dima@server> | 2010-08-23 09:06:51 +0400 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-08-23 09:06:51 +0400 |
commit | ba3db9f17477ea4b49c266c5cb50f63f3b074db2 (patch) | |
tree | 95ed61c80253c7cfc019bca2f55c28ab6cb481ab | |
parent | 005c1ea31d0e14afedcb750437731214dcb67cd1 (diff) | |
download | accel-ppp-ba3db9f17477ea4b49c266c5cb50f63f3b074db2.tar.gz accel-ppp-ba3db9f17477ea4b49c266c5cb50f63f3b074db2.zip |
fixed double skb_cloned check in pptp_xmit function
fixed memory allocation on 2.4
-rw-r--r-- | kernel/driver/pptp.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/driver/pptp.c b/kernel/driver/pptp.c index 069fd470..696d4075 100644 --- a/kernel/driver/pptp.c +++ b/kernel/driver/pptp.c @@ -405,7 +405,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) if (skb_headroom(skb) < max_headroom || skb_cloned(skb) || skb_shared(skb)) { #else - if (skb_headroom(skb) < max_headroom || skb_cloned(skb) || skb_shared(skb) || + if (skb_headroom(skb) < max_headroom || skb_shared(skb) || (skb_cloned(skb) && !skb_clone_writable(skb,0))) { #endif struct sk_buff *new_skb = skb_realloc_headroom(skb, max_headroom); @@ -1139,8 +1139,14 @@ static int __init pptp_init_module(void) int err=0; printk(KERN_INFO "PPTP driver version " PPTP_DRIVER_VERSION "\n"); +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) callid_sock = __vmalloc((MAX_CALLID + 1) * sizeof(void *), GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL); +#else + callid_sock = __vmalloc((MAX_CALLID + 1) * sizeof(void *), + GFP_KERNEL, PAGE_KERNEL); + memset(callid_sock, 0, (MAX_CALLID + 1) * sizeof(void *)); +#endif if (!callid_sock) { printk(KERN_ERR "PPTP: cann't allocate memory\n"); return -ENOMEM; |