net: fib_rules: Use nlmsg_payload in fib_{new,del}rule()
authorBreno Leitao <leitao@debian.org>
Mon, 14 Apr 2025 13:24:16 +0000 (06:24 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 15 Apr 2025 15:28:55 +0000 (08:28 -0700)
Leverage the new nlmsg_payload() helper to avoid checking for message
size and then reading the nlmsg data.

Suggested-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250414-nlmsg-v2-10-3d90cb42c6af@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/fib_rules.c

index 6a7a28bf631c2ebf1f527a8ad4f75ac7ac4bf391..06052b6c946b93b84d2bb355fa3f2681f8325c08 100644 (file)
@@ -852,13 +852,14 @@ int fib_newrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
                struct netlink_ext_ack *extack, bool rtnl_held)
 {
        struct fib_rule *rule = NULL, *r, *last = NULL;
-       struct fib_rule_hdr *frh = nlmsg_data(nlh);
        int err = -EINVAL, unresolved = 0;
        struct fib_rules_ops *ops = NULL;
        struct nlattr *tb[FRA_MAX + 1];
        bool user_priority = false;
+       struct fib_rule_hdr *frh;
 
-       if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*frh))) {
+       frh = nlmsg_payload(nlh, sizeof(*frh));
+       if (!frh) {
                NL_SET_ERR_MSG(extack, "Invalid msg length");
                goto errout;
        }
@@ -980,13 +981,14 @@ int fib_delrule(struct net *net, struct sk_buff *skb, struct nlmsghdr *nlh,
                struct netlink_ext_ack *extack, bool rtnl_held)
 {
        struct fib_rule *rule = NULL, *nlrule = NULL;
-       struct fib_rule_hdr *frh = nlmsg_data(nlh);
        struct fib_rules_ops *ops = NULL;
        struct nlattr *tb[FRA_MAX+1];
        bool user_priority = false;
+       struct fib_rule_hdr *frh;
        int err = -EINVAL;
 
-       if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*frh))) {
+       frh = nlmsg_payload(nlh, sizeof(*frh));
+       if (!frh) {
                NL_SET_ERR_MSG(extack, "Invalid msg length");
                goto errout;
        }