diff options
author | Thomas Haller <thaller@redhat.com> | 2020-02-10 12:09:51 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-02-10 12:10:08 +0100 |
commit | e658938ac5d76705f306d2e37f55de39c8a474c1 (patch) | |
tree | 12e5a2be5b16cf448f84f04473d7cb77084f3117 | |
parent | 5cc8ca4038454bdf5c7be205396433362d12b839 (diff) | |
parent | d892a35395c37a94219c3e00202f190de8d5b991 (diff) | |
download | NetworkManager-e658938ac5d76705f306d2e37f55de39c8a474c1.tar.gz |
platform: merge branch 'th/platform-ethtool-gcc10-warnings'
-rw-r--r-- | src/platform/nm-platform-utils.c | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index 492572833e..9529b9c5f0 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -335,25 +335,27 @@ _ethtool_call_once (int ifindex, gpointer edata, gsize edata_size) static struct ethtool_gstrings * ethtool_get_stringset (SocketHandle *shandle, int stringset_id) { - char buf[sizeof (struct ethtool_sset_info) + sizeof (guint32)]; - struct ethtool_sset_info *sset_info; + struct { + struct ethtool_sset_info info; + guint32 sentinel; + } sset_info = { + .info.cmd = ETHTOOL_GSSET_INFO, + .info.reserved = 0, + .info.sset_mask = (1ULL << stringset_id), + }; + const guint32 *pdata; gs_free struct ethtool_gstrings *gstrings = NULL; gsize gstrings_len; guint32 i, len; - sset_info = (struct ethtool_sset_info *) buf; - *sset_info = (struct ethtool_sset_info) { - .cmd = ETHTOOL_GSSET_INFO, - .reserved = 0, - .sset_mask = (1ULL << stringset_id), - }; - - if (_ethtool_call_handle (shandle, sset_info, sizeof (*sset_info)) < 0) + if (_ethtool_call_handle (shandle, &sset_info, sizeof (sset_info)) < 0) return NULL; - if (!sset_info->sset_mask) + if (!sset_info.info.sset_mask) return NULL; - len = sset_info->data[0]; + pdata = (guint32 *) sset_info.info.data; + + len = *pdata; gstrings_len = sizeof (*gstrings) + (len * ETH_GSTRING_LEN); gstrings = g_malloc0 (gstrings_len); @@ -832,42 +834,44 @@ nmp_utils_ethtool_get_permanent_address (int ifindex, guint8 *buf, size_t *length) { - char ebuf[sizeof (struct ethtool_perm_addr) + NM_UTILS_HWADDR_LEN_MAX + 1]; - struct ethtool_perm_addr *edata; + struct { + struct ethtool_perm_addr e; + guint8 _extra_data[NM_UTILS_HWADDR_LEN_MAX + 1]; + } edata = { + .e.cmd = ETHTOOL_GPERMADDR, + .e.size = NM_UTILS_HWADDR_LEN_MAX, + }; + const guint8 *pdata; guint i; g_return_val_if_fail (ifindex > 0, FALSE); - edata = (struct ethtool_perm_addr *) ebuf; - *edata = (struct ethtool_perm_addr) { - .cmd = ETHTOOL_GPERMADDR, - .size = NM_UTILS_HWADDR_LEN_MAX, - }; - - if (_ethtool_call_once (ifindex, edata, sizeof (*edata)) < 0) + if (_ethtool_call_once (ifindex, &edata, sizeof (edata)) < 0) return FALSE; - if (edata->size > NM_UTILS_HWADDR_LEN_MAX) + if (edata.e.size > NM_UTILS_HWADDR_LEN_MAX) return FALSE; - if (edata->size < 1) + if (edata.e.size < 1) return FALSE; - if (NM_IN_SET (edata->data[0], 0, 0xFF)) { + pdata = (const guint8 *) edata.e.data; + + if (NM_IN_SET (pdata[0], 0, 0xFF)) { /* Some drivers might return a permanent address of all zeros. * Reject that (rh#1264024) * * Some drivers return a permanent address of all ones. Reject that too */ - for (i = 1; i < edata->size; i++) { - if (edata->data[0] != edata->data[i]) + for (i = 1; i < edata.e.size; i++) { + if (pdata[0] != pdata[i]) goto not_all_0or1; } return FALSE; } not_all_0or1: - memcpy (buf, edata->data, edata->size); - *length = edata->size; + memcpy (buf, pdata, edata.e.size); + *length = edata.e.size; return TRUE; } |