systemd-udevd: fix speed/duplex processing with valid .link files (#7808)

Including BitsPerSecond or Duplex values in .link files did not work when
set_slinksettings was called because the routine was not copying the base
parameters to the structure given to ioctl.  As a result, EINVAL was always
reported, and no change occurred on the Ethernet device.
This commit is contained in:
Bruce A. Johnson
2018-01-05 10:02:38 +01:00
committed by Zbigniew Jędrzejewski-Szmek
parent c559eecaad
commit 94d4acbe4b
+3 -3
View File
@@ -473,15 +473,15 @@ static int set_slinksettings(int *fd, struct ifreq *ifr, const struct ethtool_li
struct {
struct ethtool_link_settings req;
__u32 link_mode_data[3 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32];
} ecmd = {
.req.cmd = ETHTOOL_SLINKSETTINGS,
};
} ecmd = {};
unsigned int offset;
int r;
if (u->base.cmd != ETHTOOL_GLINKSETTINGS || u->base.link_mode_masks_nwords <= 0)
return -EINVAL;
memcpy(&ecmd.req, &u->base, sizeof(ecmd.req));
ecmd.req.cmd = ETHTOOL_SLINKSETTINGS;
offset = 0;
memcpy(&ecmd.link_mode_data[offset], u->link_modes.supported, 4 * ecmd.req.link_mode_masks_nwords);