|  | *** /sys/netinet/ip_input.c.orig	Thu Oct 24 22:27:27 1996 | 
|  | --- /sys/netinet/ip_input.c	Tue Feb 18 21:18:19 1997 | 
|  | *************** | 
|  | *** 93,98 **** | 
|  | --- 93,102 ---- | 
|  | int	ipqmaxlen = IFQ_MAXLEN; | 
|  | struct	in_ifaddr *in_ifaddr;			/* first inet address */ | 
|  | struct	ifqueue ipintrq; | 
|  | + #if defined(IPFILTER_LKM) || defined(IPFILTER) | 
|  | + int	fr_check __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); | 
|  | + int	(*fr_checkp) __P((struct ip *, int, struct ifnet *, int, struct mbuf **)); | 
|  | + #endif | 
|  |  | 
|  | struct ipstat ipstat; | 
|  | struct ipq ipq; | 
|  | *************** | 
|  | *** 219,226 **** | 
|  | } | 
|  | ip = mtod(m, struct ip *); | 
|  | } | 
|  | ! 	ip->ip_sum = in_cksum(m, hlen); | 
|  | ! 	if (ip->ip_sum) { | 
|  | ipstat.ips_badsum++; | 
|  | goto bad; | 
|  | } | 
|  | --- 223,229 ---- | 
|  | } | 
|  | ip = mtod(m, struct ip *); | 
|  | } | 
|  | ! 	if (in_cksum(m, hlen)) { | 
|  | ipstat.ips_badsum++; | 
|  | goto bad; | 
|  | } | 
|  | *************** | 
|  | *** 267,272 **** | 
|  | --- 270,288 ---- | 
|  | goto next; | 
|  | } | 
|  |  | 
|  | + #if defined(IPFILTER) || defined(IPFILTER_LKM) | 
|  | + 	/* | 
|  | + 	 * Check if we want to allow this packet to be processed. | 
|  | + 	 * Consider it to be bad if not. | 
|  | + 	 */ | 
|  | + 	if (fr_checkp) { | 
|  | + 		struct	mbuf	*m1 = m; | 
|  | + | 
|  | + 		if ((*fr_checkp)(ip, hlen, m->m_pkthdr.rcvif, 0, &m1) || !m1) | 
|  | + 			goto next; | 
|  | + 		ip = mtod(m = m1, struct ip *); | 
|  | + 	} | 
|  | + #endif | 
|  | /* | 
|  | * Process options and, if not destined for us, | 
|  | * ship it on.  ip_dooptions returns 1 when an | 
|  | *************** | 
|  | *** 527,532 **** | 
|  | --- 533,540 ---- | 
|  | * if they are completely covered, dequeue them. | 
|  | */ | 
|  | while (q != (struct ipasfrag *)fp && ip->ip_off + ip->ip_len > q->ip_off) { | 
|  | +             struct mbuf *m0; | 
|  | + | 
|  | i = (ip->ip_off + ip->ip_len) - q->ip_off; | 
|  | if (i < q->ip_len) { | 
|  | q->ip_len -= i; | 
|  | *************** | 
|  | *** 526,534 **** | 
|  | m_adj(dtom(q), i); | 
|  | break; | 
|  | } | 
|  | q = q->ipf_next; | 
|  | - 		m_freem(dtom(q->ipf_prev)); | 
|  | ip_deq(q->ipf_prev); | 
|  | } | 
|  |  | 
|  | insert: | 
|  | --- 542,551 ---- | 
|  | m_adj(dtom(q), i); | 
|  | break; | 
|  | } | 
|  | + 		m0 = dtom(q); | 
|  | q = q->ipf_next; | 
|  | ip_deq(q->ipf_prev); | 
|  | + 		m_freem(m0); | 
|  | } | 
|  |  | 
|  | insert: |