aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-12-20 13:05:13 +0100
committerThomas Haller <thaller@redhat.com>2018-12-20 13:15:49 +0100
commitb9d80714583bf40e354ad0fc364ebfb35a0b3d76 (patch)
tree30a06f29d93eb17545dd6bd279a02a7592f379fc /src
parentmount: disable mount-storm protection while mount unit is starting. (diff)
downloadsystemd-b9d80714583bf40e354ad0fc364ebfb35a0b3d76.tar.gz
systemd-b9d80714583bf40e354ad0fc364ebfb35a0b3d76.tar.bz2
systemd-b9d80714583bf40e354ad0fc364ebfb35a0b3d76.zip
dhcp: fix sd_dhcp_client_set_client_id() for infiniband addresses
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
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 3bdd584bb..ff7f54793 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -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;