]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rtnetlink: Honour NLM_F_ECHO flag in rtnl_newlink_create
authorHangbin Liu <liuhangbin@gmail.com>
Fri, 28 Oct 2022 08:42:23 +0000 (04:42 -0400)
committerJakub Kicinski <kuba@kernel.org>
Tue, 1 Nov 2022 01:10:21 +0000 (18:10 -0700)
This patch pass the netlink header message in rtnl_newlink_create() to
the new updated rtnl_configure_link(), so that the kernel could reply
unicast when userspace set NLM_F_ECHO flag to request the new created
interface info.

Suggested-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
Reviewed-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/rtnetlink.c

index c9dd9730f3c6c565f3596e53b6937e80e8f95bf0..839ff8b7eadcb690985974e002d6bb08b791c9d4 100644 (file)
@@ -3312,11 +3312,13 @@ static int rtnl_group_changelink(const struct sk_buff *skb,
 
 static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
                               const struct rtnl_link_ops *ops,
+                              const struct nlmsghdr *nlh,
                               struct nlattr **tb, struct nlattr **data,
                               struct netlink_ext_ack *extack)
 {
        unsigned char name_assign_type = NET_NAME_USER;
        struct net *net = sock_net(skb->sk);
+       u32 portid = NETLINK_CB(skb).portid;
        struct net *dest_net, *link_net;
        struct net_device *dev;
        char ifname[IFNAMSIZ];
@@ -3370,7 +3372,7 @@ static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
                goto out;
        }
 
-       err = rtnl_configure_link(dev, ifm, 0, NULL);
+       err = rtnl_configure_link(dev, ifm, portid, nlh);
        if (err < 0)
                goto out_unregister;
        if (link_net) {
@@ -3579,7 +3581,7 @@ replay:
                return -EOPNOTSUPP;
        }
 
-       return rtnl_newlink_create(skb, ifm, ops, tb, data, extack);
+       return rtnl_newlink_create(skb, ifm, ops, nlh, tb, data, extack);
 }
 
 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,