NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/50629: netbsd-7 kernel panic



On Mar 11,  7:56am, 6bone%6bone.informatik.uni-leipzig.de@localhost (6bone%6bone.informatik.uni-leipzig.de@localhost) wrote:
-- Subject: Re: kern/50629: netbsd-7 kernel panic

| On Wed, 6 Jan 2016, Christos Zoulas wrote:
| 
| > Can you switch to npf? Just curious...
| >
| > christos
| 
| The firewall rules are generated by a external script that uses as output 
| the ipfilter syntax. Rewriting the script is not possible for me.
| 
| The kernel panic is now recurred several times. Can I do something to 
| find the problem?

My theory is that some error handling is wrong since it works most of
the time, let's see if any of these triggers...

christos

Index: ip_fil_netbsd.c
===================================================================
RCS file: /cvsroot/src/sys/external/bsd/ipf/netinet/ip_fil_netbsd.c,v
retrieving revision 1.11
diff -u -u -r1.11 ip_fil_netbsd.c
--- ip_fil_netbsd.c	25 Jul 2014 08:10:39 -0000	1.11
+++ ip_fil_netbsd.c	11 Mar 2016 13:33:29 -0000
@@ -1110,6 +1110,7 @@
 
 	if ((ifp == NULL) && ((fr == NULL) || !(fr->fr_flags & FR_FASTROUTE))) {
 		error = -2;
+printf("%d: %p, %p\n", m0, m);
 		goto bad;
 	}
 
@@ -1143,6 +1144,7 @@
 		else
 #endif
 			error = ENETUNREACH;
+printf("%d: %p, %p\n", m0, m);
 		goto bad;
 	}
 
@@ -1180,6 +1182,7 @@
 			break;
 		case -1 :
 			error = -1;
+printf("%d: %p, %p\n", m0, m);
 			goto bad;
 			break;
 		}
@@ -1223,11 +1226,13 @@
 	ip_off = ntohs(ip->ip_off);
 	if (ip_off & IP_DF) {
 		error = EMSGSIZE;
+printf("%d: %p, %p\n", m0, m);
 		goto bad;
 	}
 	len = (ifp->if_mtu - hlen) &~ 7;
 	if (len < 8) {
 		error = EMSGSIZE;
+printf("%d: %p, %p\n", m0, m);
 		goto bad;
 	}
 
@@ -1250,6 +1255,7 @@
 		if (m == 0) {
 			m = m0;
 			error = ENOBUFS;
+printf("%d: %p, %p\n", m0, m);
 			goto bad;
 		}
 		m->m_data += max_linkhdr;
@@ -1271,6 +1277,7 @@
 		m->m_next = m_copy(m0, off, len);
 		if (m->m_next == 0) {
 			error = ENOBUFS;	/* ??? */
+printf("%d: %p, %p\n", m0, m);
 			goto sendorfree;
 		}
 		m->m_pkthdr.len = mhlen + len;


Home | Main Index | Thread Index | Old Index