xfrm: propagate extack to all netlink doit handlers
authorSabrina Dubroca <sd@queasysnail.net>
Tue, 30 Aug 2022 14:23:07 +0000 (16:23 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Wed, 31 Aug 2022 09:21:53 +0000 (11:21 +0200)
xfrm_user_rcv_msg() already handles extack, we just need to pass it down.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_user.c

index 2ff017117730322301d11ccef7d1959706ab3c68..cfa35d76fb7e1f6e444d65348552ad4b4958c871 100644 (file)
@@ -678,7 +678,7 @@ error_no_put:
 }
 
 static int xfrm_add_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                      struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_usersa_info *p = nlmsg_data(nlh);
@@ -757,7 +757,7 @@ static struct xfrm_state *xfrm_user_state_lookup(struct net *net,
 }
 
 static int xfrm_del_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                      struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_state *x;
@@ -1254,7 +1254,8 @@ static int build_spdinfo(struct sk_buff *skb, struct net *net,
 }
 
 static int xfrm_set_spdinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
-                           struct nlattr **attrs)
+                           struct nlattr **attrs,
+                           struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrmu_spdhthresh *thresh4 = NULL;
@@ -1299,7 +1300,8 @@ static int xfrm_set_spdinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_get_spdinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                           struct nlattr **attrs,
+                           struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct sk_buff *r_skb;
@@ -1358,7 +1360,8 @@ static int build_sadinfo(struct sk_buff *skb, struct net *net,
 }
 
 static int xfrm_get_sadinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                           struct nlattr **attrs,
+                           struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct sk_buff *r_skb;
@@ -1378,7 +1381,7 @@ static int xfrm_get_sadinfo(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_get_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                      struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_usersa_id *p = nlmsg_data(nlh);
@@ -1402,7 +1405,8 @@ out_noput:
 }
 
 static int xfrm_alloc_userspi(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                             struct nlattr **attrs,
+                             struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_state *x;
@@ -1754,7 +1758,8 @@ static struct xfrm_policy *xfrm_policy_construct(struct net *net, struct xfrm_us
 }
 
 static int xfrm_add_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                          struct nlattr **attrs,
+                          struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_userpolicy_info *p = nlmsg_data(nlh);
@@ -2015,7 +2020,7 @@ static bool xfrm_userpolicy_is_valid(__u8 policy)
 }
 
 static int xfrm_set_default(struct sk_buff *skb, struct nlmsghdr *nlh,
-                           struct nlattr **attrs)
+                           struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_userpolicy_default *up = nlmsg_data(nlh);
@@ -2036,7 +2041,7 @@ static int xfrm_set_default(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_get_default(struct sk_buff *skb, struct nlmsghdr *nlh,
-                           struct nlattr **attrs)
+                           struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct sk_buff *r_skb;
        struct nlmsghdr *r_nlh;
@@ -2066,7 +2071,8 @@ static int xfrm_get_default(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_get_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                          struct nlattr **attrs,
+                          struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_policy *xp;
@@ -2149,7 +2155,8 @@ out:
 }
 
 static int xfrm_flush_sa(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                        struct nlattr **attrs,
+                        struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct km_event c;
@@ -2249,7 +2256,7 @@ out_cancel:
 }
 
 static int xfrm_get_ae(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                      struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_state *x;
@@ -2293,7 +2300,7 @@ static int xfrm_get_ae(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_new_ae(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                      struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_state *x;
@@ -2344,7 +2351,8 @@ out:
 }
 
 static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                            struct nlattr **attrs,
+                            struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct km_event c;
@@ -2372,7 +2380,8 @@ static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 
 static int xfrm_add_pol_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                              struct nlattr **attrs,
+                              struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_policy *xp;
@@ -2438,7 +2447,8 @@ out:
 }
 
 static int xfrm_add_sa_expire(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                             struct nlattr **attrs,
+                             struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_state *x;
@@ -2472,7 +2482,8 @@ out:
 }
 
 static int xfrm_add_acquire(struct sk_buff *skb, struct nlmsghdr *nlh,
-               struct nlattr **attrs)
+                           struct nlattr **attrs,
+                           struct netlink_ext_ack *extack)
 {
        struct net *net = sock_net(skb->sk);
        struct xfrm_policy *xp;
@@ -2577,7 +2588,7 @@ static int copy_from_user_migrate(struct xfrm_migrate *ma,
 }
 
 static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,
-                          struct nlattr **attrs)
+                          struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        struct xfrm_userpolicy_id *pi = nlmsg_data(nlh);
        struct xfrm_migrate m[XFRM_MAX_DEPTH];
@@ -2623,7 +2634,7 @@ static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 #else
 static int xfrm_do_migrate(struct sk_buff *skb, struct nlmsghdr *nlh,
-                          struct nlattr **attrs)
+                          struct nlattr **attrs, struct netlink_ext_ack *extack)
 {
        return -ENOPROTOOPT;
 }
@@ -2819,7 +2830,8 @@ static const struct nla_policy xfrma_spd_policy[XFRMA_SPD_MAX+1] = {
 };
 
 static const struct xfrm_link {
-       int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);
+       int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **,
+                   struct netlink_ext_ack *);
        int (*start)(struct netlink_callback *);
        int (*dump)(struct sk_buff *, struct netlink_callback *);
        int (*done)(struct netlink_callback *);
@@ -2921,7 +2933,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
                goto err;
        }
 
-       err = link->doit(skb, nlh, attrs);
+       err = link->doit(skb, nlh, attrs, extack);
 
        /* We need to free skb allocated in xfrm_alloc_compat() before
         * returning from this function, because consume_skb() won't take