NetBSD Problem Report #14614

Received: (qmail 21265 invoked from network); 17 Nov 2001 14:31:03 -0000
Message-Id: <200111171431.fAHEV0719994@azenomei.knuffel.net>
Date: Sat, 17 Nov 2001 15:31:00 +0100 (CET)
From: Rhialto <rhialto@azenomei.knuffel.net>
Reply-To: rhialto@azenomei.knuffel.net
To: gnats-bugs@gnats.netbsd.org
Cc: rhialto@azenomei.knuffel.net
Subject: VAX assembly in vax/in{4,}_cksum.c broken.
X-Send-Pr-Version: 3.95

>Number:         14614
>Category:       port-vax
>Synopsis:       VAX assembly in vax/in{4,}_cksum.c broken.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-vax-maintainer
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Nov 17 14:32:01 +0000 2001
>Closed-Date:    Sun Dec 31 10:54:25 +0000 2006
>Last-Modified:  Thu Jan 04 19:40:01 +0000 2007
>Originator:     Rhialto
>Release:        <NetBSD-current source date>
>Organization:

>Environment:

System: NetBSD azenomei.falu.nl 1.5.1_BETA NetBSD 1.5.1_BETA (AZENOMEI) #0: Sun Apr 22 00:38:14 CEST 2001 rhialto@azenomei.falu.nl:/vol1/rhialto/cvs/netbsd-1-5/syssrc/sys/arch/alpha/compile/AZENOMEI alpha

Really, VAX 1.5.2 and -current

>Description:
	The assembly in /sys/arch/vax/vax/in{4,}_cksum.c is broken.
	It fails to specify the side-effect on variable w.
	And if you lie to the compiler, it will get its revenge.
	In this case, when you don't optimize, it will reload w for
	each use and the side-effect will be lost.
>How-To-Repeat:
	Compile a VAX kernel wiþh -O0. All network traffic has incorrect
	checksums now.
>Fix:

Index: in4_cksum.c
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/vax/vax/in4_cksum.c,v
retrieving revision 1.4
diff -u -r1.4 in4_cksum.c
--- in4_cksum.c	2001/05/19 23:47:19	1.4
+++ in4_cksum.c	2001/11/16 02:08:19
@@ -100,8 +100,8 @@
 #define SWAP		{sum <<= 8;}		/* depends on recent REDUCE */

 #define Asm     __asm __volatile
-#define ADDL    Asm("addl2 (%2)+,%0" : "=r" (sum) : "0" (sum), "r" (w))
-#define ADWC    Asm("adwc  (%2)+,%0" : "=r" (sum) : "0" (sum), "r" (w))
+#define ADDL    Asm("addl2 (%0)+,%1": "=r" (w), "=r" (sum): "0" (w), "1" (sum))
+#define ADWC    Asm("adwc  (%0)+,%1": "=r" (w), "=r" (sum): "0" (w), "1" (sum))
 #define ADDC    Asm("adwc     $0,%0" : "=r" (sum) : "0" (sum))
 #define UNSWAP  Asm("rotl  $8,%0,%0" : "=r" (sum) : "0" (sum))
 #define ADDBYTE	{sum += *w; SWAP; byte_swapped ^= 1;}
Index: in_cksum.c
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/vax/vax/in_cksum.c,v
retrieving revision 1.5
diff -u -r1.5 in_cksum.c
--- in_cksum.c	2000/06/07 19:31:33	1.5
+++ in_cksum.c	2001/11/16 02:08:19
@@ -56,8 +56,8 @@
 #define SWAP		{sum <<= 8;}		/* depends on recent REDUCE */

 #define Asm     __asm __volatile
-#define ADDL    Asm("addl2 (%2)+,%0" : "=r" (sum) : "0" (sum), "r" (w))
-#define ADWC    Asm("adwc  (%2)+,%0" : "=r" (sum) : "0" (sum), "r" (w))
+#define ADDL    Asm("addl2 (%0)+,%1": "=r" (w), "=r" (sum): "0" (w), "1" (sum))
+#define ADWC    Asm("adwc  (%0)+,%1": "=r" (w), "=r" (sum): "0" (w), "1" (sum))
 #define ADDC    Asm("adwc     $0,%0" : "=r" (sum) : "0" (sum))
 #define UNSWAP  Asm("rotl  $8,%0,%0" : "=r" (sum) : "0" (sum))
 #define ADDBYTE	{sum += *w; SWAP; byte_swapped ^= 1;}

-Olaf.
-- 
___ Olaf 'Rhialto' Seibert - rhialto@     --Soep van de dag, wat zal dat zijn
\X/ xs4all.nl --wat kan dat wezen, beter maar het ergste vrezen -Boy Bensdorp
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed
State-Changed-By: ragge@netbsd.org
State-Changed-When: Sun, 31 Dec 2006 10:54:25 +0000
State-Changed-Why:
Bugfix provided in the PR solved the problem.


From: Anders Magnusson <ragge@netbsd.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: PR/14614 CVS commit: src/sys/arch/vax/vax
Date: Sun, 31 Dec 2006 10:52:52 +0000 (UTC)

 Module Name:	src
 Committed By:	ragge
 Date:		Sun Dec 31 10:52:52 UTC 2006

 Modified Files:
 	src/sys/arch/vax/vax: in4_cksum.c in_cksum.c

 Log Message:
 GCC constraints error for inline assembler, causing in_cksum to calculate
 the checksum wrong in the non-optimized case.  Fix provided in PR#14614
 by Rhialto, so this solves this PR.


 To generate a diff of this commit:
 cvs rdiff -r1.10 -r1.11 src/sys/arch/vax/vax/in4_cksum.c
 cvs rdiff -r1.9 -r1.10 src/sys/arch/vax/vax/in_cksum.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: Manuel Bouyer <bouyer@netbsd.org>
To: gnats-bugs@NetBSD.org
Cc: 
Subject: PR/14614 CVS commit: [netbsd-4] src/sys/arch/vax/vax
Date: Thu,  4 Jan 2007 19:37:59 +0000 (UTC)

 Module Name:	src
 Committed By:	bouyer
 Date:		Thu Jan  4 19:37:59 UTC 2007

 Modified Files:
 	src/sys/arch/vax/vax [netbsd-4]: in4_cksum.c in_cksum.c

 Log Message:
 Pull up following revision(s) (requested by ragge in ticket #321):
 	sys/arch/vax/vax/in4_cksum.c: revision 1.11
 	sys/arch/vax/vax/in_cksum.c: revision 1.10
 GCC constraints error for inline assembler, causing in_cksum to calculate
 the checksum wrong in the non-optimized case.  Fix provided in PR#14614
 by Rhialto, so this solves this PR.


 To generate a diff of this commit:
 cvs rdiff -r1.10 -r1.10.24.1 src/sys/arch/vax/vax/in4_cksum.c
 cvs rdiff -r1.9 -r1.9.24.1 src/sys/arch/vax/vax/in_cksum.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.