![](https://seccdn.libravatar.org/avatar/0b3123b7d99b8c786120684031ea1a6d.jpg?s=120&d=mm&r=g)
Hallo Karsten, IMHO war es Dein Vorschlag, Oops-Meldungen in die Developer-Liste zu forwarden. Da mir die Adresse dazu fehlt, und Du eh schon fast der richtige Ansprechpartner bist :-), eine BCC an Dich mit der Bitte um die entsprechende Weiterleitung ... Danke. Hallo Liste, Problem: -------- MPPP: Beim Hinzunehmen des Slave-Channels gibt es eine Nullpointer- Dereferenzierung in __skb_dequeue() durch den Aufruf in isdn_net_unreachable(). Erwuenschte Loesungen: ---------------------- a) Fix des Bugs - wozu ich nicht in der Lage bin, da ich mit dem ISDN-Code nur sehr oberflaechlich vertraut bin. b) Empfehlung einer anderen i4k - Variante fuer Kernel 2.0.38, die moeglichst nahe am aktuellen i4k-Entwicklungs- stand ist und dieses Problem nicht aufweist. Folgende Konfiguration: ----------------------- 1) Kernel 2.0.38 2) isdn4k-utils v3.1beta1 3) isdn4linux (i4k) von ftp.suse.com/pub/isdn4linux/v2.0/isdn: lermen users 489404 Oct 18 02:06 isdn-9910180206.tar.gz 4) okapi 0.04-patch fuer i4k von Michael Hipp 5) drivers/isdn/hisax/hisax.h, line 238: #define MAX_HEADER_LEN 9 /* originally 4 */ Letzteres hilft gegen "isdn_ppp_skb_push: under 4 5" und "isdn_ppp_skb_push: under 0 2". Der hier mehrfach gepostete Patch ( z.B. http://www.deja.com/getdoc.xp?AN=511984655&fmt=text ) hilft beim Kernel 2.0.38 nicht, da er noch kein skb_realloc_headroom() kennt. Ohne die Erweiterung der MAX_HEADER_LEN verliert ipppd Pakete. Die Veraenderung ist NICHT ursaechlich fuer den Oops - er tritt auch mit der originalen Laenge von 4 auf. ISDN-Interface: MPPP mit ibod Current setup of interface 'ippp0': Encapsulation: syncppp Slave Interface: ippp1 Master Interface: None Pre-Bound to: Nothing PPP-Bound to: 0 Current setup of interface 'ippp1': Encapsulation: syncppp Slave Interface: None Master Interface: ippp0 Pre-Bound to: Nothing PPP-Bound to: 1 Logfiles und Sourcecode: ------------------------ /var/adm/debug: Nov 11 20:01:40 Challenge kernel: DCONN: 0 Nov 11 20:01:40 Challenge kernel: BCONN: 0 Nov 11 20:01:40 Challenge kernel: isdn_net: ippp0 connected || ....... Nov 11 20:01:41 Challenge ibod[155]: added new link Nov 11 20:01:41 Challenge ipppd[154]: Remote message: Login Succeeded Nov 11 20:01:41 Challenge ipppd[154]: MPPP negotiation, He: Yes We: Yes Nov 11 20:01:41 Challenge ipppd[154]: local IP address 194.64.xxx.xxx Nov 11 20:01:41 Challenge ipppd[154]: remote IP address 194.64.xxx.xxx || ....... Nov 11 20:02:08 Challenge kernel: ippp1: dialstate=1 (isdn_net.c 760) Nov 11 20:02:08 Challenge kernel: ippp1: dialing 0 ............. Nov 11 20:02:08 Challenge kernel: dial: d=0 c=1 Nov 11 20:02:08 Challenge kernel: ippp1: dialstate=4 (isdn_net.c 760) Nov 11 20:02:08 Challenge ibod[155]: added new link Nov 11 20:02:08 Challenge kernel: ippp1: dialstate=4 (isdn_net.c 760) Nov 11 20:02:15 Challenge last message repeated 50 times Nov 11 20:02:15 Challenge kernel: ippp1: dialstate=3 (isdn_net.c 760) Nov 11 20:02:15 Challenge kernel: Nov 11 20:02:15 Challenge kernel: ===> dial timed out <=== Nov 11 20:02:15 Challenge kernel: Nov 11 20:02:15 Challenge kernel: Nov 11 20:02:15 Challenge kernel: isdn_net: ippp1: dial: timed out ----- Nov 11 20:02:15 Challenge kernel: isdn_net_unreachable(): isdn_net.c: 334, dev=00886590, skb=00000000 Nov 11 20:02:15 Challenge kernel: isdn_net_unreachable(): before check for &dev->buffs[i] Nov 11 20:02:15 Challenge kernel: isdn_net_unreachable(): before skb_dequeue(), i=0 Nov 11 20:02:15 Challenge kernel: inline __skb_dequeue(): next == NULL, (/usr/src/linux-2.0.38_VC/include/linux/skbuff.h 302) Nov 11 20:02:15 Challenge kernel: Unable to handle kernel NULL pointer dereference at virtual address c0000000 Nov 11 20:02:15 Challenge kernel: current->tss.cr3 = 00101000, ^Lr3 = 00101000 Nov 11 20:02:15 Challenge kernel: *pde = 00102067 Nov 11 20:02:15 Challenge kernel: *pte = 00000000 Nov 11 20:02:15 Challenge kernel: Oops: 0000 Nov 11 20:02:15 Challenge kernel: CPU: 0 Nov 11 20:02:15 Challenge kernel: EIP: 0010:[<01038c01>] Nov 11 20:02:15 Challenge kernel: EFLAGS: 00010097 Nov 11 20:02:15 Challenge kernel: eax: 0000005f ebx: 0088661c ecx: 00196790 edx: 00b98810 Nov 11 20:02:15 Challenge kernel: esi: 00000000 edi: 00000000 ebp: 00000000 esp: 00194824 Nov 11 20:02:15 Challenge kernel: ds: 0018 es: 0018 fs: 002b gs: 0018 ss: 0018 Nov 11 20:02:15 Challenge kernel: Process swapper (pid: 0, process nr: 0, stackpage=001929e4) Nov 11 20:02:15 Challenge kernel: Stack: 00886590 0009eb1d 010497be 00886414 00000212 01039802 00886590 00000000 Nov 11 20:02:15 Challenge kernel: 01049801 010497e1 00000030 01034380 00000015 001948ec 00194864 00000000 Nov 11 20:02:15 Challenge kernel: 00000000 0000000c 00000001 001948e8 01024557 00000206 00000000 00000246 Nov 11 20:02:15 Challenge kernel: Call Trace: [<010497be>] [<01039802>] [<01049801>] [<010497e1>] [<01034380>] [<01024557>] [ip_rcv+1031/1336] Nov 11 20:02:16 Challenge kerneld: error: exit: Identifier removed Nov 11 20:02:15 Challenge kernel: [<010343d4>] [timer_bh+765/844] [do_bottom_half+59/96] [handle_bottom_half+11/32] [schedule+115/652] [schedule+651/652] [sys_idle+108/112] [system_call+85/128] Nov 11 20:02:15 Challenge kernel: [init+0/624] [scan_bus+752/896] [start_kernel+458/468] Nov 11 20:02:15 Challenge kernel: Code: 8b 37 85 f6 75 17 68 37 01 00 00 68 f2 92 04 01 68 54 93 04 Nov 11 20:02:15 Challenge kernel: Aiee, killing interrupt handler Nov 11 20:02:16 Challenge kernel: DHUP: 1 Nov 11 20:02:16 Challenge kernel: ippp1: remote abort (3) Nov 11 20:02:16 Challenge kernel: idx=1 drv=0 ch=1 Nov 11 20:02:16 Challenge kernel: kfree of non-kmalloced memory: 00194a2c, next= 00000000, order=0 Nov 11 20:02:16 Challenge kernel: kfree of non-kmalloced memory: 00194a1c, next= 00000000, order=0 Nov 11 20:02:16 Challenge kernel: kfree of non-kmalloced memory: 00194f30, next= 00000000, order=0 Nov 11 20:02:16 Challenge kernel: idle task may not sleep Nov 11 20:02:16 Challenge last message repeated 4 times /usr/src/linux/drivers/isdn/isdn_net.c: 305 static void 306 isdn_net_unreachable(struct device *dev, struct sk_buff *skb, || char *reason) 307 { 308 int i; 309 310 if(skb != NULL) { || ..... 327 } 328 else { /* dial not triggered by rawIP packet */ || ..... 332 } 333 334 printk(KERN_DEBUG "isdn_net_unreachable(): %s: %d, dev=%p, || skb=%p\n", __FILE__, __LINE__, dev, skb ); 335 336 337 for(i = 0; i < DEV_NUMBUFFS; i++) { 338 struct sk_buff *skb; 339 340 while(1) { 341 void *p; 342 343 printk(KERN_DEBUG "isdn_net_unreachable(): || before check for &dev->buffs[i]\n"); 344 345 p = &dev->buffs[i]; 346 347 if ( p == NULL ) 348 printk(KERN_ERR "\nisdn_net_unreachable(): || &dev->buffs[i] is NULL !!!\n\n"); 349 350 printk(KERN_DEBUG "isdn_net_unreachable(): || before skb_dequeue(), i=%d\n", i); 351 skb = skb_dequeue(&dev->buffs[i]); || || ==================> OBEN KRACHT ES, die folgende Zeile wird || ==================> nicht mehr erreicht ... || 353 printk(KERN_DEBUG "isdn_net_unreachable(): || after skb_dequeue(), i=%d\n", i); 354 if ( ! skb ) 355 break; 356 357 if(ntohs(skb->protocol) == ETH_P_IP) { /usr/src/linux/include/linux/skbuff.h: 286 extern __inline__ struct sk_buff *__skb_dequeue(struct sk_buff_head *list) 287 { 288 struct sk_buff *next, *prev, *result; 289 290 if (list == NULL) 291 printk(KERN_ERR "inline __skb_dequeue(): list == NULL\n"); 292 293 prev = (struct sk_buff *) list; 294 next = prev->next; 295 296 if (prev == NULL) 297 printk(KERN_ERR "inline __skb_dequeue(): prev == NULL, (%s %d)\n", 298 __FILE__, __LINE__); 299 300 if (next == NULL) 301 printk(KERN_ERR "inline __skb_dequeue(): next == NULL, (%s %d)\n", 302 __FILE__, __LINE__); || ==========> HIER ist next NULL 303 304 result = NULL; 305 if (next != prev) { 306 result = next; 307 next = next->next; || ==========> next ist NULL, prev != NULL, und next->next || ==========> ist die Dereferenzierung des NULLPOINTERS! Oops !!!! 308 309 if (next == NULL) 310 printk(KERN_ERR "inline __skb_dequeue(): next == NULL, (%s %d)\n", 311 __FILE__, __LINE__); 312 313 list->qlen--; 314 next->prev = prev; 315 prev->next = next; 320 result->next = NULL; 321 result->prev = NULL; 322 result->list = NULL; 323 } 324 return result; 325 } Beste Grüße / best regards Joachim Blauth Please note: I try hard to send internet standard compatible emails only, but don't always succeed. I have to use Microsoft software at work. --- Joachim Blauth, VideoCon AG, Munich, Germany Email: j.blauth@videocon.de WWW: http://www.videocon.de Phone: +49 (089) 689593-25 Fax: +49 (089) 689593-68