fix #4080
authorSusant Sahani <susant@redhat.com>
Fri, 2 Sep 2016 10:36:58 +0000 (16:06 +0530)
committerSusant Sahani <susant@redhat.com>
Fri, 2 Sep 2016 10:36:58 +0000 (16:06 +0530)
ethtool_sset_info  adding some extra space to it.

also fix valgrind warning
```
Unloaded link configuration context.
==31690==
==31690== HEAP SUMMARY:
==31690==     in use at exit: 8,192 bytes in 2 blocks
==31690==   total heap usage: 431 allocs, 429 frees, 321,164 bytes allocated
==31690==
==31690== 4,096 bytes in 1 blocks are still reachable in loss record 1 of 2
==31690==    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
==31690==    by 0x166B32: mempool_alloc_tile (mempool.c:62)
==31690==    by 0x166BBC: mempool_alloc0_tile (mempool.c:81)
==31690==    by 0x15B8FC: hashmap_base_new (hashmap.c:732)
==31690==    by 0x15B9F7: internal_hashmap_new (hashmap.c:766)
==31690==    by 0x151291: conf_files_list_strv_internal (conf-files.c:103)
==31690==    by 0x1514BA: conf_files_list_strv (conf-files.c:135)
==31690==    by 0x13A1CF: link_config_load (link-config.c:227)
==31690==    by 0x135B68: builtin_net_setup_link_init
(udev-builtin-net_setup_link.c:77)
==31690==    by 0x1306B3: udev_builtin_init (udev-builtin.c:57)
==31690==    by 0x11E984: adm_builtin (udevadm-test-builtin.c:72)
==31690==    by 0x117B4D: run_command (udevadm.c:75)
```
Fixes #4080

src/udev/net/ethtool-util.c

index 19c69a9..b1aa022 100644 (file)
@@ -217,24 +217,28 @@ int ethtool_set_wol(int *fd, const char *ifname, WakeOnLan wol) {
 
 static int ethtool_get_stringset(int *fd, struct ifreq *ifr, int stringset_id, struct ethtool_gstrings **gstrings) {
         _cleanup_free_ struct ethtool_gstrings *strings = NULL;
-        struct ethtool_sset_info info =  {
-                .cmd = ETHTOOL_GSSET_INFO,
-                .reserved = 0,
-                .sset_mask = 1ULL << stringset_id,
+        struct {
+                struct ethtool_sset_info info;
+                uint32_t space;
+        } buffer = {
+                .info = {
+                        .cmd = ETHTOOL_GSSET_INFO,
+                        .sset_mask = UINT64_C(1) << stringset_id,
+                },
         };
         unsigned len;
         int r;
 
-        ifr->ifr_data = (void *) &info;
+        ifr->ifr_data = (void *) &buffer.info;
 
         r = ioctl(*fd, SIOCETHTOOL, ifr);
         if (r < 0)
                 return -errno;
 
-        if (!info.sset_mask)
+        if (!buffer.info.sset_mask)
                 return -EINVAL;
 
-        len = info.data[0];
+        len = buffer.info.data[0];
 
         strings = malloc0(sizeof(struct ethtool_gstrings) + len * ETH_GSTRING_LEN);
         if (!strings)
@@ -271,7 +275,7 @@ int ethtool_set_features(int *fd, const char *ifname, NetDevFeature *features) {
         _cleanup_free_ struct ethtool_gstrings *strings = NULL;
         struct ethtool_sfeatures *sfeatures;
         int block, bit, i, r;
-        struct ifreq ifr;
+        struct ifreq ifr = {};
 
         if (*fd < 0) {
                 r = ethtool_connect(fd);