]> git.proxmox.com Git - grub2.git/commitdiff
Don't do unaligned access when parsing DHCP packet
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 26 Jun 2011 20:37:19 +0000 (22:37 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 26 Jun 2011 20:37:19 +0000 (22:37 +0200)
grub-core/net/net.c
include/grub/net.h

index 2932986b27a0f54663ee35ab5e6592c3e31ce3e8..560fa7a31ca3fc15344a26d938fda61d5fd35aba 100644 (file)
@@ -879,7 +879,10 @@ parse_dhcp_vendor (const char *name, void *vend, int limit)
 
   ptr = ptr0 = vend;
 
-  if (grub_be_to_cpu32 (*(grub_uint32_t *) ptr) != GRUB_NET_BOOTP_RFC1048_MAGIC)
+  if (ptr[0] != GRUB_NET_BOOTP_RFC1048_MAGIC_0
+      || ptr[1] != GRUB_NET_BOOTP_RFC1048_MAGIC_1
+      || ptr[2] != GRUB_NET_BOOTP_RFC1048_MAGIC_2
+      || ptr[3] != GRUB_NET_BOOTP_RFC1048_MAGIC_3)
     return;
   ptr = ptr + sizeof (grub_uint32_t);
   while (ptr - ptr0 < limit)
@@ -1078,8 +1081,10 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
 
   ptr = inter->dhcp_ack->vendor;
 
-  if (grub_be_to_cpu32 (*(grub_uint32_t *) ptr)
-      != GRUB_NET_BOOTP_RFC1048_MAGIC)
+  if (ptr[0] != GRUB_NET_BOOTP_RFC1048_MAGIC_0
+      || ptr[1] != GRUB_NET_BOOTP_RFC1048_MAGIC_1
+      || ptr[2] != GRUB_NET_BOOTP_RFC1048_MAGIC_2
+      || ptr[3] != GRUB_NET_BOOTP_RFC1048_MAGIC_3)
     return grub_error (GRUB_ERR_IO, N_("no DHCP options found"));
   ptr = ptr + sizeof (grub_uint32_t);
   while (1)
index 6595a8276b416adcd7b104c9e2c67dd829e0de65..ee94ebcc6664e7c7f66e3412d1adce3bd4089da3 100644 (file)
@@ -394,7 +394,10 @@ struct grub_net_bootp_packet
   grub_uint8_t vendor[0];
 } __attribute__ ((packed));
 
-#define        GRUB_NET_BOOTP_RFC1048_MAGIC    0x63825363L
+#define        GRUB_NET_BOOTP_RFC1048_MAGIC_0  0x63
+#define        GRUB_NET_BOOTP_RFC1048_MAGIC_1  0x82
+#define        GRUB_NET_BOOTP_RFC1048_MAGIC_2  0x53
+#define        GRUB_NET_BOOTP_RFC1048_MAGIC_3  0x63
 
 struct grub_net_network_level_interface *
 grub_net_configure_by_dhcp_ack (const char *name,