From 936b60e00f099a40acdbb3d1b1562709e5ef433f Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Thu, 6 May 2021 19:01:16 +0200 Subject: [PATCH] wifi: avoid large shift for calculating netmask in ip4_config_to_iwd_config() Found by Coverity: Error: BAD_SHIFT (CWE-682): [#def53] NetworkManager-1.31.3/src/core/devices/wifi/nm-wifi-utils.c:1590: zero_return: Function call "nm_ip_address_get_prefix(addr)" returns 0. NetworkManager-1.31.3/src/core/devices/wifi/nm-wifi-utils.c:1590: assignment: Assigning: "prefix" = "nm_ip_address_get_prefix(addr)". The value of "prefix" is now 0. NetworkManager-1.31.3/src/core/devices/wifi/nm-wifi-utils.c:1591: large_shift: In expression "0xffffffffU << 32U - prefix", left shifting by more than 31 bits has undefined behavior. The shift amount, "32U - prefix", is 32. # 1589| NMIPAddress *addr = nm_setting_ip_config_get_address(s_ip, 0); # 1590| guint prefix = nm_ip_address_get_prefix(addr); # 1591|-> in_addr_t netmask = htonl(0xffffffffu << (32 - prefix)); # 1592| char buf[INET_ADDRSTRLEN]; # 1593| Fixes: 9d22ae7981d7 ('wifi: Add utilities for writing IWD connection profiles') --- src/core/devices/wifi/nm-wifi-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/devices/wifi/nm-wifi-utils.c b/src/core/devices/wifi/nm-wifi-utils.c index a8209c36bb..9250e6dd42 100644 --- a/src/core/devices/wifi/nm-wifi-utils.c +++ b/src/core/devices/wifi/nm-wifi-utils.c @@ -1591,7 +1591,7 @@ ip4_config_to_iwd_config(GKeyFile *file, NMSettingIPConfig *s_ip, GError **error if (num) { NMIPAddress *addr = nm_setting_ip_config_get_address(s_ip, 0); guint prefix = nm_ip_address_get_prefix(addr); - in_addr_t netmask = htonl(0xffffffffu << (32 - prefix)); + in_addr_t netmask = _nm_utils_ip4_prefix_to_netmask(prefix); char buf[INET_ADDRSTRLEN]; nm_ip_address_get_address_binary(addr, &ip);