]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dhcp: fix sd_dhcp_client_set_client_id() for infiniband addresses
authorThomas Haller <thaller@redhat.com>
Thu, 20 Dec 2018 12:05:13 +0000 (13:05 +0100)
committerThomas Haller <thaller@redhat.com>
Thu, 20 Dec 2018 12:15:49 +0000 (13:15 +0100)
Infiniband addresses are 20 bytes (INFINIBAND_ALEN), but only the last
8 bytes are suitable for putting into the client-id.

This bug had no effect for networkd, because sd_dhcp_client_set_client_id()
has only one caller which always uses ARPHRD_ETHER type.

I was unable to find good references for why this is correct ([1]). Fedora/RHEL
has patches for ISC dhclient that also only use the last 8 bytes ([2], [3]).
RFC 4390 (Dynamic Host Configuration Protocol (DHCP) over InfiniBand) [4] does
not discuss the content of the client-id either.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1658057#c29
[2] https://bugzilla.redhat.com/show_bug.cgi?id=660681
[3] https://src.fedoraproject.org/rpms/dhcp/blob/3ccf3c8d815df4b8e11e1a04850975f099273d5d/f/dhcp-lpf-ib.patch
[4] https://tools.ietf.org/html/rfc4390

src/libsystemd-network/sd-dhcp-client.c

index 3bdd584bb55858852d53feb2d29dc30bf987c90a..ff7f54793443558100418a498bce5a6adbb3bce5 100644 (file)
@@ -308,7 +308,9 @@ int sd_dhcp_client_set_client_id(
                 break;
 
         case ARPHRD_INFINIBAND:
-                if (data_len != INFINIBAND_ALEN)
+                /* Infiniband addresses are 20 bytes (INFINIBAND_ALEN), however only
+                 * the last 8 bytes are stable and suitable for putting into the client-id. */
+                if (data_len != 8)
                         return -EINVAL;
                 break;