]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[pxe] Always reconstruct packet for PXENV_GET_CACHED_INFO
authorMichael Brown <mcb30@ipxe.org>
Mon, 29 Jun 2015 08:58:16 +0000 (09:58 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 29 Jun 2015 09:18:39 +0000 (10:18 +0100)
Avoid accidentally returning stale packets (e.g. for a previously
attempted network device) by always constructing a fresh DHCP packet.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/interface/pxe/pxe_preboot.c

index 7cb82f74e1edc1b1f2c3509e7ade86c7e14cec2c..6e09080bc82600135b3e2db250991056e102cb46 100644 (file)
@@ -178,18 +178,16 @@ pxenv_get_cached_info ( struct s_PXENV_GET_CACHED_INFO *get_cached_info ) {
        }
        info = &cached_info[idx];
 
-       /* Construct cached version of packet, if not already constructed. */
-       if ( ! info->dhcphdr.op ) {
-               /* Construct DHCP packet */
-               creator = &pxe_dhcp_packet_creators[idx];
-               if ( ( rc = creator->create ( pxe_netdev, info,
-                                             sizeof ( *info ) ) ) != 0 ) {
-                       DBGC ( &pxe_netdev, " failed to build packet: %s\n",
-                              strerror ( rc ) );
-                       goto err;
-               }
+       /* Construct DHCP packet */
+       creator = &pxe_dhcp_packet_creators[idx];
+       if ( ( rc = creator->create ( pxe_netdev, info,
+                                     sizeof ( *info ) ) ) != 0 ) {
+               DBGC ( &pxe_netdev, " failed to build packet: %s\n",
+                      strerror ( rc ) );
+               goto err;
        }
 
+       /* Copy packet (if applicable) */
        len = get_cached_info->BufferSize;
        if ( len == 0 ) {
                /* Point client at our cached buffer.