Module Name:    src
Committed By:   martin
Date:           Wed Jan  5 14:08:12 UTC 2011

Modified Files:
        src/tests/net/icmp: t_ping.c

Log Message:
Fix alignment of sndbuf (sparc64 got a SIGBUS in this test)


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/tests/net/icmp/t_ping.c

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

Modified files:

Index: src/tests/net/icmp/t_ping.c
diff -u src/tests/net/icmp/t_ping.c:1.11 src/tests/net/icmp/t_ping.c:1.12
--- src/tests/net/icmp/t_ping.c:1.11	Sun Nov  7 17:51:21 2010
+++ src/tests/net/icmp/t_ping.c	Wed Jan  5 14:08:12 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_ping.c,v 1.11 2010/11/07 17:51:21 jmmv Exp $	*/
+/*	$NetBSD: t_ping.c,v 1.12 2011/01/05 14:08:12 martin Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: t_ping.c,v 1.11 2010/11/07 17:51:21 jmmv Exp $");
+__RCSID("$NetBSD: t_ping.c,v 1.12 2011/01/05 14:08:12 martin Exp $");
 #endif /* not lint */
 
 #include <sys/types.h>
@@ -129,7 +129,10 @@
 static int
 doping(const char *target, int loops, u_int pktsize)
 {
-	char sndbuf[IP_MAXPACKET - sizeof(struct ip)];
+	union {
+		char buf[IP_MAXPACKET - sizeof(struct ip)];
+		struct icmp i;	/* ensure proper alignment */
+	} sndbuf;
 	char recvbuf[IP_MAXPACKET];
 	struct sockaddr_in dst, pingee;
 	struct icmp *icmp;
@@ -147,7 +150,7 @@
 	dst.sin_family = AF_INET;
 	dst.sin_addr.s_addr = inet_addr(target);
 
-	icmp = (struct icmp *)sndbuf;
+	icmp = (struct icmp *)&sndbuf;
 	memset(icmp, 0, sizeof(*icmp));
 	icmp->icmp_type = ICMP_ECHO;
 	icmp->icmp_id = htons(37);

Reply via email to