From e9c76f375b62bec8d65dc6bf0e7594e68a212418 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 16 May 2019 10:11:39 +0200 Subject: [PATCH] platform: avoid valgrind warning about uninitialised memory in _ioctl_call() ==6207== Syscall param ioctl(SIOCETHTOOL) points to uninitialised byte(s) ==6207== at 0x514603B: ioctl (syscall-template.S:78) ==6207== by 0x19FC2F: _ioctl_call (nm-platform-utils.c:183) ==6207== by 0x1A026B: _ethtool_call_handle (nm-platform-utils.c:319) ==6207== by 0x1A031F: ethtool_get_stringset (nm-platform-utils.c:378) ==6207== by 0x1A03BC: ethtool_get_stringset_index (nm-platform-utils.c:414) ==6207== by 0x1A181E: nmp_utils_ethtool_supports_vlans (nm-platform-utils.c:912) ==6207== by 0x1756D7: link_supports_vlans (nm-linux-platform.c:6508) ==6207== by 0x1A81D8: nm_platform_link_supports_vlans (nm-platform.c:1536) ==6207== by 0x14B96B: test_internal (test-link.c:602) ==6207== by 0x4F5C18D: test_case_run (gtestutils.c:2597) ==6207== by 0x4F5C18D: g_test_run_suite_internal (gtestutils.c:2685) ==6207== by 0x4F5BF33: g_test_run_suite_internal (gtestutils.c:2697) ==6207== by 0x4F5C679: g_test_run_suite (gtestutils.c:2772) ==6207== by 0x4F5C694: g_test_run (gtestutils.c:2007) ==6207== by 0x166B4D: main (test-common.c:2092) ==6207== Address 0x1ffeffeecf is on thread 1's stack ==6207== in frame #1, created by _ioctl_call (nm-platform-utils.c:110) ==6207== "ifname" is the stack-allocated array "known_ifnames" of suitable IFNAMSIZ bytes. But it may not be fully initialized, so using memcpy() to copy the string leads to unintialized warning. We really should only copy the valid bytes, either with strcpy() or our nm_utils_ifname_cpy() wrapper. Fixes: 856322562eff ('platform/ethtool,mii: retry ioctl when interface name was renamed for ehttool/mii') --- src/platform/nm-platform-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/nm-platform-utils.c b/src/platform/nm-platform-utils.c index df0efa270..c3f1842bd 100644 --- a/src/platform/nm-platform-utils.c +++ b/src/platform/nm-platform-utils.c @@ -174,7 +174,7 @@ again: nm_assert (fd >= 0); memset (&ifr, 0, sizeof (ifr)); - memcpy (ifr.ifr_name, ifname, IFNAMSIZ); + nm_utils_ifname_cpy (ifr.ifr_name, ifname); if (edata_type == IOCTL_CALL_DATA_TYPE_IFRDATA) ifr.ifr_data = edata; else if (edata_type == IOCTL_CALL_DATA_TYPE_IFRU)