Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 06 Feb 2006 14:21:09 -0800
From:      Nate Lawson <nate@root.org>
To:        Oleg Bulyzhin <oleg@FreeBSD.org>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, Alan Cox <alc@cs.rice.edu>, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/bge if_bge.c
Message-ID:  <43E7CBD5.5090203@root.org>
In-Reply-To: <20060206221141.GA57775@lath.rinet.ru>
References:  <200602020958.k129wWtc066930@repoman.freebsd.org> <20060202100637.GB24350@lath.rinet.ru> <20060205235817.GQ5499@cs.rice.edu> <20060206221141.GA57775@lath.rinet.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
Oleg Bulyzhin wrote:
> On Sun, Feb 05, 2006 at 05:58:17PM -0600, Alan Cox wrote:
>>Unfortunately, it also breaks NFS over UDP.  Let me know if you need
>>details.
>>
>>Alan
> 
> 
> Fix attached. It's not bge problem it's five years old bug in ip_reass().
> 
> Index: ip_input.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v
> retrieving revision 1.314
> diff -u -r1.314 ip_input.c
> --- ip_input.c	2 Feb 2006 03:13:15 -0000	1.314
> +++ ip_input.c	6 Feb 2006 21:44:45 -0000
> @@ -982,10 +982,12 @@
>  	nq = q->m_nextpkt;
>  	q->m_nextpkt = NULL;
>  	for (q = nq; q != NULL; q = nq) {
> +		int sum;

It's not good to declare local variables in the for() context.  It's a 
style(9) bug and also costs an extra instruction or two (to decrement 
the stack pointer twice).

>  		nq = q->m_nextpkt;
>  		q->m_nextpkt = NULL;
>  		m->m_pkthdr.csum_flags &= q->m_pkthdr.csum_flags;
> -		m->m_pkthdr.csum_data += q->m_pkthdr.csum_data;
> +		sum = m->m_pkthdr.csum_data + q->m_pkthdr.csum_data;
> +		m->m_pkthdr.csum_data = (sum & 0xffff) + (sum >> 16);
>  		m_cat(m, q);
>  	}
>  #ifdef MAC

I'm not familiar with this code.  So m->m_pkthdr.csum_data is 32 bits? 
Couldn't the same thing be achieved with making it 16 bits since the add 
will wrap normally?

-- 
Nate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43E7CBD5.5090203>