From nobody@FreeBSD.org  Tue Oct 11 03:05:36 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id BB012106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 11 Oct 2011 03:05:36 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id AA2598FC08
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 11 Oct 2011 03:05:36 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p9B35a80087637
	for <freebsd-gnats-submit@FreeBSD.org>; Tue, 11 Oct 2011 03:05:36 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id p9B35aPV087614;
	Tue, 11 Oct 2011 03:05:36 GMT
	(envelope-from nobody)
Message-Id: <201110110305.p9B35aPV087614@red.freebsd.org>
Date: Tue, 11 Oct 2011 03:05:36 GMT
From: Garrett Cooper <yaneurabeya@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] make kdump WARNS=6 clean
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         161478
>Category:       bin
>Synopsis:       [patch] kdump(8): make kdump WARNS=6 clean
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    des
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Oct 11 03:10:05 UTC 2011
>Closed-Date:    Thu Oct 13 20:13:03 UTC 2011
>Last-Modified:  Sun Feb 03 22:29:38 UTC 2013
>Originator:     Garrett Cooper
>Release:        10-CURRENT
>Organization:
n/a
>Environment:
FreeBSD fallout.local 10.0-CURRENT FreeBSD 10.0-CURRENT #1 r226046M: Wed Oct  5 22:06:21 PDT 2011     gcooper@fallout.local:/usr/obj/usr/src/sys/FALLOUT  amd64
>Description:
There are several coding issues with kdump, even after des@'s modifications to the utility. I proposed an earlier incarnation of this patch a while ago on hackers, but it wasn't picked up.

The previous patch was make universe clean, but I'll need to rerun make universe to verify that the new version (after des@'s modifications and my modifications are made) is sane.
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

Index: usr.bin/kdump/kdump.c
===================================================================
--- usr.bin/kdump/kdump.c	(revision 226242)
+++ usr.bin/kdump/kdump.c	(working copy)
@@ -99,6 +99,8 @@
 void ktrsockaddr(struct sockaddr *);
 void ktrstat(struct stat *);
 void ktrstruct(char *, size_t);
+void ktruser_malloc(unsigned char * p);
+void ktruser_rtld(int len, unsigned char * p);
 void usage(void);
 void ioctlname(unsigned long, int);
 
@@ -501,7 +503,6 @@
 		    (flags == 0 || (flags & SV_ABI_MASK) == SV_ABI_FREEBSD)) {
 			switch (ktr->ktr_code) {
 			case SYS_ioctl: {
-				const char *cp;
 				print_number(ip, narg, c);
 				putchar(c);
 				ioctlname(*ip, decimal);
@@ -978,13 +979,6 @@
 				ip++;
 				narg--;
 				break;
-                        case SYS_cap_new:
-                                print_number(ip, narg, c);
-                                putchar(',');
-                                capname(*ip);
-                                ip++;
-                                narg--;
-				break;
 			}
 		}
 		while (narg > 0) {
@@ -1217,7 +1211,7 @@
 	size_t mapsize;
 	int refcnt;
 	char name[MAXPATHLEN];
-};
+} __packed;
 
 void
 ktruser_rtld(int len, unsigned char *p)
@@ -1303,10 +1297,10 @@
 	void *p;
 	size_t s;
 	void *r;
-};
+} __packed;
 
 void
-ktruser_malloc(int len, unsigned char *p)
+ktruser_malloc(unsigned char *p)
 {
 	struct utrace_malloc *ut = (struct utrace_malloc *)p;
 
@@ -1330,7 +1324,7 @@
 	}
 
 	if (len == sizeof(struct utrace_malloc)) {
-		ktruser_malloc(len, p);
+		ktruser_malloc(p);
 		return;
 	}
 
@@ -1365,61 +1359,67 @@
 	printf(", ");
 
 #define check_sockaddr_len(n)					\
