merge: branch 'bg/netlink-strict-check'

Enable strict check on the netlink socket

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1962
This commit is contained in:
Beniamino Galvani 2024-06-26 07:54:02 +00:00
commit 14eaf4e419
2 changed files with 38 additions and 7 deletions

View file

@ -337,6 +337,11 @@ struct _ifla_vf_vlan_info {
#define BRIDGE_VLAN_INFO_RANGE_END (1 << 4) /* VLAN is end of vlan range */
#endif
/* Appeared in kernel 4.2 dated August 2015 */
#ifndef RTM_F_LOOKUP_TABLE
#define RTM_F_LOOKUP_TABLE 0x1000 /* set rtm_table to FIB lookup result */
#endif
/*****************************************************************************/
#define PSCHED_TIME_UNITS_PER_SEC 1000000
@ -7784,17 +7789,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:
case NMP_OBJECT_TYPE_IP4_ROUTE:
case NMP_OBJECT_TYPE_IP6_ROUTE:
case NMP_OBJECT_TYPE_ROUTING_RULE:
{
const struct rtgenmsg gmsg = {
.rtgen_family = preferred_addr_family,
struct ifaddrmsg ifm = {
.ifa_family = preferred_addr_family,
};
if (nlmsg_append_struct(nlmsg, &gmsg) < 0)
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:
{
struct fib_rule_hdr frh = {
.family = preferred_addr_family,
};
if (nlmsg_append_struct(nlmsg, &frh) < 0)
g_return_val_if_reached(NULL);
} break;
default:
@ -10307,7 +10337,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 = 0x1000 /* RTM_F_LOOKUP_TABLE */,
.r.rtm_flags = IS_IPv4 ? RTM_F_LOOKUP_TABLE : 0,
};
nm_clear_pointer(&route, nmp_object_unref);

View file

@ -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);