From ba3db9f17477ea4b49c266c5cb50f63f3b074db2 Mon Sep 17 00:00:00 2001 From: Kozlov Dmitry Date: Mon, 23 Aug 2010 09:06:51 +0400 Subject: fixed double skb_cloned check in pptp_xmit function fixed memory allocation on 2.4 --- kernel/driver/pptp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/driver/pptp.c b/kernel/driver/pptp.c index 069fd47..696d407 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; -- cgit v1.2.3