From owner-freebsd-bugs@FreeBSD.ORG Tue Oct 11 03:10:06 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 774781065670 for ; Tue, 11 Oct 2011 03:10:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 539488FC0C for ; Tue, 11 Oct 2011 03:10:06 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p9B3A6ld024567 for ; Tue, 11 Oct 2011 03:10:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p9B3A6rc024566; Tue, 11 Oct 2011 03:10:06 GMT (envelope-from gnats) Resent-Date: Tue, 11 Oct 2011 03:10:06 GMT Resent-Message-Id: <201110110310.p9B3A6rc024566@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Garrett Cooper Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB012106564A for ; 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 ; 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 ; 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 To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: bin/161478: [patch] make kdump WARNS=6 clean X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2011 03:10:06 -0000 >Number: 161478 >Category: bin >Synopsis: [patch] make kdump WARNS=6 clean >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Tue Oct 11 03:10:05 UTC 2011 >Closed-Date: >Last-Modified: >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 \\n" + ;; +*) + ioctl_includes="$ioctl_includes#include \\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: >Unformatted: