Blame SOURCES/0247-Use-xid-to-match-DHCP-replies.patch

f731ee
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
f731ee
From: Andrzej Kacprowski <andrzej.kacprowski@intel.com>
f731ee
Date: Fri, 21 Apr 2017 09:20:38 +0200
f731ee
Subject: [PATCH] Use xid to match DHCP replies
f731ee
f731ee
Transaction identifier (xid) from DHCP request
f731ee
packet is stored in network level interface and used
f731ee
to match request with the responses it generates.
f731ee
f731ee
Resolves: rhbz#1370642
f731ee
f731ee
Signed-off-by: Andrzej Kacprowski <andrzej.kacprowski@intel.com>
f731ee
---
f731ee
 grub-core/net/bootp.c | 3 ++-
f731ee
 grub-core/net/ip.c    | 1 +
f731ee
 include/grub/net.h    | 3 ++-
f731ee
 3 files changed, 5 insertions(+), 2 deletions(-)
f731ee
f731ee
diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
f731ee
index 7df7f55110e..dfdf7e08d90 100644
f731ee
--- a/grub-core/net/bootp.c
f731ee
+++ b/grub-core/net/bootp.c
f731ee
@@ -769,7 +769,8 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)),
f731ee
 	      grub_errno = GRUB_ERR_NONE;
f731ee
 	      t = 0;
f731ee
 	    }
f731ee
-	  pack->ident = grub_cpu_to_be32 (t);
f731ee
+	  pack->xid = grub_cpu_to_be32 (t);
f731ee
+	  ifaces[j].dhcp_xid = pack->xid;
f731ee
 	  pack->seconds = grub_cpu_to_be16 (t);
f731ee
 
f731ee
 	  grub_memcpy (&pack->mac_addr, &ifaces[j].hwaddress.mac, 6); 
f731ee
diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c
f731ee
index 5a609544403..9e7930caa03 100644
f731ee
--- a/grub-core/net/ip.c
f731ee
+++ b/grub-core/net/ip.c
f731ee
@@ -271,6 +271,7 @@ handle_dgram (struct grub_net_buff *nb,
f731ee
 	FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
f731ee
 	  if (inf->card == card
f731ee
 	      && inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_DHCP_RECV
f731ee
+	      && inf->dhcp_xid == bootp->xid
f731ee
 	      && inf->hwaddress.type == GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET
f731ee
 	      && grub_memcmp (inf->hwaddress.mac, &bootp->mac_addr,
f731ee
 			      sizeof (inf->hwaddress.mac)) == 0)
f731ee
diff --git a/include/grub/net.h b/include/grub/net.h
f731ee
index bd930f4dd8c..b1bc23048f1 100644
f731ee
--- a/include/grub/net.h
f731ee
+++ b/include/grub/net.h
f731ee
@@ -279,6 +279,7 @@ struct grub_net_network_level_interface
f731ee
   grub_net_interface_flags_t flags;
f731ee
   struct grub_net_bootp_packet *dhcp_ack;
f731ee
   grub_size_t dhcp_acklen;
f731ee
+  grub_uint32_t dhcp_xid;
f731ee
   void *data;
f731ee
 };
f731ee
 
f731ee
@@ -405,7 +406,7 @@ struct grub_net_bootp_packet
f731ee
   grub_uint8_t hw_type;		/* hardware type.  */
f731ee
   grub_uint8_t hw_len;		/* hardware addr len.  */
f731ee
   grub_uint8_t gate_hops;	/* zero it.  */
f731ee
-  grub_uint32_t ident;		/* random number chosen by client.  */
f731ee
+  grub_uint32_t xid;		/* transaction id chosen by client.  */
f731ee
   grub_uint16_t seconds;	/* seconds since did initial bootstrap.  */
f731ee
   grub_uint16_t flags;
f731ee
   grub_uint32_t	client_ip;