nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

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

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