platform: rename NMP_SYSCTL_PATHID_NETDIR() to have "_A" suffix

The macro uses g_alloca(). Using alloca() is potentially dangerous. For
example, it must never be used in an unbounded loop. This should be
immediately obvious from the name, so we don't accidentally use them
in the wrong context.

All other alloca() macros should have such a prefix already. And they
always have to be macros, because you couldn't use alloca() to return
memory from a function.
This commit is contained in:
Thomas Haller 2023-06-26 15:01:04 +02:00
parent ee80fabadb
commit f727c233c4
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
5 changed files with 49 additions and 47 deletions

View file

@ -87,7 +87,7 @@ act_stage1_prepare(NMDevice *device, NMDeviceStateReason *out_failure_reason)
/* With some drivers the interface must be down to set transport mode */
nm_device_take_down(device, TRUE);
ok = nm_platform_sysctl_set(nm_device_get_platform(device),
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_verified, "mode"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_verified, "mode"),
transport_mode);
nm_device_bring_up(device);

View file

@ -3603,7 +3603,7 @@ test_sysctl_rename(void)
==,
(gint32) nm_platform_sysctl_get_int32(
PL,
NMP_SYSCTL_PATHID_NETDIR(dirfd, s ?: "<unknown>", "ifindex"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, s ?: "<unknown>", "ifindex"),
-1));
break;
}
@ -3675,7 +3675,7 @@ test_sysctl_netns_switch(void)
==,
(gint32) nm_platform_sysctl_get_int32(
PL,
NMP_SYSCTL_PATHID_NETDIR(dirfd, s ?: "<unknown>", "ifindex"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, s ?: "<unknown>", "ifindex"),
-1));
g_assert_cmpint(
ifindex,

View file

@ -8669,10 +8669,10 @@ link_supports_sriov(NMPlatform *platform, int ifindex)
if (dirfd < 0)
return FALSE;
num =
nm_platform_sysctl_get_int32(platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_numvfs"),
-1);
num = nm_platform_sysctl_get_int32(
platform,
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_numvfs"),
-1);
return num != -1;
}
@ -8806,7 +8806,7 @@ link_set_sriov_params_async(NMPlatform *platform,
total = nm_platform_sysctl_get_int_checked(
platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_totalvfs"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_totalvfs"),
10,
0,
G_MAXUINT,
@ -8824,14 +8824,14 @@ link_set_sriov_params_async(NMPlatform *platform,
*/
current_num = nm_platform_sysctl_get_int_checked(
platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_numvfs"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_numvfs"),
10,
0,
G_MAXUINT,
-1);
current_autoprobe = nm_platform_sysctl_get_int_checked(
platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_drivers_autoprobe"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_drivers_autoprobe"),
10,
0,
1,
@ -8851,7 +8851,7 @@ link_set_sriov_params_async(NMPlatform *platform,
&& current_autoprobe != autoprobe
&& !nm_platform_sysctl_set(
platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_drivers_autoprobe"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_drivers_autoprobe"),
nm_sprintf_buf(buf, "%d", (int) autoprobe))) {
g_set_error(&error,
NM_UTILS_ERROR,
@ -8873,7 +8873,7 @@ link_set_sriov_params_async(NMPlatform *platform,
values[i++] = NULL;
sysctl_set_async(platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "device/sriov_numvfs"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "device/sriov_numvfs"),
values,
callback,
data,
@ -9109,7 +9109,7 @@ link_get_physical_port_id(NMPlatform *platform, int ifindex)
dirfd = nm_platform_sysctl_open_netdir(platform, ifindex, ifname_verified);
if (dirfd < 0)
return NULL;
return sysctl_get(platform, NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_verified, "phys_port_id"));
return sysctl_get(platform, NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_verified, "phys_port_id"));
}
static guint
@ -9123,7 +9123,7 @@ link_get_dev_id(NMPlatform *platform, int ifindex)
return 0;
return nm_platform_sysctl_get_int_checked(
platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_verified, "dev_id"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_verified, "dev_id"),
16,
0,
G_MAXUINT16,
@ -9373,12 +9373,12 @@ _infiniband_partition_action(NMPlatform *platform,
if (action == INFINIBAND_ACTION_CREATE_CHILD)
success =
nm_platform_sysctl_set(platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_parent, "create_child"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_parent, "create_child"),
id);
else
success =
nm_platform_sysctl_set(platform,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_parent, "delete_child"),
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_parent, "delete_child"),
id);
if (!success) {

View file

@ -2771,7 +2771,7 @@ link_set_option(NMPlatform *self,
path =
nm_sprintf_buf_unsafe_a(strlen(category) + strlen(option) + 2, "%s/%s", category, option);
return nm_platform_sysctl_set(self,
NMP_SYSCTL_PATHID_NETDIR_unsafe(dirfd, ifname_verified, path),
NMP_SYSCTL_PATHID_NETDIR_UNSAFE_A(dirfd, ifname_verified, path),
value);
}
@ -2792,7 +2792,7 @@ link_get_option(NMPlatform *self, int ifindex, const char *category, const char
path =
nm_sprintf_buf_unsafe_a(strlen(category) + strlen(option) + 2, "%s/%s", category, option);
return nm_platform_sysctl_get(self,
NMP_SYSCTL_PATHID_NETDIR_unsafe(dirfd, ifname_verified, path));
NMP_SYSCTL_PATHID_NETDIR_UNSAFE_A(dirfd, ifname_verified, path));
}
static const char *
@ -3073,7 +3073,7 @@ nm_platform_link_infiniband_get_properties(NMPlatform *self,
return FALSE;
contents =
nm_platform_sysctl_get(self, NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_verified, "mode"));
nm_platform_sysctl_get(self, NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_verified, "mode"));
if (!contents)
return FALSE;
if (strstr(contents, "datagram"))
@ -3084,13 +3084,13 @@ nm_platform_link_infiniband_get_properties(NMPlatform *self,
mode = NULL;
g_free(contents);
p_key =
nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname_verified, "pkey"),
16,
0,
0xFFFF,
-1);
p_key = nm_platform_sysctl_get_int_checked(
self,
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname_verified, "pkey"),
16,
0,
0xFFFF,
-1);
if (p_key < 0)
return FALSE;
@ -3192,31 +3192,33 @@ nm_platform_link_tun_get_properties(NMPlatform *self, int ifindex, NMPlatformLnk
if (dirfd < 0)
return FALSE;
owner = nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "owner"),
10,
-1,
G_MAXUINT32,
-2);
owner =
nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "owner"),
10,
-1,
G_MAXUINT32,
-2);
if (owner == -2)
return FALSE;
group = nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "group"),
10,
-1,
G_MAXUINT32,
-2);
group =
nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "group"),
10,
-1,
G_MAXUINT32,
-2);
if (group == -2)
return FALSE;
flags =
nm_platform_sysctl_get_int_checked(self,
NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, "tun_flags"),
16,
0,
G_MAXINT64,
-1);
flags = nm_platform_sysctl_get_int_checked(
self,
NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, "tun_flags"),
16,
0,
G_MAXINT64,
-1);
if (flags == -1)
return FALSE;
}

View file

@ -1534,7 +1534,7 @@ const char *nm_link_type_to_string(NMLinkType link_type);
#define NMP_SYSCTL_PATHID_ABSOLUTE(path) ((const char *) NULL), -1, (path)
#define NMP_SYSCTL_PATHID_NETDIR_unsafe(dirfd, ifname, path) \
#define NMP_SYSCTL_PATHID_NETDIR_UNSAFE_A(dirfd, ifname, path) \
nm_sprintf_buf_unsafe_a(NM_STRLEN("net:/sys/class/net//\0") + NM_IFNAMSIZ + ({ \
const gsize _l = strlen(path); \
\
@ -1546,7 +1546,7 @@ const char *nm_link_type_to_string(NMLinkType link_type);
(path)), \
(dirfd), (path)
#define NMP_SYSCTL_PATHID_NETDIR(dirfd, ifname, path) \
#define NMP_SYSCTL_PATHID_NETDIR_A(dirfd, ifname, path) \
nm_sprintf_bufa(NM_STRLEN("net:/sys/class/net//" path "/\0") + NM_IFNAMSIZ, \
"net:/sys/class/net/%s/%s", \
(ifname), \