Date: Sat, 10 Aug 1996 11:51:32 +0200 (MET DST) From: J Wunsch <j@uriah.heep.sax.de> To: freebsd-current@FreeBSD.org (FreeBSD-current users), wollman@FreeBSD.org Subject: Crash in rtrequest() Message-ID: <199608100951.LAA00327@uriah.heep.sax.de>
next in thread | raw e-mail | index | archive | help
-current kernel as of about 2 weeks old, dialup PPP session active over tun0, the system crashed at the first use of the line (the panic message noted named_xfer to be the current process). Here's the debugger analysis: uriah # gdb -k kernel /tmp/crash/vmcore.1 IdlePTD 240000 current pcb at 1feb60 panic: from debugger #0 boot (howto=256) at ../../i386/i386/machdep.c:750 750 dumppcb.pcb_cr3 = rcr3(); (kgdb) backtrace [...] #10 0xf01bab61 in calltrap () #11 0xf0143967 in rt_setgate (rt0=0xf0f39800, dst=0xf0f3a730, gate=0xf0e17450) at ../../net/route.c:682 #12 0xf01435be in rtrequest (req=11, dst=0xf0f3a730, gateway=0x0, netmask=0x0, flags=0, ret_nrt=0xefbffe68) at ../../net/route.c:468 #13 0xf0142f21 in rtalloc1 (dst=0xf0f3a730, report=1, ignflags=0) at ../../net/route.c:130 #14 0xf0142e6b in rtalloc (ro=0xf0f3a72c) at ../../net/route.c:98 #15 0xf01490fd in in_pcbladdr () #16 0xf015197e in tcp_connect () #17 0xf0151363 in tcp_usr_connect () #18 0xf012458f in soconnect () #19 0xf01270ef in connect () [...] (kgdb) up 9 #9 0xf01c5853 in trap (frame={tf_es = 16, tf_ds = 16, tf_edi = 0, tf_esi = 0, tf_ebp = -272630356, tf_isp = -272630420, tf_ebx = 131079, tf_edx = 16, tf_ecx = 0, tf_eax = -1073610752, tf_trapno = 12, tf_err = 0, tf_eip = -267111553, tf_cs = 8, tf_eflags = 66182, tf_esp = -252471296, tf_ss = -252471296}) at ../../i386/i386/trap.c:310 310 (void) trap_pfault(&frame, FALSE); (kgdb) frame frame->tf_ebp frame->tf_eip #0 0xf014337f in rtrequest (req=2, dst=0x0, gateway=0x0, netmask=0x0, flags=131079, ret_nrt=0x0) at ../../net/route.c:388 388 if ((rnh = rt_tables[dst->sa_family]) == 0) ^^^ dst is 0 (kgdb) l 383 register struct radix_node_head *rnh; 384 struct ifaddr *ifa; 385 struct sockaddr *ndst; 386 #define senderr(x) { error = x ; goto bad; } 387 388 if ((rnh = rt_tables[dst->sa_family]) == 0) 389 senderr(ESRCH); 390 if (flags & RTF_HOST) 391 netmask = 0; 392 switch (req) { (kgdb) up #1 0xf0143967 in rt_setgate (rt0=0xf0f39800, dst=0xf0f3a730, gate=0xf0e17450) at ../../net/route.c:682 682 rtrequest(RTM_DELETE, (struct sockaddr *)rt_key(rt0), (kgdb) l 677 (bcmp(dst, gate, dst->sa_len) == 0)) { 678 /* 679 * The route might already exist if this is an RTM_CHANGE 680 * or a routing redirect, so try to delete it. 681 */ 682 rtrequest(RTM_DELETE, (struct sockaddr *)rt_key(rt0), 683 rt0->rt_gateway, rt_mask(rt0), rt0->rt_flags, 0); 684 return EADDRNOTAVAIL; 685 } 686 (kgdb) quit uriah # exit exit Here's my suggested fix (workaround?), if nobody objects, i'm going to commit this within some days: Index: net/route.c =================================================================== RCS file: /usr/home/cvs/src/sys/net/route.c,v retrieving revision 1.34 diff -u -u -r1.34 route.c --- route.c 1996/07/10 01:34:35 1.34 +++ route.c 1996/08/10 09:38:06 @@ -385,7 +385,7 @@ struct sockaddr *ndst; #define senderr(x) { error = x ; goto bad; } - if ((rnh = rt_tables[dst->sa_family]) == 0) + if (dst == 0 || (rnh = rt_tables[dst->sa_family]) == 0) senderr(ESRCH); if (flags & RTF_HOST) netmask = 0; -- cheers, J"org joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE Never trust an operating system you don't have sources for. ;-)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199608100951.LAA00327>