Date: Tue, 11 Aug 2009 17:51:02 GMT From: Ana Kukec <anchie@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 167217 for review Message-ID: <200908111751.n7BHp2Cc058516@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=167217 Change 167217 by anchie@anchie_desnimis on 2009/08/11 17:50:33 Trying to debug kernel panic that appears after the packet is received through icmp6_input() and passed to user land through netinet6/send.c: send_output(). Affected files ... .. //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#13 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#21 edit .. //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#22 edit Differences ... ==== //depot/projects/soc2009/anchie_send/src/sys/net/rtsock.c#13 (text+ko) ==== @@ -1280,7 +1280,9 @@ bcopy(data, mtod(n, void *), data_len); printf("rtsock.c: rt_msg3(), nakon bcopy!\n"); n->m_len = data_len; + printf("Nakon n->m_len = data_len;\n"); m->m_next = n; + printf("Nakon m->m_next = n;\n"); } else if (data_len > 0) { printf("rtsock.c: rt_msg3(), prije bcopy 2!\n"); bcopy(data, mtod(m, u_int8_t *) + m->m_len, data_len); @@ -1289,6 +1291,7 @@ } if (m->m_flags & M_PKTHDR) m->m_pkthdr.len += data_len; + printf("prije mtod!\n"); mtod(m, struct if_announcemsghdr *)->ifan_msglen += data_len; printf("prije rt_dispatch\n"); rt_dispatch(m, NULL); ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#21 (text+ko) ==== @@ -825,37 +825,24 @@ break; case ND_NEIGHBOR_SOLICIT: - printf("icmp6.c, ND_NEIGHBOR_SOLICIT!\n"); - printf("AK: ip6len = %d\n", ip6len); - printf("icmp6len = %d\n", icmp6len); + printf("icmp6.c: ND_NEIGHBOR_SOLICIT!\n"); + printf("icmp6.c: ip6len = %d\n", ip6len); + printf("icmp6.c: icmp6len = %d\n", icmp6len); icmp6_ifstat_inc(ifp, ifs6_in_neighborsolicit); if (code != 0) goto badcode; if (icmp6len < sizeof(struct nd_neighbor_solicit)) goto badlen; ->>>> ORIGINAL //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#18 -==== THEIRS //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#19 -#if 0 -==== YOURS //anchie_desnimis/gsoc2009-send/src/sys/netinet6/icmp6.c - #if 0 if ((n = m_copypacket(m, M_DONTWAIT)) == NULL) { #endif -<<<< if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) { #if 0 if ((n = m_dup(m, M_DONTWAIT)) == NULL) { #endif ->>>> ORIGINAL //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#18 - -==== THEIRS //depot/projects/soc2009/anchie_send/src/sys/netinet6/icmp6.c#19 - if ((n = m_dup(m, M_DONTWAIT)) == NULL) { - -==== YOURS //anchie_desnimis/gsoc2009-send/src/sys/netinet6/icmp6.c -<<<< /* Send incoming SeND/ND packet to user space. */ if (send_input_hook != NULL) { - printf("send_input_hook 1\n"); + printf("icmp6.c: send_input_hook 1\n"); send_input_hook(m, ifp, SND_IN, ip6len); } else { /* give up local */ @@ -865,7 +852,7 @@ goto freeit; } if (send_input_hook != NULL) { - printf("send_input_hook 2\n"); + printf("icmp6.c: send_input_hook 2\n"); send_input_hook(n, ifp, SND_IN, ip6len); return (IPPROTO_DONE); } else ==== //depot/projects/soc2009/anchie_send/src/sys/netinet6/send.c#22 (text+ko) ==== @@ -8,6 +8,8 @@ #include <sys/socket.h> #include <sys/mbuf.h> +#include <net/vnet.h> + #include <netinet/in.h> #include <netinet/ip6.h> #include <netinet/icmp6.h> @@ -26,7 +28,7 @@ struct icmp6_hdr *icmp6; int icmp6len; - printf("send_output\n"); + printf("send.c: send_output()\n"); /* * Receive incoming (SEND-protected) or outgoing traffic @@ -97,6 +99,24 @@ ip6 = mtod(m, struct ip6_hdr *); + struct mbuf *n = m_get(M_NOWAIT, MT_DATA); + if (direction == SND_IN) { + if (msglen > M_TRAILINGSPACE(m)) { + if (n == NULL) { + printf("rtsock.c: rt_msg3(), m_freem!\n"); + panic("n==NULL\n"); + return (1); + } + printf("send.c: bcopy!\n"); + bcopy(ip6, mtod(n, void *), msglen); + printf("send.c: bcopy ok!\n"); + n->m_len = msglen; + printf("send.c: msglen set up: n->m_len = data_len;\n"); + } + + ip6 = mtod(n, struct ip6_hdr *); + } + /* * Send incoming or outgoing traffic to the user space either to be * protected (outgoing) or validated (incoming) according to rfc3971. */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908111751.n7BHp2Cc058516>