std-aux: workaround maybe uninitialized warning with LTO on nm_ip_addr_is_null()
LTO without assertion enabled, thinks that certain code paths
result in uninitialized code. Technically, it's not wrong, in practice
those are only in cases where we already failed an assertion.
In function 'nm_ip_addr_is_null',
inlined from 'canonicalize_ip_binary' at src/libnm-core-impl/nm-setting-ip-config.c:67:21,
inlined from 'nm_ip_route_set_next_hop_binary' at src/libnm-core-impl/nm-setting-ip-config.c:1062:23:
./src/libnm-glib-aux/nm-inet-utils.h:80:12: error: 'a' may be used uninitialized [-Werror=maybe-uninitialized]
80 | return IN6_IS_ADDR_UNSPECIFIED(&a.addr6);
| ^
src/libnm-core-impl/nm-setting-ip-config.c: In function 'nm_ip_route_set_next_hop_binary':
./src/libnm-glib-aux/nm-inet-utils.h:73:14: note: 'a' declared here
73 | NMIPAddr a;
| ^
Try to workaround that by letting nm_utils_addr_family_to_size() always
return a non-zero size. This is ugly, because in the assertion case fail
we might now also get an additional memory corruption that could have
been avoided by returning zero. However, it probably doesn't matter, because
in this scenario we are already in a bad situation.
Fixes: b02aeaf2f3
('glib-aux: fix various nm_ip_addr_*() functions for unaligned addresses')
This commit is contained in:
@@ -1298,13 +1298,10 @@ nm_utils_addr_family_other(int addr_family)
|
|||||||
static inline size_t
|
static inline size_t
|
||||||
nm_utils_addr_family_to_size(int addr_family)
|
nm_utils_addr_family_to_size(int addr_family)
|
||||||
{
|
{
|
||||||
switch (addr_family) {
|
if (!NM_IS_IPv4(addr_family))
|
||||||
case NM_AF_INET:
|
|
||||||
return NM_AF_INET_SIZE;
|
|
||||||
case NM_AF_INET6:
|
|
||||||
return NM_AF_INET6_SIZE;
|
return NM_AF_INET6_SIZE;
|
||||||
}
|
else
|
||||||
return nm_assert_unreachable_val(0);
|
return NM_AF_INET_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline size_t
|
static inline size_t
|
||||||
|
Reference in New Issue
Block a user