Date: Tue, 7 Feb 2006 01:34:36 +0300 From: Oleg Bulyzhin <oleg@FreeBSD.org> To: Nate Lawson <nate@root.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: <20060206223436.GB57775@lath.rinet.ru> In-Reply-To: <43E7CBD5.5090203@root.org> References: <200602020958.k129wWtc066930@repoman.freebsd.org> <20060202100637.GB24350@lath.rinet.ru> <20060205235817.GQ5499@cs.rice.edu> <20060206221141.GA57775@lath.rinet.ru> <43E7CBD5.5090203@root.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Feb 06, 2006 at 02:21:09PM -0800, Nate Lawson wrote: > 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). You are right, but i was not going to commit this as is. It's just 'proof of concept' fix. > > > 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? It will not work cause it's not just a trivial sum it's so called "1's complement sum" (refer rfc1071 for details). > > -- > Nate -- Oleg.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060206223436.GB57775>