V1.58 (Bug in forwarding XNS packets on Suns, CCIs)

Keith Bostic bostic at OKEEFFE.BERKELEY.EDU
Fri May 6 12:35:38 AEST 1988


Subject: Bug in forwarding XNS packets on Suns, CCI's
Index: sys/netns/4.3BSD

Description:
	If a system running 4.3BSD is forwarding XNS packets from one
	network to another, and the system is a Big-Endian machine, such
	as a 68000 based CPU, or CCI machine, some XNS packets will be
	incorrectly checksumed on the outgoing network.  This depends
	on the length of the packet and the previous value of the checksum.
	This bug persists in the recently released public version of XNS.

Repeat By:
	Not worth writing a demonstration program.  Bug is obvious.

Fix:
*** ns_input.c.bad   Wed May  4 11:46:08 1988
--- ns_input.c       Wed May  4 11:45:35 1988
***************
*** 12,12 ****
!  *      @(#)ns_input.c        7.2 (Berkeley) 1/20/88
--- 12,12 ----
!  *      @(#)ns_input.c        7.3 (Berkeley) 5/4/88
***************
*** 363,369 ****
                register int shift;
                x.l = 0; x.c[0] = agedelta;
                shift = (((((int)ntohs(idp->idp_len))+1)>>1)-2) & 0xf;
!               x.l = idp->idp_sum + (x.l << shift);
                x.l = x.s[0] + x.s[1];
                x.l = x.s[0] + x.s[1];
                if (x.l==0xffff) idp->idp_sum = 0; else idp->idp_sum = x.l;
--- 363,369 ----
                register int shift;
                x.l = 0; x.c[0] = agedelta;
                shift = (((((int)ntohs(idp->idp_len))+1)>>1)-2) & 0xf;
!               x.l = idp->idp_sum + (x.s[0] << shift);
                x.l = x.s[0] + x.s[1];
                x.l = x.s[0] + x.s[1];
                if (x.l==0xffff) idp->idp_sum = 0; else idp->idp_sum = x.l;



More information about the Comp.bugs.4bsd.ucb-fixes mailing list