]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Fri, 7 Feb 2025 07:24:58 +0000 (16:24 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2025 12:37:05 +0000 (14:37 +0200)
[ Upstream commit 5a1ccffd30a08f5a2428cd5fbb3ab03e8eb6c66d ]

The following patch will not set skb->sk from VRF path.

Let's fetch net from fib_rule->fr_net instead of sock_net(skb->sk)
in fib[46]_rule_configure().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Tested-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20250207072502.87775-5-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/ipv4/fib_rules.c
net/ipv6/fib6_rules.c

index d279cb8ac1584487885f66819634b421c01bf819..a270951386e19c05c5ef0ef811831ec6d7cf9c9f 100644 (file)
@@ -226,9 +226,9 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
                               struct nlattr **tb,
                               struct netlink_ext_ack *extack)
 {
-       struct net *net = sock_net(skb->sk);
+       struct fib4_rule *rule4 = (struct fib4_rule *)rule;
+       struct net *net = rule->fr_net;
        int err = -EINVAL;
-       struct fib4_rule *rule4 = (struct fib4_rule *) rule;
 
        if (frh->tos & ~IPTOS_TOS_MASK) {
                NL_SET_ERR_MSG(extack, "Invalid tos");
index cf9a44fb8243dbb7677da98e14988a825584a5a6..0d4e82744921ffaa6b47a87d53c888ead0817b0c 100644 (file)
@@ -353,9 +353,9 @@ static int fib6_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
                               struct nlattr **tb,
                               struct netlink_ext_ack *extack)
 {
+       struct fib6_rule *rule6 = (struct fib6_rule *)rule;
+       struct net *net = rule->fr_net;
        int err = -EINVAL;
-       struct net *net = sock_net(skb->sk);
-       struct fib6_rule *rule6 = (struct fib6_rule *) rule;
 
        if (rule->action == FR_ACT_TO_TBL && !rule->l3mdev) {
                if (rule->table == RT6_TABLE_UNSPEC) {