pkelsey / libuinet

a library version of FreeBSD's TCP/IP stack plus extras
750 stars 198 forks source link

syncache_lookup() is passed in a NULL mbuf pointer #9

Closed erikarn closed 10 years ago

erikarn commented 10 years ago

[adrian@build2 /beards/appliance/snapshots/nightlies/20140625_175135/34051ff/10.0-DEVELOPER/nas_source/blockd]$

0 syncache_lookup (inc=0x7ffffebf5c30, schp=0x7ffffebf5bf8, m=0x0) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c:546

546 /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c: No such file or directory. in /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c [New Thread 802c0c800 (LWP 100264/blockd)] [New Thread 802c0c400 (LWP 100263/blockd)] [New Thread 802c0c000 (LWP 100262/blockd)] [New Thread 802c0bc00 (LWP 100261/blockd)] [New Thread 802c0b800 (LWP 100260/blockd)] [New Thread 802c0b400 (LWP 100259/blockd)] [New Thread 802c0b000 (LWP 100258/blockd)] [New Thread 802c0ac00 (LWP 100257/blockd)] [New Thread 802c09000 (LWP 100256/nm_rx: netmap0)] [New Thread 802c08c00 (LWP 100255/nm_tx: netmap0)] [New Thread 802c08000 (LWP 100222/intr: newborn)] [New Thread 802c07c00 (LWP 100221/intr: newborn)] [New Thread 802c07800 (LWP 100220/intr: newborn)] [New Thread 802c07400 (LWP 100219/thread taskq)] [New Thread 802c07000 (LWP 100218/kqueue taskq)] [New Thread 802c06c00 (LWP 100217/clock)] [New Thread 802c06800 (LWP 100216/intr: newborn)] New Thread 802c06400 (LWP 100203/blockd) bt

0 syncache_lookup (inc=0x7ffffebf5c30, schp=0x7ffffebf5bf8, m=0x0) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c:546

1 0x0000000000480ce7 in syncache_unreach (inc=0x7ffffebf5c30, th=0x807dce03e, m=0x0) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c:841

2 0x000000000047f2eb in tcp_ctlinput (cmd=, sa=, vip=0x807dce02a) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_subr.c:1455

3 0x000000000046e78f in icmp_input (m=, off=20) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/ip_icmp.c:492

4 0x000000000046f4de in ip_input (m=0x8007e3500) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/ip_input.c:774

5 0x0000000000450c2c in netisr_dispatch_src (proto=, source=, m=0x8007e3500) at /usr/nas_source/libuinet/lib/libuinet/../../sys/net/netisr.c:1013

6 0x000000000044f13e in ether_nh_input (m=) at /usr/nas_source/libuinet/lib/libuinet/../../sys/net/if_ethersubr.c:951

7 0x0000000000450c2c in netisr_dispatch_src (proto=, source=, m=0x8007e3500) at /usr/nas_source/libuinet/lib/libuinet/../../sys/net/netisr.c:1013

8 0x000000000041aab1 in if_netmap_receive (arg=0x802efc6c0) at uinet_if_netmap.c:710

9 0x000000000040e1fb in pthread_start_routine (arg=0x806832420) at uinet_host_interface.c:425

10 0x000000080228f4a5 in pthread_create () from /lib/libthr.so.3

11 0x0000000000000000 in ?? ()

Current language: auto; currently minimal (gdb) frame 0

0 syncache_lookup (inc=0x7ffffebf5c30, schp=0x7ffffebf5bf8, m=0x0) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c:546

546 in /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c (gdb) frame 1

1 0x0000000000480ce7 in syncache_unreach (inc=0x7ffffebf5c30, th=0x807dce03e, m=0x0) at /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c:841

841 in /usr/nas_source/libuinet/lib/libuinet/../../sys/netinet/tcp_syncache.c (gdb) print m $1 = (struct mbuf *) 0x0 (gdb)

pkelsey commented 10 years ago

This is due to incomplete ICMP plumbing for promiscuous INET interfaces that are not in fib/cdom 0. I believe 4b5c59b62bc5760c744fc5e4d51f908d13023f67 properly fences this off for now (which is to say, such interfaces will now drop ICMP frames without attempting to process).