diff -Naur linux-2.4.10/drivers/net/ppp_generic.c linux-2.4.10-new/drivers/net/ppp_generic.c --- linux-2.4.10/drivers/net/ppp_generic.c Sun Sep 9 19:45:43 2001 +++ linux-2.4.10-new/drivers/net/ppp_generic.c Tue Nov 13 21:48:29 2001 @@ -1470,6 +1470,23 @@ /* check if the packet passes the pass and active filters */ /* the filter instructions are constructed assuming a four-byte PPP header on each packet */ + /* make sure we have room for the following skb_push... */ + if (skb_headroom(skb) < PPP_HDRLEN) { + struct sk_buff *ns; + + ns = alloc_skb(skb->len + PPP_HDRLEN*2,GFP_ATOMIC); + if (ns == 0) { + printk(KERN_DEBUG "PPP: inbound skb not resizeable.\n"); + kfree_skb(skb); + return; + } + skb_reserve(ns, PPP_HDRLEN*2); + memcpy(skb_put(ns, skb->len), skb->data, skb->len); + kfree_skb(skb); + skb = ns; + if (ppp->debug & 1) + printk(KERN_DEBUG "PPP: inbound skb resized.\n"); + } *skb_push(skb, 2) = 0; if (ppp->pass_filter.filter && sk_run_filter(skb, ppp->pass_filter.filter,