summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2024-04-28 23:22:56 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2024-04-29 11:32:18 +0200
commite11e8b2bc6e08462c7b0f132b62bf551fb750fb1 (patch)
tree3b4456acba934c5c2430fa3c507ed29042731670
parente234fad82180b52840766890697516903c90f7f5 (diff)
platform: enable strict check on netlink socket dumpsbg/netlink-routes
Next commits will start to specify filters when requesting netlink dumps; this requires that strict check is enabled on the socket. When enabling strict check, we need to pass full structs in the netlink message, otherwise kernel ignores it. This commit doesn't change behavior.
-rw-r--r--src/libnm-platform/nm-linux-platform.c33
-rw-r--r--src/libnm-platform/nm-netlink.c1
2 files changed, 30 insertions, 4 deletions
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index aa396f9608..be85cf56c8 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -7772,17 +7772,42 @@ _nl_msg_new_dump_rtnl(NMPObjectType obj_type, int preferred_addr_family)
g_return_val_if_reached(NULL);
} break;
case NMP_OBJECT_TYPE_LINK:
+ {
+ struct ifinfomsg ifm = {};
+
+ if (nlmsg_append_struct(nlmsg, &ifm) < 0)
+ g_return_val_if_reached(NULL);
+ break;
+ }
case NMP_OBJECT_TYPE_IP4_ADDRESS:
case NMP_OBJECT_TYPE_IP6_ADDRESS:
+ {
+ struct ifaddrmsg ifm = {
+ .ifa_family = preferred_addr_family,
+ };
+
+ if (nlmsg_append_struct(nlmsg, &ifm) < 0)
+ g_return_val_if_reached(NULL);
+ break;
+ }
case NMP_OBJECT_TYPE_IP4_ROUTE:
case NMP_OBJECT_TYPE_IP6_ROUTE:
+ {
+ struct rtmsg rtm = {
+ .rtm_family = preferred_addr_family,
+ };
+
+ if (nlmsg_append_struct(nlmsg, &rtm) < 0)
+ g_return_val_if_reached(NULL);
+ break;
+ }
case NMP_OBJECT_TYPE_ROUTING_RULE:
{
- const struct rtgenmsg gmsg = {
- .rtgen_family = preferred_addr_family,
+ struct fib_rule_hdr frh = {
+ .family = preferred_addr_family,
};
- if (nlmsg_append_struct(nlmsg, &gmsg) < 0)
+ if (nlmsg_append_struct(nlmsg, &frh) < 0)
g_return_val_if_reached(NULL);
} break;
default:
@@ -10295,7 +10320,7 @@ ip_route_get(NMPlatform *platform,
.r.rtm_family = addr_family,
.r.rtm_tos = 0,
.r.rtm_dst_len = IS_IPv4 ? 32 : 128,
- .r.rtm_flags = IPS_IPv4 ? RTM_F_LOOKUP_TABLE : 0,
+ .r.rtm_flags = IS_IPv4 ? RTM_F_LOOKUP_TABLE : 0,
};
nm_clear_pointer(&route, nmp_object_unref);
diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c
index 6d15312882..5bbbcc8474 100644
--- a/src/libnm-platform/nm-netlink.c
+++ b/src/libnm-platform/nm-netlink.c
@@ -1152,6 +1152,7 @@ nl_socket_new(struct nl_sock **out_sk,
i_val = 1;
(void) setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_EXT_ACK, &i_val, sizeof(i_val));
+ (void) setsockopt(sk->s_fd, SOL_NETLINK, NETLINK_GET_STRICT_CHK, &i_val, sizeof(i_val));
if (NM_FLAGS_HAS(flags, NL_SOCKET_FLAGS_PASSCRED)) {
err = nl_socket_set_passcred(sk, 1);