NETDUMP ARM alignment fault fix

Boris Astardzhiev boris.astardzhiev at gmail.com
Thu Nov 14 06:34:43 UTC 2013


Hi,

I've experienced some alignment faults using NETDUMP on the Sheevaplug ARM
board.
The function in question is netdump_send_arp(). I've attached a simple fix
to it and I'm posting it
as it might be of use to someone.

diff --git a/sys/netinet/netdump_client.c b/sys/netinet/netdump_client.c
index f6e5170..0379c61 100644
--- a/sys/netinet/netdump_client.c
+++ b/sys/netinet/netdump_client.c
@@ -510,9 +510,11 @@ netdump_send_arp()
     ah->ar_pln = sizeof(struct in_addr);
     ah->ar_op = htons(ARPOP_REQUEST);
     memcpy(ar_sha(ah), IF_LLADDR(nd_nic), ETHER_ADDR_LEN);
-    ((struct in_addr *)ar_spa(ah))->s_addr = nd_client.s_addr;
+    memcpy(&(((struct in_addr *)ar_spa(ah))->s_addr),
+        &nd_client.s_addr, sizeof(nd_client.s_addr));
     bzero(ar_tha(ah), ETHER_ADDR_LEN);
-    ((struct in_addr *)ar_tpa(ah))->s_addr = nd_gw.s_addr;
+    memcpy(&(((struct in_addr *)ar_tpa(ah))->s_addr), &nd_gw.s_addr,
+        sizeof(nd_gw.s_addr));

     return netdump_ether_output(m, nd_nic, bcast, ETHERTYPE_ARP);
 }

Greetings,
Boris
-------------- next part --------------
diff --git a/sys/netinet/netdump_client.c b/sys/netinet/netdump_client.c
index f6e5170..0379c61 100644
--- a/sys/netinet/netdump_client.c
+++ b/sys/netinet/netdump_client.c
@@ -510,9 +510,11 @@ netdump_send_arp()
 	ah->ar_pln = sizeof(struct in_addr);
 	ah->ar_op = htons(ARPOP_REQUEST);
 	memcpy(ar_sha(ah), IF_LLADDR(nd_nic), ETHER_ADDR_LEN);
-	((struct in_addr *)ar_spa(ah))->s_addr = nd_client.s_addr;
+	memcpy(&(((struct in_addr *)ar_spa(ah))->s_addr),
+	    &nd_client.s_addr, sizeof(nd_client.s_addr));
 	bzero(ar_tha(ah), ETHER_ADDR_LEN);
-	((struct in_addr *)ar_tpa(ah))->s_addr = nd_gw.s_addr;
+	memcpy(&(((struct in_addr *)ar_tpa(ah))->s_addr), &nd_gw.s_addr,
+	    sizeof(nd_gw.s_addr));
 
 	return netdump_ether_output(m, nd_nic, bcast, ETHERTYPE_ARP);
 }


More information about the freebsd-arm mailing list