fix potentially misaligned 32-bit accesses
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 18 Jan 2007 15:42:00 +0000 (15:42 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 18 Jan 2007 15:42:00 +0000 (15:42 -0000)
networking/udhcp/dhcpc.c

index e042da89a50fbb06cf78d43e1198c325232d0f01..e48e1f25e4856cd00c6a489f031df124e87cb76c 100644 (file)
@@ -23,7 +23,7 @@ static int state;
  * which holds IPv4 address, and the struct is passed by value (!!)
  */
 static unsigned long requested_ip; /* = 0 */
-static unsigned long server_addr;
+static uint32_t server_addr;
 static unsigned long timeout;
 static int packet_num; /* = 0 */
 static int fd = -1;
@@ -413,7 +413,8 @@ int udhcpc_main(int argc, char *argv[])
                                if (*message == DHCPOFFER) {
                                        temp = get_option(&packet, DHCP_SERVER_ID);
                                        if (temp) {
-                                               server_addr = *(uint32_t*)temp;
+                                               /* can be misaligned, thus memcpy */
+                                               memcpy(&server_addr, temp, 4);
                                                xid = packet.xid;
                                                requested_ip = packet.yiaddr;
 
@@ -436,7 +437,9 @@ int udhcpc_main(int argc, char *argv[])
                                                bb_error_msg("no lease time with ACK, using 1 hour lease");
                                                lease = 60 * 60;
                                        } else {
-                                               lease = ntohl(*(uint32_t*)temp);
+                                               /* can be misaligned, thus memcpy */
+                                               memcpy(&lease, temp, 4);
+                                               lease = ntohl(lease);
                                        }
 
                                        /* enter bound state */