netdev
[Top] [All Lists]

Re: [IPX]: Fix checksum computation.

To: Joe Perches <joe@xxxxxxxxxxx>
Subject: Re: [IPX]: Fix checksum computation.
From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxxxxxxxx>
Date: Fri, 31 Oct 2003 19:56:52 -0200
Cc: David S Miller <davem@xxxxxxxxxx>, netdev@xxxxxxxxxxx
In-reply-to: <1067637004.11564.98.camel@localhost.localdomain>
Organization: Conectiva S.A.
References: <200310312006.h9VK62Hh005910@hera.kernel.org> <1067635446.11564.92.camel@localhost.localdomain> <20031031132331.35a9aaca.davem@redhat.com> <1067637004.11564.98.camel@localhost.localdomain>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.5.4i
Em Fri, Oct 31, 2003 at 01:50:04PM -0800, Joe Perches escreveu:
> On Fri, 2003-10-31 at 13:23, David S. Miller wrote:
> > we're as mystified as you are as to why it is that:
> >     if (sum & 0x10000) {
> >             sum++;
> >             sum &= 0xffff;
> >     }
> > works while:
> >     sum = ((sym >> 16) + sum) & 0xffff;
> > does not.  The theory was that it might be some x86 gcc bug,
> > but looking at the assembler diff Arnaldo Carvalho de Melo
> > (the appletalk maintainer) showed me between the before and
> > after:
> >     xorl    %eax, %eax
> > -   decl    %ecx
> >     movb    (%ebx), %al
> > -   incl    %ebx
> >     addl    %eax, %edx
> >     addl    %edx, %edx
> > -   movl    %edx, %eax
> > -   shrl    $16, %eax
> > -   addl    %edx, %eax
> > -   movzwl  %ax,%edx
> > +   testl   $65536, %edx
> > +   je      .L982
> > +   incl    %edx
> > +   andl    $65535, %edx
> > +.L982:
> > +   decl    %ecx
> > +   incl    %ebx
> >     cmpl    $-1, %ecx
> > 
> > we still can't see what's wrong.
> > He did confirm that the change in question makes IPX compute checksums
> > correctly.
> 
> If so, something major is WRONG.

I guess so. If people with an Appletalk testbed could try with and without
the patch, that would be great.

> Code all over the place would need this "fix".

Haven't noticed any other place with this problem, but yes, this is something
that may well happen in other code.

> Was an old NG Sniffer being used to verify this?

Nope, MacOS 7.5.5 and 9 just hang when communicating with the machine without
this patch, gcc 3.3.1/2 was used.

> Sniffer had a long term problem with IPX checksums.

I added back the old atalk_checksum from 2.4 and compared the results, not
all were wrong, but some were.
 
> Has the gcc team been contacted?

Nope, feel free to forward this message.

- Arnaldo

<Prev in Thread] Current Thread [Next in Thread>