net: fib_rules: Add error_free label in fib_delrule().

We will hold RTNL just before calling fib_nl2rule_rtnl() in
fib_delrule() and release it before kfree(nlrule).

Let's add a new rule to make the following change cleaner.

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-8-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Kuniyuki Iwashima 2025-02-07 16:25:01 +09:00 committed by Jakub Kicinski
parent 98d3a6f681
commit 1cf770da01

View File

@ -946,23 +946,23 @@ int fib_delrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
err = fib_nl2rule_rtnl(nlrule, ops, tb, extack);
if (err)
goto errout;
goto errout_free;
rule = rule_find(ops, frh, tb, nlrule, user_priority);
if (!rule) {
err = -ENOENT;
goto errout;
goto errout_free;
}
if (rule->flags & FIB_RULE_PERMANENT) {
err = -EPERM;
goto errout;
goto errout_free;
}
if (ops->delete) {
err = ops->delete(rule);
if (err)
goto errout;
goto errout_free;
}
if (rule->tun_id)
@ -1008,8 +1008,9 @@ int fib_delrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
kfree(nlrule);
return 0;
errout:
errout_free:
kfree(nlrule);
errout:
rules_ops_put(ops);
return err;
}