From de3645c36c4711032d169e36d2b5b40361a46f4a Mon Sep 17 00:00:00 2001 From: Radek Vokál Date: Dec 27 2006 08:34:03 +0000 Subject: - fix arp unaligned access (#220438) --- diff --git a/net-tools-1.60-arp-unaligned-access.patch b/net-tools-1.60-arp-unaligned-access.patch new file mode 100644 index 0000000..ed0c99a --- /dev/null +++ b/net-tools-1.60-arp-unaligned-access.patch @@ -0,0 +1,116 @@ +--- net-tools-1.60/arp.c 2001-04-08 10:05:05.000000000 -0700 ++++ net-tools-1.60.new/arp.c 2006-01-31 13:10:01.479716750 -0800 +@@ -100,7 +100,7 @@ static int arp_del(char **args) + { + char host[128]; + struct arpreq req; +- struct sockaddr sa; ++ struct sockaddr_storage ss; + int flags = 0; + int err; + +@@ -112,12 +112,12 @@ static int arp_del(char **args) + return (-1); + } + safe_strncpy(host, *args, (sizeof host)); +- if (ap->input(0, host, &sa) < 0) { ++ if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { + ap->herror(host); + return (-1); + } + /* If a host has more than one address, use the correct one! */ +- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); ++ memcpy((char *) &req.arp_pa, (char *) &ss, sizeof(struct sockaddr)); + + if (hw_set) + req.arp_ha.sa_family = hw->type; +@@ -177,11 +177,11 @@ static int arp_del(char **args) + usage(); + if (strcmp(*args, "255.255.255.255") != 0) { + strcpy(host, *args); +- if (ap->input(0, host, &sa) < 0) { ++ if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { + ap->herror(host); + return (-1); + } +- memcpy((char *) &req.arp_netmask, (char *) &sa, ++ memcpy((char *) &req.arp_netmask, (char *) &ss, + sizeof(struct sockaddr)); + req.arp_flags |= ATF_NETMASK; + } +@@ -260,7 +260,7 @@ static int arp_set(char **args) + { + char host[128]; + struct arpreq req; +- struct sockaddr sa; ++ struct sockaddr_storage ss; + int flags; + + memset((char *) &req, 0, sizeof(req)); +@@ -271,12 +271,12 @@ static int arp_set(char **args) + return (-1); + } + safe_strncpy(host, *args++, (sizeof host)); +- if (ap->input(0, host, &sa) < 0) { ++ if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { + ap->herror(host); + return (-1); + } + /* If a host has more than one address, use the correct one! */ +- memcpy((char *) &req.arp_pa, (char *) &sa, sizeof(struct sockaddr)); ++ memcpy((char *) &req.arp_pa, (char *) &ss, sizeof(struct sockaddr)); + + /* Fetch the hardware address. */ + if (*args == NULL) { +@@ -346,11 +346,11 @@ static int arp_set(char **args) + usage(); + if (strcmp(*args, "255.255.255.255") != 0) { + strcpy(host, *args); +- if (ap->input(0, host, &sa) < 0) { ++ if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { + ap->herror(host); + return (-1); + } +- memcpy((char *) &req.arp_netmask, (char *) &sa, ++ memcpy((char *) &req.arp_netmask, (char *) &ss, + sizeof(struct sockaddr)); + flags |= ATF_NETMASK; + } +@@ -519,7 +519,7 @@ static void arp_disp(char *name, char *i + static int arp_show(char *name) + { + char host[100]; +- struct sockaddr sa; ++ struct sockaddr_storage ss; + char ip[100]; + char hwa[100]; + char mask[100]; +@@ -535,11 +535,11 @@ static int arp_show(char *name) + if (name != NULL) { + /* Resolve the host name. */ + safe_strncpy(host, name, (sizeof host)); +- if (ap->input(0, host, &sa) < 0) { ++ if (ap->input(0, host, (struct sockaddr*)&ss) < 0) { + ap->herror(host); + return (-1); + } +- safe_strncpy(host, ap->sprint(&sa, 1), sizeof(host)); ++ safe_strncpy(host, ap->sprint((struct sockaddr*)&ss, 1), sizeof(host)); + } + /* Open the PROCps kernel table. */ + if ((fp = fopen(_PATH_PROCNET_ARP, "r")) == NULL) { +@@ -575,10 +575,11 @@ static int arp_show(char *name) + if (opt_n) + hostname = "?"; + else { +- if (ap->input(0, ip, &sa) < 0) ++ if (ap->input(0, ip, (struct sockaddr*)&ss) < 0) + hostname = ip; + else +- hostname = ap->sprint(&sa, opt_n | 0x8000); ++ hostname = ap->sprint((struct sockaddr*)&ss, ++ opt_n | 0x8000); + if (strcmp(hostname, ip) == 0) + hostname = "?"; + } + diff --git a/net-tools.spec b/net-tools.spec index 4e9cc0c..2b65bdc 100644 --- a/net-tools.spec +++ b/net-tools.spec @@ -70,6 +70,7 @@ Patch55: net-tools-1.60-netdevice.patch Patch56: net-tools-1.60-skip.patch Patch57: net-tools-1.60-netstat-I-fix.patch Patch58: net-tools-1.60-nameif_strncpy.patch +Patch59: net-tools-1.60-arp-unaligned-access.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires(post,preun): chkconfig @@ -137,6 +138,7 @@ ifconfig, netstat, route, and others. %patch56 -p1 -b .skip %patch57 -p1 %patch58 -p1 -b .strncpy +%patch59 -p1 -b .arp-un-access cp %SOURCE2 ./config.h cp %SOURCE3 ./config.make @@ -248,6 +250,9 @@ exit 0 %{_sysconfdir}/rc.d/init.d/netplugd %changelog +* Wed Dec 27 2006 Radek Vokál - 1.60-76 +- fix arp unaligned access (#220438) + * Wed Oct 4 2006 Radek Vokal - 1.60-75 - fix nameif crash for 16char long interface names (#209120)