Commit 1cf770da authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by Jakub Kicinski
Browse files

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: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Tested-by: default avatarIdo Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20250207072502.87775-8-kuniyu@amazon.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 98d3a6f6
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -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;
}