-	if (sa_##n->s##n##_len < sizeof(struct sockaddr_##n)) {	\
+	if (sa_##n.s##n##_len < sizeof(struct sockaddr_##n)) {	\
 		printf("invalid");				\
 		break;						\
 	}
 
 	switch(sa->sa_family) {
 	case AF_INET: {
-		struct sockaddr_in	*sa_in;
+		struct sockaddr_in sa_in;
 
-		sa_in = (struct sockaddr_in *)sa;
+		memset(&sa_in, 0, sizeof(sa_in));
+		memcpy(&sa_in, sa, sizeof(sa));
 		check_sockaddr_len(in);
-		inet_ntop(AF_INET, &sa_in->sin_addr, addr, sizeof addr);
-		printf("%s:%u", addr, ntohs(sa_in->sin_port));
+		inet_ntop(AF_INET, &sa_in.sin_addr, addr, sizeof addr);
+		printf("%s:%u", addr, ntohs(sa_in.sin_port));
 		break;
 	}
 #ifdef NETATALK
 	case AF_APPLETALK: {
-		struct sockaddr_at	*sa_at;
+		struct sockaddr_at	sa_at;
 		struct netrange		*nr;
 
-		sa_at = (struct sockaddr_at *)sa;
+		memset(&sa_at, 0, sizeof(sa_at));
+		memcpy(&sa_at, sa, sizeof(sa));
 		check_sockaddr_len(at);
-		nr = &sa_at->sat_range.r_netrange;
-		printf("%d.%d, %d-%d, %d", ntohs(sa_at->sat_addr.s_net),
-			sa_at->sat_addr.s_node, ntohs(nr->nr_firstnet),
+		nr = &sa_at.sat_range.r_netrange;
+		printf("%d.%d, %d-%d, %d", ntohs(sa_at.sat_addr.s_net),
+			sa_at.sat_addr.s_node, ntohs(nr->nr_firstnet),
 			ntohs(nr->nr_lastnet), nr->nr_phase);
 		break;
 	}
 #endif
 	case AF_INET6: {
-		struct sockaddr_in6	*sa_in6;
+		struct sockaddr_in6 sa_in6;
 
-		sa_in6 = (struct sockaddr_in6 *)sa;
+		memset(&sa_in6, 0, sizeof(sa_in6));
+		memcpy(&sa_in6, sa, sizeof(sa));
 		check_sockaddr_len(in6);
-		inet_ntop(AF_INET6, &sa_in6->sin6_addr, addr, sizeof addr);
-		printf("[%s]:%u", addr, htons(sa_in6->sin6_port));
+		inet_ntop(AF_INET6, &sa_in6.sin6_addr, addr, sizeof addr);
+		printf("[%s]:%u", addr, htons(sa_in6.sin6_port));
 		break;
 	}
 #ifdef IPX
 	case AF_IPX: {
-		struct sockaddr_ipx	*sa_ipx;
+		struct sockaddr_ipx sa_ipx;
 
-		sa_ipx = (struct sockaddr_ipx *)sa;
+		memset(&sa_ipx, 0, sizeof(sa_ipx));
+		memcpy(&sa_ipx, sa, sizeof(sa));
 		check_sockaddr_len(ipx);
 		/* XXX wish we had ipx_ntop */
-		printf("%s", ipx_ntoa(sa_ipx->sipx_addr));
+		printf("%s", ipx_ntoa(sa_ipx.sipx_addr));
+		free(sa_ipx);
 		break;
 	}
 #endif
 	case AF_UNIX: {
-		struct sockaddr_un *sa_un;
+		struct sockaddr_un sa_un;
 
-		sa_un = (struct sockaddr_un *)sa;
+		memset(&sa_un, 0, sizeof(sa_un));
+		memcpy(&sa_un, sa, sizeof(sa));
 		check_sockaddr_len(un);
-		printf("%.*s", (int)sizeof(sa_un->sun_path), sa_un->sun_path);
+		printf("%.*s", (int)sizeof(sa_un.sun_path), sa_un.sun_path);
 		break;
 	}
 	default:
@@ -1530,8 +1530,8 @@
 	if (datalen == 0)
 		goto invalid;
 	/* sanity check */
-	for (i = 0; i < namelen; ++i)
-		if (!isalpha((unsigned char)name[i]))
+	for (i = 0; i < (int)namelen; ++i)
+		if (!isalpha(name[i]))
 			goto invalid;
 	if (strcmp(name, "stat") == 0) {
 		if (datalen != sizeof(struct stat))
Index: usr.bin/kdump/kdump_subr.h
===================================================================
--- usr.bin/kdump/kdump_subr.h	(revision 226140)
+++ usr.bin/kdump/kdump_subr.h	(working copy)
@@ -45,3 +45,4 @@
 void minheritname (int);
 void quotactlname (int);
 void ptraceopname (int);
+void sockfamilyname(int);
Index: usr.bin/kdump/mkioctls
===================================================================
--- usr.bin/kdump/mkioctls	(revision 226242)
+++ usr.bin/kdump/mkioctls	(working copy)
@@ -15,12 +15,21 @@
 # XXX should we use an ANSI cpp?
 ioctl_includes=`
 	cd $1
-	find -H -s * -name '*.h' |
+	find -H -s * -name '*.h' | grep -v '.*disk.*\.h' | \
 		xargs egrep -l \
 '^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
 		awk '{printf("#include <%s>\\\\n", $1)}'
 `
 
+case "`uname -m`" in
+*pc98*)
+	ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
+	;;
+*)
+	ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
+	;;
+esac
+
 awk -v x="$ioctl_includes" 'BEGIN {print x}' |
 	gcc -E -I$1 -dM -DCOMPAT_43TTY - |
 	awk -v ioctl_includes="$ioctl_includes" '
Index: usr.bin/kdump/Makefile
===================================================================
--- usr.bin/kdump/Makefile	(revision 226242)
+++ usr.bin/kdump/Makefile	(working copy)
@@ -16,7 +16,7 @@
 SRCS+=		linux_syscalls.c
 .endif
 
-WARNS?=		0
+WARNS?=		6
 
 CLEANFILES=	ioctl.c kdump_subr.c linux_syscalls.c
 


>Release-Note:
>Audit-Trail:

From: Garrett Cooper <yaneurabeya@gmail.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc: Garrett Cooper <yaneurabeya@gmail.com>
Subject: Re: bin/161478: [patch] make kdump WARNS=6 clean
Date: Tue, 11 Oct 2011 08:43:51 -0700 (PDT)

  	The build passed make universe with flying colors.
 Thanks,
 -Garrett
Responsible-Changed-From-To: freebsd-bugs->des 
Responsible-Changed-By: des 
Responsible-Changed-When: Tue Oct 11 19:41:05 UTC 2011 
Responsible-Changed-Why:  
kdump is mine for now 

http://www.freebsd.org/cgi/query-pr.cgi?pr=161478 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/161478: commit references a PR
Date: Wed, 12 Oct 2011 21:45:26 +0000 (UTC)

 Author: des
 Date: Wed Oct 12 21:45:12 2011
 New Revision: 226329
 URL: http://svn.freebsd.org/changeset/base/226329
 
 Log:
   Make kdump compile cleanly at WARNS level 6, with one exception: the
   ipfilter headers contain a duplicated function declaration.  Turn off
   -Werror to allow kdump to compile in spite of this.
   
   It would be neat to be able to turn off -Werror on a file-by-file basis...
   
   PR:		bin/161478
   Submitted by:	Garrett Cooper <yaneurabeya@gmail.com>
 
 Modified:
   head/usr.bin/kdump/Makefile
   head/usr.bin/kdump/kdump.c
   head/usr.bin/kdump/mkioctls
 
 Modified: head/usr.bin/kdump/Makefile
 ==============================================================================
 --- head/usr.bin/kdump/Makefile	Wed Oct 12 21:38:48 2011	(r226328)
 +++ head/usr.bin/kdump/Makefile	Wed Oct 12 21:45:12 2011	(r226329)
 @@ -16,9 +16,9 @@ CFLAGS+=	-I${.CURDIR}/../ktrace -I${.CUR
  SRCS+=		linux_syscalls.c
  .endif
  
 -WARNS?=		0
 +NO_WERROR?=	YES
  
 -CLEANFILES=	ioctl.c kdump_subr.c linux_syscalls.c
 +CLEANFILES=	ioctl.c kdump_subr.c kdump_subr.h linux_syscalls.c
  
  ioctl.c: mkioctls
  	sh ${.CURDIR}/mkioctls ${DESTDIR}/usr/include > ${.TARGET}
 
 Modified: head/usr.bin/kdump/kdump.c
 ==============================================================================
 --- head/usr.bin/kdump/kdump.c	Wed Oct 12 21:38:48 2011	(r226328)
 +++ head/usr.bin/kdump/kdump.c	Wed Oct 12 21:45:12 2011	(r226329)
 @@ -95,6 +95,8 @@ void visdump(char *, int, int);
  void ktrgenio(struct ktr_genio *, int);
  void ktrpsig(struct ktr_psig *);
  void ktrcsw(struct ktr_csw *);
 +void ktruser_malloc(unsigned char *);
 +void ktruser_rtld(int, unsigned char *);
  void ktruser(int, unsigned char *);
  void ktrsockaddr(struct sockaddr *);
  void ktrstat(struct stat *);
 @@ -508,7 +510,6 @@ ktrsyscall(struct ktr_syscall *ktr, u_in
  		    (flags == 0 || (flags & SV_ABI_MASK) == SV_ABI_FREEBSD)) {
  			switch (ktr->ktr_code) {
  			case SYS_ioctl: {
 -				const char *cp;
  				print_number(ip, narg, c);
  				putchar(c);
  				ioctlname(*ip, decimal);
 @@ -1334,7 +1335,7 @@ struct utrace_malloc {
  };
  
  void
 -ktruser_malloc(int len, unsigned char *p)
 +ktruser_malloc(unsigned char *p)
  {
  	struct utrace_malloc *ut = (struct utrace_malloc *)p;
  
 @@ -1358,7 +1359,7 @@ ktruser(int len, unsigned char *p)
  	}
  
  	if (len == sizeof(struct utrace_malloc)) {
 -		ktruser_malloc(len, p);
 +		ktruser_malloc(p);
  		return;
  	}
  
 @@ -1393,61 +1394,67 @@ ktrsockaddr(struct sockaddr *sa)
  	printf(", ");
  
  #define check_sockaddr_len(n)					\
 -	if (sa_##n->s##n##_len < sizeof(struct sockaddr_##n)) {	\
 +	if (sa_##n.s##n##_len < sizeof(struct sockaddr_##n)) {	\
  		printf("invalid");				\
  		break;						\
  	}
  
  	switch(sa->sa_family) {
  	case AF_INET: {
 -		struct sockaddr_in	*sa_in;
 +		struct sockaddr_in sa_in;
  
 -		sa_in = (struct sockaddr_in *)sa;
 +		memset(&sa_in, 0, sizeof(sa_in));
 +		memcpy(&sa_in, sa, sizeof(sa));
  		check_sockaddr_len(in);
 -		inet_ntop(AF_INET, &sa_in->sin_addr, addr, sizeof addr);
 -		printf("%s:%u", addr, ntohs(sa_in->sin_port));
 +		inet_ntop(AF_INET, &sa_in.sin_addr, addr, sizeof addr);
 +		printf("%s:%u", addr, ntohs(sa_in.sin_port));
  		break;
  	}
  #ifdef NETATALK
  	case AF_APPLETALK: {
 -		struct sockaddr_at	*sa_at;
 +		struct sockaddr_at	sa_at;
  		struct netrange		*nr;
  
 -		sa_at = (struct sockaddr_at *)sa;
 +		memset(&sa_at, 0, sizeof(sa_at));
 +		memcpy(&sa_at, sa, sizeof(sa));
  		check_sockaddr_len(at);
 -		nr = &sa_at->sat_range.r_netrange;
 -		printf("%d.%d, %d-%d, %d", ntohs(sa_at->sat_addr.s_net),
 -			sa_at->sat_addr.s_node, ntohs(nr->nr_firstnet),
 +		nr = &sa_at.sat_range.r_netrange;
 +		printf("%d.%d, %d-%d, %d", ntohs(sa_at.sat_addr.s_net),
 +			sa_at.sat_addr.s_node, ntohs(nr->nr_firstnet),
  			ntohs(nr->nr_lastnet), nr->nr_phase);
  		break;
  	}
  #endif
  	case AF_INET6: {
 -		struct sockaddr_in6	*sa_in6;
 +		struct sockaddr_in6 sa_in6;
  
 -		sa_in6 = (struct sockaddr_in6 *)sa;
 +		memset(&sa_in6, 0, sizeof(sa_in6));
 +		memcpy(&sa_in6, sa, sizeof(sa));
  		check_sockaddr_len(in6);
 -		inet_ntop(AF_INET6, &sa_in6->sin6_addr, addr, sizeof addr);
 -		printf("[%s]:%u", addr, htons(sa_in6->sin6_port));
 +		inet_ntop(AF_INET6, &sa_in6.sin6_addr, addr, sizeof addr);
 +		printf("[%s]:%u", addr, htons(sa_in6.sin6_port));
  		break;
  	}
  #ifdef IPX
  	case AF_IPX: {
 -		struct sockaddr_ipx	*sa_ipx;
 +		struct sockaddr_ipx sa_ipx;
  
 -		sa_ipx = (struct sockaddr_ipx *)sa;
 +		memset(&sa_ipx, 0, sizeof(sa_ipx));
 +		memcpy(&sa_ipx, sa, sizeof(sa));
  		check_sockaddr_len(ipx);
  		/* XXX wish we had ipx_ntop */
 -		printf("%s", ipx_ntoa(sa_ipx->sipx_addr));
 +		printf("%s", ipx_ntoa(sa_ipx.sipx_addr));
 +		free(sa_ipx);
  		break;
  	}
  #endif
  	case AF_UNIX: {
 -		struct sockaddr_un *sa_un;
 +		struct sockaddr_un sa_un;
  
 -		sa_un = (struct sockaddr_un *)sa;
 +		memset(&sa_un, 0, sizeof(sa_un));
 +		memcpy(&sa_un, sa, sizeof(sa));
  		check_sockaddr_len(un);
 -		printf("%.*s", (int)sizeof(sa_un->sun_path), sa_un->sun_path);
 +		printf("%.*s", (int)sizeof(sa_un.sun_path), sa_un.sun_path);
  		break;
  	}
  	default:
 @@ -1558,8 +1565,8 @@ ktrstruct(char *buf, size_t buflen)
  	if (datalen == 0)
  		goto invalid;
  	/* sanity check */
 -	for (i = 0; i < namelen; ++i)
 -		if (!isalpha((unsigned char)name[i]))
 +	for (i = 0; i < (int)namelen; ++i)
 +		if (!isalpha(name[i]))
  			goto invalid;
  	if (strcmp(name, "stat") == 0) {
  		if (datalen != sizeof(struct stat))
 
 Modified: head/usr.bin/kdump/mkioctls
 ==============================================================================
 --- head/usr.bin/kdump/mkioctls	Wed Oct 12 21:38:48 2011	(r226328)
 +++ head/usr.bin/kdump/mkioctls	Wed Oct 12 21:45:12 2011	(r226329)
 @@ -15,12 +15,21 @@ LC_ALL=C; export LC_ALL
  # XXX should we use an ANSI cpp?
  ioctl_includes=`
  	cd $1
 -	find -H -s * -name '*.h' |
 +	find -H -s * -name '*.h' | grep -v '.*disk.*\.h' | \
  		xargs egrep -l \
  '^#[ 	]*define[ 	]+[A-Za-z_][A-Za-z0-9_]*[ 	]+_IO[^a-z0-9_]' |
  		awk '{printf("#include <%s>\\\\n", $1)}'
  `
  
 +case "`uname -m`" in
 +*pc98*)
 +	ioctl_includes="$ioctl_includes#include <sys/diskpc98.h>\\n"
 +	;;
 +*)
 +	ioctl_includes="$ioctl_includes#include <sys/diskmbr.h>\\n"
 +	;;
 +esac
 +
  awk -v x="$ioctl_includes" 'BEGIN {print x}' |
  	gcc -E -I$1 -dM -DCOMPAT_43TTY - |
  	awk -v ioctl_includes="$ioctl_includes" '
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->closed 
State-Changed-By: des 
State-Changed-When: Thu Oct 13 20:13:02 UTC 2011 
State-Changed-Why:  
fixed 

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