public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ppp_generic causes skput:under: w/ pppoatm and vc-encaps
@ 2001-11-13 21:30 Till Immanuel Patzschke
  2001-11-14  5:02 ` David S. Miller
  0 siblings, 1 reply; 7+ messages in thread
From: Till Immanuel Patzschke @ 2001-11-13 21:30 UTC (permalink / raw)
  To: linux-kernel@vger.kernel.org, paulus; +Cc: linux-ppp

[-- Attachment #1: Type: text/plain, Size: 836 bytes --]

Hi,

using pppoatm from Mitchell Blank jr resulted in a BUG "skput:under: ..." when
used w/ vc-encapsulation.  The problem is (at least w/ the iphase driver) that
the skb's headroom is 0 (since the vc-encaps. is nothing but the PPP frame) and
ppp_receive_nonmp_frame unconditionally calls skb_push -> BUG(skput:under: ...")
in the CONFIG_PPP_FILTER section.

I've attached a patch, checking for headroom first, and - if necessary -
reallocating a larger buffer for the skb_push.

Please check and apply - or find a better fix!

Thanks,

Immanuel

--
Till Immanuel Patzschke                 mailto: tip@internetwork-ag.de
interNetwork AG                         Phone:  +49-(0)611-1731-121
Bierstadter Str. 7                      Fax:    +49-(0)611-1731-31
D-65189 Wiesbaden                       Web:    http://www.internetwork-ag.de



[-- Attachment #2: qq2 --]
[-- Type: text/plain, Size: 1092 bytes --]

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,


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2001-11-14 14:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-11-13 21:30 [PATCH] ppp_generic causes skput:under: w/ pppoatm and vc-encaps Till Immanuel Patzschke
2001-11-14  5:02 ` David S. Miller
2001-11-14 11:13   ` [PATCH] ppp_generic causes skput:under: w/ pppoatm andvc-encaps Till Immanuel Patzschke
2001-11-14 11:48     ` David S. Miller
2001-11-14 14:23   ` [PATCH] ppp_generic causes skput:under: w/ pppoatm and vc-encaps Michal Ostrowski
2001-11-14 14:28     ` David S. Miller
2001-11-14 14:41     ` Till Immanuel Patzschke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox