An egcs optimizer bug caused incorrect tcp checksum recalculation in libalias
for the rewritten PORT command packet and the server subsequently discard the
packet.

The following piece of C code (from TcpChecksum() in alias_util.c)

        u_short *ptr;
        int sum, oddbyte;

        oddbyte = 0; 
        *((u_char *) &oddbyte) = *(u_char *) ptr;
        sum += oddbyte;

is compiled into (%esi = ptr, %ecx = sum)

0x28067038 <TcpChecksum+80>:    movb   (%esi),%al
0x2806703a <TcpChecksum+82>:    addl   %eax,%ecx

egcs should have zeroed %eax before the movb.

libalias compiled without -O works correctly.

-lq


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-current" in the body of the message

Reply via email to