From ga9@buffy.york.ac.uk  Sat Oct  1 20:57:57 2005
Return-Path: <ga9@buffy.york.ac.uk>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id C63C316A41F
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  1 Oct 2005 20:57:57 +0000 (GMT)
	(envelope-from ga9@buffy.york.ac.uk)
Received: from mail-gw0.york.ac.uk (mail-gw0.york.ac.uk [144.32.128.245])
	by mx1.FreeBSD.org (Postfix) with ESMTP id F319543D45
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  1 Oct 2005 20:57:56 +0000 (GMT)
	(envelope-from ga9@buffy.york.ac.uk)
Received: from buffy.york.ac.uk (buffy-128.york.ac.uk [144.32.128.160])
	by mail-gw0.york.ac.uk (8.12.10/8.12.10) with ESMTP id j91Kvsrc012277
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 1 Oct 2005 21:57:54 +0100 (BST)
Received: from buffy.york.ac.uk (localhost [127.0.0.1])
	by buffy.york.ac.uk (8.13.4/8.13.4) with ESMTP id j91KvsAt008147
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 1 Oct 2005 21:57:54 +0100 (BST)
	(envelope-from ga9@buffy.york.ac.uk)
Received: (from ga9@localhost)
	by buffy.york.ac.uk (8.13.4/8.13.4/Submit) id j91Kvr7h008146;
	Sat, 1 Oct 2005 21:57:53 +0100 (BST)
	(envelope-from ga9)
Message-Id: <200510012057.j91Kvr7h008146@buffy.york.ac.uk>
Date: Sat, 1 Oct 2005 21:57:53 +0100 (BST)
From: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
Reply-To: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [PATCH] savecore fails to byteswap architectureversion field
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         86805
>Category:       bin
>Synopsis:       [PATCH] savecore fails to byteswap architectureversion field
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Oct 01 21:00:33 GMT 2005
>Closed-Date:    Sat Oct 08 18:01:41 GMT 2005
>Last-Modified:  Sat Oct 08 18:01:41 GMT 2005
>Originator:     Gavin Atkinson
>Release:        FreeBSD 6.0-BETA5 i386
>Organization:
>Environment:
System: FreeBSD buffy.york.ac.uk 6.0-BETA5 FreeBSD 6.0-BETA5 #1: Fri Sep 30 12:26:25 BST 2005 root@buffy.york.ac.uk:/usr/obj/usr/src/sys/BUFFY i386

>Description:

	When savecore runs and finds a core, it will create an info.X file
with an ASCII representation of the dump header.  Five of the fields within
this header are supposed to be in "dump byte order", which is the same as
network byte order (see the comment in sys/kerneldump.h).

The current version of the AMD64 dump is 2, however the contents of the info
file corresponding to an amd64 dump is as follows:

wiggum# cat /var/crash/info.0
Dump header from device /dev/da0s1b
  Architecture: amd64
  Architecture Version: 33554432
  [...]

Note that 33554432 = 0x02000000, i.e. it needs to be byte swapped but hasn't
been.  This problem isn't amd64 specific, it seems to affect all little-endian
platforms, and was introduced (seemingly accidentally) in version 1.71 of
src/sbin/savecore.c

See http://lists.freebsd.org/pipermail/freebsd-hackers/2005-May/012028.html for
an i386 example of the bug.

>How-To-Repeat:
	Panic a system with dumps enabled, look at /var/crash/info.X and compare
the architecture version to that defined in /usr/include/sys/kerneldump.h

>Fix:

--- savecore.diff begins here ---
Index: src/sbin/savecore/savecore.c
===================================================================
RCS file: /usr/cvs/src/sbin/savecore/savecore.c,v
retrieving revision 1.76
diff -u -r1.76 savecore.c
--- src/sbin/savecore/savecore.c	13 Sep 2005 19:15:28 -0000	1.76
+++ src/sbin/savecore/savecore.c	1 Oct 2005 20:30:47 -0000
@@ -107,7 +107,8 @@
 
 	fprintf(f, "Dump header from device %s\n", device);
 	fprintf(f, "  Architecture: %s\n", h->architecture);
-	fprintf(f, "  Architecture Version: %u\n", h->architectureversion);
+	fprintf(f, "  Architecture Version: %u\n",
+	    dtoh32(h->architectureversion));
 	dumplen = dtoh64(h->dumplength);
 	fprintf(f, "  Dump Length: %lldB (%lld MB)\n", (long long)dumplen,
 	    (long long)(dumplen >> 20));
--- savecore.diff ends here ---


>Release-Note:
>Audit-Trail:

From: Maxim Konovalov <maxim@macomnet.ru>
To: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
Cc: bug-followup@freebsd.org
Subject: Re: bin/86805: [PATCH] savecore fails to byteswap architectureversion
 field
Date: Sun, 2 Oct 2005 04:06:47 +0400 (MSD)

 Hi,
 
 [...]
 > Note that 33554432 = 0x02000000, i.e. it needs to be byte swapped
 > but hasn't been.  This problem isn't amd64 specific, it seems to
 > affect all little-endian platforms, and was introduced (seemingly
 > accidentally) in version 1.71 of src/sbin/savecore.c
 
 Do you mean rev. 1.72?
 
 -- 
 Maxim Konovalov

From: Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
To: Maxim Konovalov <maxim@macomnet.ru>
Cc: bug-followup@freebsd.org
Subject: Re: bin/86805: [PATCH] savecore fails to byteswap architectureversion
 field
Date: Sun, 2 Oct 2005 11:41:16 +0100 (BST)

 On Sun, 2 Oct 2005, Maxim Konovalov wrote:
 
 > Do you mean rev. 1.72?
 
 Yes, sorry.
 
 Gavin
State-Changed-From-To: open->patched 
State-Changed-By: maxim 
State-Changed-When: Sun Oct 2 11:32:32 GMT 2005 
State-Changed-Why:  
o Fixed in HEAD.  Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=86805 
State-Changed-From-To: patched->closed 
State-Changed-By: maxim 
State-Changed-When: Sat Oct 8 18:01:40 GMT 2005 
State-Changed-Why:  
MFCed to RELENG_5 and RELENG_6. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=86805 
>Unformatted:
