summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-12-11 11:43:38 +0100
committerThomas Haller <thaller@redhat.com>2021-06-10 15:45:59 +0200
commit675c7df8c21c6260205d262462419835ee95b0c4 (patch)
treec79727566c14a5cc01dc0942221ca0a712b9a3d5
parent26ba5e9d9e335ecd4a36e4960d0c1d1deb76aaef (diff)
downloadNetworkManager-675c7df8c21c6260205d262462419835ee95b0c4.tar.gz
libnm: suppress "-Warray-bounds" warning in nm_team_link_watcher_new_ethtool()
gcc-11.0.0-0.7.fc34 warns here: CC libnm-core/libnm_core_la-nm-setting-team.lo libnm-core/nm-setting-team.c: In function ‘nm_team_link_watcher_new_ethtool’: libnm-core/nm-setting-team.c:127:33: error: array subscript ‘NMTeamLinkWatcher[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Werror=array-bounds] 127 | watcher->ref_count = 1; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~ libnm-core/nm-setting-team.c:125:15: note: referencing an object of size 16 allocated by ‘g_malloc’ 125 | watcher = g_malloc(nm_offsetofend(NMTeamLinkWatcher, ethtool)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ libnm-core/nm-setting-team.c:128:33: error: array subscript ‘NMTeamLinkWatcher[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Werror=array-bounds] 128 | watcher->type = LINK_WATCHER_ETHTOOL; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~ libnm-core/nm-setting-team.c:125:15: note: referencing an object of size 16 allocated by ‘g_malloc’ 125 | watcher = g_malloc(nm_offsetofend(NMTeamLinkWatcher, ethtool)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ libnm-core/nm-setting-team.c:129:33: error: array subscript ‘NMTeamLinkWatcher[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Werror=array-bounds] 129 | watcher->ethtool.delay_up = delay_up; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ libnm-core/nm-setting-team.c:125:15: note: referencing an object of size 16 allocated by ‘g_malloc’ 125 | watcher = g_malloc(nm_offsetofend(NMTeamLinkWatcher, ethtool)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ libnm-core/nm-setting-team.c:130:33: error: array subscript ‘NMTeamLinkWatcher[0]’ is partly outside array bounds of ‘unsigned char[16]’ [-Werror=array-bounds] 130 | watcher->ethtool.delay_down = delay_down; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~ libnm-core/nm-setting-team.c:125:15: note: referencing an object of size 16 allocated by ‘g_malloc’ 125 | watcher = g_malloc(nm_offsetofend(NMTeamLinkWatcher, ethtool)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Maybe we should not use this trick and just malloc() a struct of the intended size, however: - the code below does a similar thing, doing it differently for ethtool watcher is confusing. - the NMTeamLinkWatcher is a union which cannot alter its type. In no case is it correct to access the fields of the wrong union type. By allocating a smaller chunk, valgrind might catch such bugs. Also, NMTeamLinkWatcher's definition is private to the C source file, in no case must anybody assume that the rest of the buffer actually exists. Hence, workaround the warning by suppressing it. (cherry picked from commit e5699dbcb7aa56b49b9fae442e61fc254249b595) (cherry picked from commit 221547bc21b033f53078d173d4c767a52cc4bca8) (cherry picked from commit 8f3cf4f3e86707a561a0919ae8c809428a4db00e)
-rw-r--r--libnm-core/nm-setting-team.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libnm-core/nm-setting-team.c b/libnm-core/nm-setting-team.c
index 1e8c7149dc..4f4637eeda 100644
--- a/libnm-core/nm-setting-team.c
+++ b/libnm-core/nm-setting-team.c
@@ -116,6 +116,8 @@ nm_team_link_watcher_new_ethtool (int delay_up,
return NULL;
}
+ NM_PRAGMA_WARNING_DISABLE("-Warray-bounds")
+
watcher = g_malloc (nm_offsetofend (NMTeamLinkWatcher, ethtool));
watcher->ref_count = 1;
@@ -123,6 +125,8 @@ nm_team_link_watcher_new_ethtool (int delay_up,
watcher->ethtool.delay_up = delay_up;
watcher->ethtool.delay_down = delay_down;
+ NM_PRAGMA_WARNING_REENABLE
+
return watcher;
}