aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid Ahern <dsa@cumulusnetworks.com>2017-04-16 12:48:24 -0400
committerDavid S. Miller <davem@davemloft.net>2017-04-17 15:35:38 -0400
commitc21ef3e343ae916ad3cfd4dc6ef6791c1f80a010 (patch)
treebabe94fe139a27e7c998ef76ca6e0791d835a78c /net
parentaf3b5158b89d3bab9be881113417558c71b71ca4 (diff)
net: rtnetlink: plumb extended ack to doit function
Add netlink_ext_ack arg to rtnl_doit_func. Pass extack arg to nlmsg_parse for doit functions that call it directly. This is the first step to using extended error reporting in rtnetlink. >From here individual subsystems can be updated to set netlink_ext_ack as needed. Signed-off-by: David Ahern <dsa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/bridge/br_mdb.c6
-rw-r--r--net/can/gw.c6
-rw-r--r--net/core/fib_rules.c10
-rw-r--r--net/core/neighbour.c15
-rw-r--r--net/core/net_namespace.c10
-rw-r--r--net/core/rtnetlink.c42
-rw-r--r--net/dcb/dcbnl.c5
-rw-r--r--net/decnet/dn_dev.c12
-rw-r--r--net/decnet/dn_fib.c10
-rw-r--r--net/decnet/dn_route.c6
-rw-r--r--net/ipv4/devinet.c13
-rw-r--r--net/ipv4/fib_frontend.c6
-rw-r--r--net/ipv4/ipmr.c10
-rw-r--r--net/ipv4/route.c5
-rw-r--r--net/ipv6/addrconf.c20
-rw-r--r--net/ipv6/addrlabel.c12
-rw-r--r--net/ipv6/route.c11
-rw-r--r--net/mpls/af_mpls.c9
-rw-r--r--net/phonet/pn_netlink.c10
-rw-r--r--net/qrtr/qrtr.c5
-rw-r--r--net/sched/act_api.c5
-rw-r--r--net/sched/cls_api.c5
-rw-r--r--net/sched/sch_api.c15
23 files changed, 154 insertions, 94 deletions
diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c
index 993626a7fc3b..b0845480a3ae 100644
--- a/net/bridge/br_mdb.c
+++ b/net/bridge/br_mdb.c
@@ -569,7 +569,8 @@ static int __br_mdb_add(struct net *net, struct net_bridge *br,
569 return ret; 569 return ret;
570} 570}
571 571
572static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) 572static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
573 struct netlink_ext_ack *extack)
573{ 574{
574 struct net *net = sock_net(skb->sk); 575 struct net *net = sock_net(skb->sk);
575 struct net_bridge_vlan_group *vg; 576 struct net_bridge_vlan_group *vg;
@@ -663,7 +664,8 @@ unlock:
663 return err; 664 return err;
664} 665}
665 666
666static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) 667static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
668 struct netlink_ext_ack *extack)
667{ 669{
668 struct net *net = sock_net(skb->sk); 670 struct net *net = sock_net(skb->sk);
669 struct net_bridge_vlan_group *vg; 671 struct net_bridge_vlan_group *vg;
diff --git a/net/can/gw.c b/net/can/gw.c
index 3b84fb7d98aa..ad5bf5d508d3 100644
--- a/net/can/gw.c
+++ b/net/can/gw.c
@@ -809,7 +809,8 @@ static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod,
809 return 0; 809 return 0;
810} 810}
811 811
812static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh) 812static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh,
813 struct netlink_ext_ack *extack)
813{ 814{
814 struct rtcanmsg *r; 815 struct rtcanmsg *r;
815 struct cgw_job *gwj; 816 struct cgw_job *gwj;
@@ -921,7 +922,8 @@ static void cgw_remove_all_jobs(void)
921 } 922 }
922} 923}
923 924
924static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh) 925static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh,
926 struct netlink_ext_ack *extack)
925{ 927{
926 struct cgw_job *gwj = NULL; 928 struct cgw_job *gwj = NULL;
927 struct hlist_node *nx; 929 struct hlist_node *nx;
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c
index df03110ca3c8..c58c1df6f92b 100644
--- a/net/core/fib_rules.c
+++ b/net/core/fib_rules.c
@@ -368,7 +368,8 @@ static int rule_exists(struct fib_rules_ops *ops, struct fib_rule_hdr *frh,
368 return 0; 368 return 0;
369} 369}
370 370
371int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh) 371int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh,
372 struct netlink_ext_ack *extack)
372{ 373{
373 struct net *net = sock_net(skb->sk); 374 struct net *net = sock_net(skb->sk);
374 struct fib_rule_hdr *frh = nlmsg_data(nlh); 375 struct fib_rule_hdr *frh = nlmsg_data(nlh);
@@ -386,7 +387,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh)
386 goto errout; 387 goto errout;
387 } 388 }
388 389
389 err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL); 390 err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, extack);
390 if (err < 0) 391 if (err < 0)
391 goto errout; 392 goto errout;
392 393
@@ -561,7 +562,8 @@ errout:
561} 562}
562EXPORT_SYMBOL_GPL(fib_nl_newrule); 563EXPORT_SYMBOL_GPL(fib_nl_newrule);
563 564
564int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh) 565int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh,
566 struct netlink_ext_ack *extack)
565{ 567{
566 struct net *net = sock_net(skb->sk); 568 struct net *net = sock_net(skb->sk);
567 struct fib_rule_hdr *frh = nlmsg_data(nlh); 569 struct fib_rule_hdr *frh = nlmsg_data(nlh);
@@ -580,7 +582,7 @@ int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh)
580 goto errout; 582 goto errout;
581 } 583 }
582 584
583 err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL); 585 err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, extack);
584 if (err < 0) 586 if (err < 0)
585 goto errout; 587 goto errout;
586 588
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 31f37b264710..58b0bcc125b5 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -1590,7 +1590,8 @@ static struct neigh_table *neigh_find_table(int family)
1590 return tbl; 1590 return tbl;
1591} 1591}
1592 1592
1593static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh) 1593static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
1594 struct netlink_ext_ack *extack)
1594{ 1595{
1595 struct net *net = sock_net(skb->sk); 1596 struct net *net = sock_net(skb->sk);
1596 struct ndmsg *ndm; 1597 struct ndmsg *ndm;
@@ -1648,7 +1649,8 @@ out:
1648 return err; 1649 return err;
1649} 1650}
1650 1651
1651static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh) 1652static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
1653 struct netlink_ext_ack *extack)
1652{ 1654{
1653 int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE; 1655 int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE;
1654 struct net *net = sock_net(skb->sk); 1656 struct net *net = sock_net(skb->sk);
@@ -1661,7 +1663,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh)
1661 int err; 1663 int err;
1662 1664
1663 ASSERT_RTNL(); 1665 ASSERT_RTNL();
1664 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); 1666 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
1665 if (err < 0) 1667 if (err < 0)
1666 goto out; 1668 goto out;
1667 1669
@@ -1936,7 +1938,8 @@ static const struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] = {
1936 [NDTPA_LOCKTIME] = { .type = NLA_U64 }, 1938 [NDTPA_LOCKTIME] = { .type = NLA_U64 },
1937}; 1939};
1938 1940
1939static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh) 1941static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh,
1942 struct netlink_ext_ack *extack)
1940{ 1943{
1941 struct net *net = sock_net(skb->sk); 1944 struct net *net = sock_net(skb->sk);
1942 struct neigh_table *tbl; 1945 struct neigh_table *tbl;
@@ -1946,7 +1949,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
1946 int err, tidx; 1949 int err, tidx;
1947 1950
1948 err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX, 1951 err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
1949 nl_neightbl_policy, NULL); 1952 nl_neightbl_policy, extack);
1950 if (err < 0) 1953 if (err < 0)
1951 goto errout; 1954 goto errout;
1952 1955
@@ -1984,7 +1987,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
1984 int i, ifindex = 0; 1987 int i, ifindex = 0;
1985 1988
1986 err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS], 1989 err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
1987 nl_ntbl_parm_policy, NULL); 1990 nl_ntbl_parm_policy, extack);
1988 if (err < 0) 1991 if (err < 0)
1989 goto errout_tbl_lock; 1992 goto errout_tbl_lock;
1990 1993
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index ec18cbc756d2..c1d8aed8e5a8 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -571,7 +571,8 @@ static const struct nla_policy rtnl_net_policy[NETNSA_MAX + 1] = {
571 [NETNSA_FD] = { .type = NLA_U32 }, 571 [NETNSA_FD] = { .type = NLA_U32 },
572}; 572};
573 573
574static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh) 574static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh,
575 struct netlink_ext_ack *extack)
575{ 576{
576 struct net *net = sock_net(skb->sk); 577 struct net *net = sock_net(skb->sk);
577 struct nlattr *tb[NETNSA_MAX + 1]; 578 struct nlattr *tb[NETNSA_MAX + 1];
@@ -579,7 +580,7 @@ static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh)
579 int nsid, err; 580 int nsid, err;
580 581
581 err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, 582 err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX,
582 rtnl_net_policy, NULL); 583 rtnl_net_policy, extack);
583 if (err < 0) 584 if (err < 0)
584 return err; 585 return err;
585 if (!tb[NETNSA_NSID]) 586 if (!tb[NETNSA_NSID])
@@ -644,7 +645,8 @@ nla_put_failure:
644 return -EMSGSIZE; 645 return -EMSGSIZE;
645} 646}
646 647
647static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh) 648static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh,
649 struct netlink_ext_ack *extack)
648{ 650{
649 struct net *net = sock_net(skb->sk); 651 struct net *net = sock_net(skb->sk);
650 struct nlattr *tb[NETNSA_MAX + 1]; 652 struct nlattr *tb[NETNSA_MAX + 1];
@@ -653,7 +655,7 @@ static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh)
653 int err, id; 655 int err, id;
654 656
655 err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, 657 err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX,
656 rtnl_net_policy, NULL); 658 rtnl_net_policy, extack);
657 if (err < 0) 659 if (err < 0)
658 return err; 660 return err;
659 if (tb[NETNSA_PID]) 661 if (tb[NETNSA_PID])
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 0ee5479528b5..088f9c8b4196 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2213,7 +2213,8 @@ errout:
2213 return err; 2213 return err;
2214} 2214}
2215 2215
2216static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) 2216static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
2217 struct netlink_ext_ack *extack)
2217{ 2218{
2218 struct net *net = sock_net(skb->sk); 2219 struct net *net = sock_net(skb->sk);
2219 struct ifinfomsg *ifm; 2220 struct ifinfomsg *ifm;
@@ -2222,7 +2223,8 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2222 struct nlattr *tb[IFLA_MAX+1]; 2223 struct nlattr *tb[IFLA_MAX+1];
2223 char ifname[IFNAMSIZ]; 2224 char ifname[IFNAMSIZ];
2224 2225
2225 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); 2226 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy,
2227 extack);
2226 if (err < 0) 2228 if (err < 0)
2227 goto errout; 2229 goto errout;
2228 2230
@@ -2306,7 +2308,8 @@ int rtnl_delete_link(struct net_device *dev)
2306} 2308}
2307EXPORT_SYMBOL_GPL(rtnl_delete_link); 2309EXPORT_SYMBOL_GPL(rtnl_delete_link);
2308 2310
2309static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) 2311static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
2312 struct netlink_ext_ack *extack)
2310{ 2313{
2311 struct net *net = sock_net(skb->sk); 2314 struct net *net = sock_net(skb->sk);
2312 struct net_device *dev; 2315 struct net_device *dev;
@@ -2315,7 +2318,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
2315 struct nlattr *tb[IFLA_MAX+1]; 2318 struct nlattr *tb[IFLA_MAX+1];
2316 int err; 2319 int err;
2317 2320
2318 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); 2321 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
2319 if (err < 0) 2322 if (err < 0)
2320 return err; 2323 return err;
2321 2324
@@ -2426,7 +2429,8 @@ static int rtnl_group_changelink(const struct sk_buff *skb,
2426 return 0; 2429 return 0;
2427} 2430}
2428 2431
2429static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh) 2432static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
2433 struct netlink_ext_ack *extack)
2430{ 2434{
2431 struct net *net = sock_net(skb->sk); 2435 struct net *net = sock_net(skb->sk);
2432 const struct rtnl_link_ops *ops; 2436 const struct rtnl_link_ops *ops;
@@ -2444,7 +2448,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2444#ifdef CONFIG_MODULES 2448#ifdef CONFIG_MODULES
2445replay: 2449replay:
2446#endif 2450#endif
2447 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); 2451 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
2448 if (err < 0) 2452 if (err < 0)
2449 return err; 2453 return err;
2450 2454
@@ -2678,7 +2682,8 @@ out_unregister:
2678 } 2682 }
2679} 2683}
2680 2684
2681static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh) 2685static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh,
2686 struct netlink_ext_ack *extack)
2682{ 2687{
2683 struct net *net = sock_net(skb->sk); 2688 struct net *net = sock_net(skb->sk);
2684 struct ifinfomsg *ifm; 2689 struct ifinfomsg *ifm;
@@ -2689,7 +2694,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
2689 int err; 2694 int err;
2690 u32 ext_filter_mask = 0; 2695 u32 ext_filter_mask = 0;
2691 2696
2692 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); 2697 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
2693 if (err < 0) 2698 if (err < 0)
2694 return err; 2699 return err;
2695 2700
@@ -2960,7 +2965,8 @@ static int fdb_vid_parse(struct nlattr *vlan_attr, u16 *p_vid)
2960 return 0; 2965 return 0;
2961} 2966}
2962 2967
2963static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) 2968static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
2969 struct netlink_ext_ack *extack)
2964{ 2970{
2965 struct net *net = sock_net(skb->sk); 2971 struct net *net = sock_net(skb->sk);
2966 struct ndmsg *ndm; 2972 struct ndmsg *ndm;
@@ -2970,7 +2976,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
2970 u16 vid; 2976 u16 vid;
2971 int err; 2977 int err;
2972 2978
2973 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); 2979 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
2974 if (err < 0) 2980 if (err < 0)
2975 return err; 2981 return err;
2976 2982
@@ -3060,7 +3066,8 @@ int ndo_dflt_fdb_del(struct ndmsg *ndm,
3060} 3066}
3061EXPORT_SYMBOL(ndo_dflt_fdb_del); 3067EXPORT_SYMBOL(ndo_dflt_fdb_del);
3062 3068
3063static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) 3069static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
3070 struct netlink_ext_ack *extack)
3064{ 3071{
3065 struct net *net = sock_net(skb->sk); 3072 struct net *net = sock_net(skb->sk);
3066 struct ndmsg *ndm; 3073 struct ndmsg *ndm;
@@ -3073,7 +3080,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
3073 if (!netlink_capable(skb, CAP_NET_ADMIN)) 3080 if (!netlink_capable(skb, CAP_NET_ADMIN))
3074 return -EPERM; 3081 return -EPERM;
3075 3082
3076 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); 3083 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
3077 if (err < 0) 3084 if (err < 0)
3078 return err; 3085 return err;
3079 3086
@@ -3503,7 +3510,8 @@ errout:
3503 return err; 3510 return err;
3504} 3511}
3505 3512
3506static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) 3513static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
3514 struct netlink_ext_ack *extack)
3507{ 3515{
3508 struct net *net = sock_net(skb->sk); 3516 struct net *net = sock_net(skb->sk);
3509 struct ifinfomsg *ifm; 3517 struct ifinfomsg *ifm;
@@ -3577,7 +3585,8 @@ out:
3577 return err; 3585 return err;
3578} 3586}
3579 3587
3580static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) 3588static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
3589 struct netlink_ext_ack *extack)
3581{ 3590{
3582 struct net *net = sock_net(skb->sk); 3591 struct net *net = sock_net(skb->sk);
3583 struct ifinfomsg *ifm; 3592 struct ifinfomsg *ifm;
@@ -3945,7 +3954,8 @@ static size_t if_nlmsg_stats_size(const struct net_device *dev,
3945 return size; 3954 return size;
3946} 3955}
3947 3956
3948static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh) 3957static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh,
3958 struct netlink_ext_ack *extack)
3949{ 3959{
3950 struct net *net = sock_net(skb->sk); 3960 struct net *net = sock_net(skb->sk);
3951 struct net_device *dev = NULL; 3961 struct net_device *dev = NULL;
@@ -4107,7 +4117,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
4107 if (doit == NULL) 4117 if (doit == NULL)
4108 return -EOPNOTSUPP; 4118 return -EOPNOTSUPP;
4109 4119
4110 return doit(skb, nlh); 4120 return doit(skb, nlh, extack);
4111} 4121}
4112 4122
4113static void rtnetlink_rcv(struct sk_buff *skb) 4123static void rtnetlink_rcv(struct sk_buff *skb)
diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c
index 3f5a5f710576..93106120f987 100644
--- a/net/dcb/dcbnl.c
+++ b/net/dcb/dcbnl.c
@@ -1696,7 +1696,8 @@ static const struct reply_func reply_funcs[DCB_CMD_MAX+1] = {
1696 [DCB_CMD_CEE_GET] = { RTM_GETDCB, dcbnl_cee_get }, 1696 [DCB_CMD_CEE_GET] = { RTM_GETDCB, dcbnl_cee_get },
1697}; 1697};
1698 1698
1699static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 1699static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
1700 struct netlink_ext_ack *extack)
1700{ 1701{
1701 struct net *net = sock_net(skb->sk); 1702 struct net *net = sock_net(skb->sk);
1702 struct net_device *netdev; 1703 struct net_device *netdev;
@@ -1712,7 +1713,7 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
1712 return -EPERM; 1713 return -EPERM;
1713 1714
1714 ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX, 1715 ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX,
1715 dcbnl_rtnl_policy, NULL); 1716 dcbnl_rtnl_policy, extack);
1716 if (ret < 0) 1717 if (ret < 0)
1717 return ret; 1718 return ret;
1718 1719
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
index e65f1be44e8e..9017a9a73ab5 100644
--- a/net/decnet/dn_dev.c
+++ b/net/decnet/dn_dev.c
@@ -565,7 +565,8 @@ static const struct nla_policy dn_ifa_policy[IFA_MAX+1] = {
565 [IFA_FLAGS] = { .type = NLA_U32 }, 565 [IFA_FLAGS] = { .type = NLA_U32 },
566}; 566};
567 567
568static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 568static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
569 struct netlink_ext_ack *extack)
569{ 570{
570 struct net *net = sock_net(skb->sk); 571 struct net *net = sock_net(skb->sk);
571 struct nlattr *tb[IFA_MAX+1]; 572 struct nlattr *tb[IFA_MAX+1];
@@ -581,7 +582,8 @@ static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
581 if (!net_eq(net, &init_net)) 582 if (!net_eq(net, &init_net))
582 goto errout; 583 goto errout;
583 584
584 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL); 585 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy,
586 extack);
585 if (err < 0) 587 if (err < 0)
586 goto errout; 588 goto errout;
587 589
@@ -609,7 +611,8 @@ errout:
609 return err; 611 return err;
610} 612}
611 613
612static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 614static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
615 struct netlink_ext_ack *extack)
613{ 616{
614 struct net *net = sock_net(skb->sk); 617 struct net *net = sock_net(skb->sk);
615 struct nlattr *tb[IFA_MAX+1]; 618 struct nlattr *tb[IFA_MAX+1];
@@ -625,7 +628,8 @@ static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
625 if (!net_eq(net, &init_net)) 628 if (!net_eq(net, &init_net))
626 return -EINVAL; 629 return -EINVAL;
627 630
628 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL); 631 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy,
632 extack);
629 if (err < 0) 633 if (err < 0)
630 return err; 634 return err;
631 635
diff --git a/net/decnet/dn_fib.c b/net/decnet/dn_fib.c
index 34663bf8aa6d..f9058ebeb635 100644
--- a/net/decnet/dn_fib.c
+++ b/net/decnet/dn_fib.c
@@ -501,7 +501,8 @@ static inline u32 rtm_get_table(struct nlattr *attrs[], u8 table)
501 return table; 501 return table;
502} 502}
503 503
504static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 504static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh,
505 struct netlink_ext_ack *extack)
505{ 506{
506 struct net *net = sock_net(skb->sk); 507 struct net *net = sock_net(skb->sk);
507 struct dn_fib_table *tb; 508 struct dn_fib_table *tb;
@@ -516,7 +517,7 @@ static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh)
516 return -EINVAL; 517 return -EINVAL;
517 518
518 err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy, 519 err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy,
519 NULL); 520 extack);
520 if (err < 0) 521 if (err < 0)
521 return err; 522 return err;
522 523
@@ -527,7 +528,8 @@ static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh)
527 return tb->delete(tb, r, attrs, nlh, &NETLINK_CB(skb)); 528 return tb->delete(tb, r, attrs, nlh, &NETLINK_CB(skb));
528} 529}
529 530
530static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 531static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,
532 struct netlink_ext_ack *extack)
531{ 533{
532 struct net *net = sock_net(skb->sk); 534 struct net *net = sock_net(skb->sk);
533 struct dn_fib_table *tb; 535 struct dn_fib_table *tb;
@@ -542,7 +544,7 @@ static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh)
542 return -EINVAL; 544 return -EINVAL;
543 545
544 err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy, 546 err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy,
545 NULL); 547 extack);
546 if (err < 0) 548 if (err < 0)
547 return err; 549 return err;
548 550
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index 2d7097bbc666..4b9518a0d248 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -1640,7 +1640,8 @@ const struct nla_policy rtm_dn_policy[RTA_MAX + 1] = {
1640/* 1640/*
1641 * This is called by both endnodes and routers now. 1641 * This is called by both endnodes and routers now.
1642 */ 1642 */
1643static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) 1643static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
1644 struct netlink_ext_ack *extack)
1644{ 1645{
1645 struct net *net = sock_net(in_skb->sk); 1646 struct net *net = sock_net(in_skb->sk);
1646 struct rtmsg *rtm = nlmsg_data(nlh); 1647 struct rtmsg *rtm = nlmsg_data(nlh);
@@ -1654,7 +1655,8 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
1654 if (!net_eq(net, &init_net)) 1655 if (!net_eq(net, &init_net))
1655 return -EINVAL; 1656 return -EINVAL;
1656 1657
1657 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy, NULL); 1658 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy,
1659 extack);
1658 if (err < 0) 1660 if (err < 0)
1659 return err; 1661 return err;
1660 1662
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index f33f53791f50..df14815a3b8c 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -571,7 +571,8 @@ static int ip_mc_config(struct sock *sk, bool join, const struct in_ifaddr *ifa)
571 return ret; 571 return ret;
572} 572}
573 573
574static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 574static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
575 struct netlink_ext_ack *extack)
575{ 576{
576 struct net *net = sock_net(skb->sk); 577 struct net *net = sock_net(skb->sk);
577 struct nlattr *tb[IFA_MAX+1]; 578 struct nlattr *tb[IFA_MAX+1];
@@ -583,7 +584,7 @@ static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
583 ASSERT_RTNL(); 584 ASSERT_RTNL();
584 585
585 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy, 586 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy,
586 NULL); 587 extack);
587 if (err < 0) 588 if (err < 0)
588 goto errout; 589 goto errout;
589 590
@@ -845,7 +846,8 @@ static struct in_ifaddr *find_matching_ifa(struct in_ifaddr *ifa)
845 return NULL; 846 return NULL;
846} 847}
847 848
848static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 849static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
850 struct netlink_ext_ack *extack)
849{ 851{
850 struct net *net = sock_net(skb->sk); 852 struct net *net = sock_net(skb->sk);
851 struct in_ifaddr *ifa; 853 struct in_ifaddr *ifa;
@@ -1871,7 +1873,8 @@ static const struct nla_policy devconf_ipv4_policy[NETCONFA_MAX+1] = {
1871}; 1873};
1872 1874
1873static int inet_netconf_get_devconf(struct sk_buff *in_skb, 1875static int inet_netconf_get_devconf(struct sk_buff *in_skb,
1874 struct nlmsghdr *nlh) 1876 struct nlmsghdr *nlh,
1877 struct netlink_ext_ack *extack)
1875{ 1878{
1876 struct net *net = sock_net(in_skb->sk); 1879 struct net *net = sock_net(in_skb->sk);
1877 struct nlattr *tb[NETCONFA_MAX+1]; 1880 struct nlattr *tb[NETCONFA_MAX+1];
@@ -1884,7 +1887,7 @@ static int inet_netconf_get_devconf(struct sk_buff *in_skb,
1884 int err; 1887 int err;
1885 1888
1886 err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, 1889 err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX,
1887 devconf_ipv4_policy, NULL); 1890 devconf_ipv4_policy, extack);
1888 if (err < 0) 1891 if (err < 0)
1889 goto errout; 1892 goto errout;
1890 1893
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index 434dd2538716..5a0e456b5d58 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -710,7 +710,8 @@ errout:
710 return err; 710 return err;
711} 711}
712 712
713static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 713static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh,
714 struct netlink_ext_ack *extack)
714{ 715{
715 struct net *net = sock_net(skb->sk); 716 struct net *net = sock_net(skb->sk);
716 struct fib_config cfg; 717 struct fib_config cfg;
@@ -732,7 +733,8 @@ errout:
732 return err; 733 return err;
733} 734}
734 735
735static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 736static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,
737 struct netlink_ext_ack *extack)
736{ 738{
737 struct net *net = sock_net(skb->sk); 739 struct net *net = sock_net(skb->sk);
738 struct fib_config cfg; 740 struct fib_config cfg;
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
index d7be21f2174a..95ea3585a223 100644
--- a/net/ipv4/ipmr.c
+++ b/net/ipv4/ipmr.c
@@ -2430,7 +2430,8 @@ static int ipmr_nla_get_ttls(const struct nlattr *nla, struct mfcctl *mfcc)
2430/* returns < 0 on error, 0 for ADD_MFC and 1 for ADD_MFC_PROXY */ 2430/* returns < 0 on error, 0 for ADD_MFC and 1 for ADD_MFC_PROXY */
2431static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh, 2431static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh,
2432 struct mfcctl *mfcc, int *mrtsock, 2432 struct mfcctl *mfcc, int *mrtsock,
2433 struct mr_table **mrtret) 2433 struct mr_table **mrtret,
2434 struct netlink_ext_ack *extack)
2434{ 2435{
2435 struct net_device *dev = NULL; 2436 struct net_device *dev = NULL;
2436 u32 tblid = RT_TABLE_DEFAULT; 2437 u32 tblid = RT_TABLE_DEFAULT;
@@ -2440,7 +2441,7 @@ static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh,
2440 int ret, rem; 2441 int ret, rem;
2441 2442
2442 ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy, 2443 ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy,
2443 NULL); 2444 extack);
2444 if (ret < 0) 2445 if (ret < 0)
2445 goto out; 2446 goto out;
2446 rtm = nlmsg_data(nlh); 2447 rtm = nlmsg_data(nlh);
@@ -2499,7 +2500,8 @@ out:
2499} 2500}
2500 2501
2501/* takes care of both newroute and delroute */ 2502/* takes care of both newroute and delroute */
2502static int ipmr_rtm_route(struct sk_buff *skb, struct nlmsghdr *nlh) 2503static int ipmr_rtm_route(struct sk_buff *skb, struct nlmsghdr *nlh,
2504 struct netlink_ext_ack *extack)
2503{ 2505{
2504 struct net *net = sock_net(skb->sk); 2506 struct net *net = sock_net(skb->sk);
2505 int ret, mrtsock, parent; 2507 int ret, mrtsock, parent;
@@ -2508,7 +2510,7 @@ static int ipmr_rtm_route(struct sk_buff *skb, struct nlmsghdr *nlh)
2508 2510
2509 mrtsock = 0; 2511 mrtsock = 0;
2510 tbl = NULL; 2512 tbl = NULL;
2511 ret = rtm_to_ipmr_mfcc(net, nlh, &mfcc, &mrtsock, &tbl); 2513 ret = rtm_to_ipmr_mfcc(net, nlh, &mfcc, &mrtsock, &tbl, extack);
2512 if (ret < 0) 2514 if (ret < 0)
2513 return ret; 2515 return ret;
2514 2516
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index 7a4f2c38c3c4..a4443748cc1e 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -2629,7 +2629,8 @@ nla_put_failure:
2629 return -EMSGSIZE; 2629 return -EMSGSIZE;
2630} 2630}
2631 2631
2632static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) 2632static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
2633 struct netlink_ext_ack *extack)
2633{ 2634{
2634 struct net *net = sock_net(in_skb->sk); 2635 struct net *net = sock_net(in_skb->sk);
2635 struct rtmsg *rtm; 2636 struct rtmsg *rtm;
@@ -2646,7 +2647,7 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
2646 kuid_t uid; 2647 kuid_t uid;
2647 2648
2648 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy, 2649 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy,
2649 NULL); 2650 extack);
2650 if (err < 0) 2651 if (err < 0)
2651 goto errout; 2652 goto errout;
2652 2653
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 8a6756ac7519..08f9e8ea7a81 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -611,7 +611,8 @@ static const struct nla_policy devconf_ipv6_policy[NETCONFA_MAX+1] = {
611}; 611};
612 612
613static int inet6_netconf_get_devconf(struct sk_buff *in_skb, 613static int inet6_netconf_get_devconf(struct sk_buff *in_skb,
614 struct nlmsghdr *nlh) 614 struct nlmsghdr *nlh,
615 struct netlink_ext_ack *extack)
615{ 616{
616 struct net *net = sock_net(in_skb->sk); 617 struct net *net = sock_net(in_skb->sk);
617 struct nlattr *tb[NETCONFA_MAX+1]; 618 struct nlattr *tb[NETCONFA_MAX+1];
@@ -624,7 +625,7 @@ static int inet6_netconf_get_devconf(struct sk_buff *in_skb,
624 int err; 625 int err;
625 626
626 err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, 627 err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX,
627 devconf_ipv6_policy, NULL); 628 devconf_ipv6_policy, extack);
628 if (err < 0) 629 if (err < 0)
629 goto errout; 630 goto errout;
630 631
@@ -4413,7 +4414,8 @@ static const struct nla_policy ifa_ipv6_policy[IFA_MAX+1] = {
4413}; 4414};
4414 4415
4415static int 4416static int
4416inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) 4417inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh,
4418 struct netlink_ext_ack *extack)
4417{ 4419{
4418 struct net *net = sock_net(skb->sk); 4420 struct net *net = sock_net(skb->sk);
4419 struct ifaddrmsg *ifm; 4421 struct ifaddrmsg *ifm;
@@ -4423,7 +4425,7 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
4423 int err; 4425 int err;
4424 4426
4425 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, 4427 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
4426 NULL); 4428 extack);
4427 if (err < 0) 4429 if (err < 0)
4428 return err; 4430 return err;
4429 4431
@@ -4523,7 +4525,8 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u32 ifa_flags,
4523} 4525}
4524 4526
4525static int 4527static int
4526inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) 4528inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh,
4529 struct netlink_ext_ack *extack)
4527{ 4530{
4528 struct net *net = sock_net(skb->sk); 4531 struct net *net = sock_net(skb->sk);
4529 struct ifaddrmsg *ifm; 4532 struct ifaddrmsg *ifm;
@@ -4536,7 +4539,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
4536 int err; 4539 int err;
4537 4540
4538 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, 4541 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
4539 NULL); 4542 extack);
4540 if (err < 0) 4543 if (err < 0)
4541 return err; 4544 return err;
4542 4545
@@ -4886,7 +4889,8 @@ static int inet6_dump_ifacaddr(struct sk_buff *skb, struct netlink_callback *cb)
4886 return inet6_dump_addr(skb, cb, type); 4889 return inet6_dump_addr(skb, cb, type);
4887} 4890}
4888 4891
4889static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh) 4892static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh,
4893 struct netlink_ext_ack *extack)
4890{ 4894{
4891 struct net *net = sock_net(in_skb->sk); 4895 struct net *net = sock_net(in_skb->sk);
4892 struct ifaddrmsg *ifm; 4896 struct ifaddrmsg *ifm;
@@ -4898,7 +4902,7 @@ static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh)
4898 int err; 4902 int err;
4899 4903
4900 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, 4904 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
4901 NULL); 4905 extack);
4902 if (err < 0) 4906 if (err < 0)
4903 goto errout; 4907 goto errout;
4904 4908
diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c
index 6cb4ed91722a..07cd7d248bb6 100644
--- a/net/ipv6/addrlabel.c
+++ b/net/ipv6/addrlabel.c
@@ -404,7 +404,8 @@ static const struct nla_policy ifal_policy[IFAL_MAX+1] = {
404 [IFAL_LABEL] = { .len = sizeof(u32), }, 404 [IFAL_LABEL] = { .len = sizeof(u32), },
405}; 405};
406 406
407static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh) 407static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh,
408 struct netlink_ext_ack *extack)
408{ 409{
409 struct net *net = sock_net(skb->sk); 410 struct net *net = sock_net(skb->sk);
410 struct ifaddrlblmsg *ifal; 411 struct ifaddrlblmsg *ifal;
@@ -413,7 +414,8 @@ static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh)
413 u32 label; 414 u32 label;
414 int err = 0; 415 int err = 0;
415 416
416 err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL); 417 err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy,
418 extack);
417 if (err < 0) 419 if (err < 0)
418 return err; 420 return err;
419 421
@@ -521,7 +523,8 @@ static inline int ip6addrlbl_msgsize(void)
521 + nla_total_size(4); /* IFAL_LABEL */ 523 + nla_total_size(4); /* IFAL_LABEL */
522} 524}
523 525
524static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh) 526static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
527 struct netlink_ext_ack *extack)
525{ 528{
526 struct net *net = sock_net(in_skb->sk); 529 struct net *net = sock_net(in_skb->sk);
527 struct ifaddrlblmsg *ifal; 530 struct ifaddrlblmsg *ifal;
@@ -532,7 +535,8 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh)
532 struct ip6addrlbl_entry *p; 535 struct ip6addrlbl_entry *p;
533 struct sk_buff *skb; 536 struct sk_buff *skb;
534 537
535 err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL); 538 err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy,
539 extack);
536 if (err < 0) 540 if (err < 0)
537 return err; 541 return err;
538 542
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index ccde23eba702..4ba7c49872ff 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3260,7 +3260,8 @@ static int ip6_route_multipath_del(struct fib6_config *cfg)
3260 return last_err; 3260 return last_err;
3261} 3261}
3262 3262
3263static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 3263static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh,
3264 struct netlink_ext_ack *extack)
3264{ 3265{
3265 struct fib6_config cfg; 3266 struct fib6_config cfg;
3266 int err; 3267 int err;
@@ -3277,7 +3278,8 @@ static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh)
3277 } 3278 }
3278} 3279}
3279 3280
3280static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 3281static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,
3282 struct netlink_ext_ack *extack)
3281{ 3283{
3282 struct fib6_config cfg; 3284 struct fib6_config cfg;
3283 int err; 3285 int err;
@@ -3565,7 +3567,8 @@ int rt6_dump_route(struct rt6_info *rt, void *p_arg)
3565 NLM_F_MULTI); 3567 NLM_F_MULTI);
3566} 3568}
3567 3569
3568static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) 3570static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh,
3571 struct netlink_ext_ack *extack)
3569{ 3572{
3570 struct net *net = sock_net(in_skb->sk); 3573 struct net *net = sock_net(in_skb->sk);
3571 struct nlattr *tb[RTA_MAX+1]; 3574 struct nlattr *tb[RTA_MAX+1];
@@ -3576,7 +3579,7 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
3576 int err, iif = 0, oif = 0; 3579 int err, iif = 0, oif = 0;
3577 3580
3578 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy, 3581 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy,
3579 NULL); 3582 extack);
3580 if (err < 0) 3583 if (err < 0)
3581 goto errout; 3584 goto errout;
3582 3585
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 07181d2273e1..088e2b459d0f 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -1110,7 +1110,8 @@ static const struct nla_policy devconf_mpls_policy[NETCONFA_MAX + 1] = {
1110}; 1110};
1111 1111
1112static int mpls_netconf_get_devconf(struct sk_buff *in_skb, 1112static int mpls_netconf_get_devconf(struct sk_buff *in_skb,
1113 struct nlmsghdr *nlh) 1113 struct nlmsghdr *nlh,
1114 struct netlink_ext_ack *extack)
1114{ 1115{
1115 struct net *net = sock_net(in_skb->sk); 1116 struct net *net = sock_net(in_skb->sk);
1116 struct nlattr *tb[NETCONFA_MAX + 1]; 1117 struct nlattr *tb[NETCONFA_MAX + 1];
@@ -1746,7 +1747,8 @@ errout:
1746 return err; 1747 return err;
1747} 1748}
1748 1749
1749static int mpls_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) 1750static int mpls_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh,
1751 struct netlink_ext_ack *extack)
1750{ 1752{
1751 struct mpls_route_config *cfg; 1753 struct mpls_route_config *cfg;
1752 int err; 1754 int err;
@@ -1767,7 +1769,8 @@ out:
1767} 1769}
1768 1770
1769 1771
1770static int mpls_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) 1772static int mpls_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh,
1773 struct netlink_ext_ack *extack)
1771{ 1774{
1772 struct mpls_route_config *cfg; 1775 struct mpls_route_config *cfg;
1773 int err; 1776 int err;
diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c
index 363799bf97f6..45b3af3080d8 100644
--- a/net/phonet/pn_netlink.c
+++ b/net/phonet/pn_netlink.c
@@ -61,7 +61,8 @@ static const struct nla_policy ifa_phonet_policy[IFA_MAX+1] = {
61 [IFA_LOCAL] = { .type = NLA_U8 }, 61 [IFA_LOCAL] = { .type = NLA_U8 },
62}; 62};
63 63
64static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 64static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
65 struct netlink_ext_ack *extack)
65{ 66{
66 struct net *net = sock_net(skb->sk); 67 struct net *net = sock_net(skb->sk);
67 struct nlattr *tb[IFA_MAX+1]; 68 struct nlattr *tb[IFA_MAX+1];
@@ -79,7 +80,7 @@ static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
79 ASSERT_RTNL(); 80 ASSERT_RTNL();
80 81
81 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy, 82 err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy,
82 NULL); 83 extack);
83 if (err < 0) 84 if (err < 0)
84 return err; 85 return err;
85 86
@@ -227,7 +228,8 @@ static const struct nla_policy rtm_phonet_policy[RTA_MAX+1] = {
227 [RTA_OIF] = { .type = NLA_U32 }, 228 [RTA_OIF] = { .type = NLA_U32 },
228}; 229};
229 230
230static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 231static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
232 struct netlink_ext_ack *extack)
231{ 233{
232 struct net *net = sock_net(skb->sk); 234 struct net *net = sock_net(skb->sk);
233 struct nlattr *tb[RTA_MAX+1]; 235 struct nlattr *tb[RTA_MAX+1];
@@ -245,7 +247,7 @@ static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
245 ASSERT_RTNL(); 247 ASSERT_RTNL();
246 248
247 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy, 249 err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy,
248 NULL); 250 extack);
249 if (err < 0) 251 if (err < 0)
250 return err; 252 return err;
251 253
diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
index 7fdbb34002f5..c36b0ec364a4 100644
--- a/net/qrtr/qrtr.c
+++ b/net/qrtr/qrtr.c
@@ -943,7 +943,8 @@ static const struct nla_policy qrtr_policy[IFA_MAX + 1] = {
943 [IFA_LOCAL] = { .type = NLA_U32 }, 943 [IFA_LOCAL] = { .type = NLA_U32 },
944}; 944};
945 945
946static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) 946static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
947 struct netlink_ext_ack *extack)
947{ 948{
948 struct nlattr *tb[IFA_MAX + 1]; 949 struct nlattr *tb[IFA_MAX + 1];
949 struct ifaddrmsg *ifm; 950 struct ifaddrmsg *ifm;
@@ -957,7 +958,7 @@ static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
957 958
958 ASSERT_RTNL(); 959 ASSERT_RTNL();
959 960
960 rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy, NULL); 961 rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy, extack);
961 if (rc < 0) 962 if (rc < 0)
962 return rc; 963 return rc;
963 964
diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index 79d875c6e8a0..82b1d48d91cc 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -993,7 +993,8 @@ static int tcf_action_add(struct net *net, struct nlattr *nla,
993 return tcf_add_notify(net, n, &actions, portid); 993 return tcf_add_notify(net, n, &actions, portid);
994} 994}
995 995
996static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n) 996static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n,
997 struct netlink_ext_ack *extack)
997{ 998{
998 struct net *net = sock_net(skb->sk); 999 struct net *net = sock_net(skb->sk);
999 struct nlattr *tca[TCA_ACT_MAX + 1]; 1000 struct nlattr *tca[TCA_ACT_MAX + 1];
@@ -1005,7 +1006,7 @@ static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n)
1005 return -EPERM; 1006 return -EPERM;
1006 1007
1007 ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL, 1008 ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL,
1008 NULL); 1009 extack);
1009 if (ret < 0) 1010 if (ret < 0)
1010 return ret; 1011 return ret;
1011 1012
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index e2c68c30f97d..a8da383b681a 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -201,7 +201,8 @@ EXPORT_SYMBOL(tcf_destroy_chain);
201 201
202/* Add/change/delete/get a filter node */ 202/* Add/change/delete/get a filter node */
203 203
204static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) 204static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
205 struct netlink_ext_ack *extack)
205{ 206{
206 struct net *net = sock_net(skb->sk); 207 struct net *net = sock_net(skb->sk);
207 struct nlattr *tca[TCA_MAX + 1]; 208 struct nlattr *tca[TCA_MAX + 1];
@@ -229,7 +230,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n)
229replay: 230replay:
230 tp_created = 0; 231 tp_created = 0;
231 232
232 err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL, NULL); 233 err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL, extack);
233 if (err < 0) 234 if (err < 0)
234 return err; 235 return err;
235 236
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 9b09ef9f944d..bbe57d57b67f 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -1125,7 +1125,8 @@ check_loop_fn(struct Qdisc *q, unsigned long cl, struct qdisc_walker *w)
1125 * Delete/get qdisc. 1125 * Delete/get qdisc.
1126 */ 1126 */
1127 1127
1128static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n) 1128static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n,
1129 struct netlink_ext_ack *extack)
1129{ 1130{
1130 struct net *net = sock_net(skb->sk); 1131 struct net *net = sock_net(skb->sk);
1131 struct tcmsg *tcm = nlmsg_data(n); 1132 struct tcmsg *tcm = nlmsg_data(n);
@@ -1140,7 +1141,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
1140 !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) 1141 !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN))
1141 return -EPERM; 1142 return -EPERM;
1142 1143
1143 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); 1144 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, extack);
1144 if (err < 0) 1145 if (err < 0)
1145 return err; 1146 return err;
1146 1147
@@ -1194,7 +1195,8 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
1194 * Create/change qdisc. 1195 * Create/change qdisc.
1195 */ 1196 */
1196 1197
1197static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n) 1198static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n,
1199 struct netlink_ext_ack *extack)
1198{ 1200{
1199 struct net *net = sock_net(skb->sk); 1201 struct net *net = sock_net(skb->sk);
1200 struct tcmsg *tcm; 1202 struct tcmsg *tcm;
@@ -1209,7 +1211,7 @@ static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
1209 1211
1210replay: 1212replay:
1211 /* Reinit, just in case something touches this. */ 1213 /* Reinit, just in case something touches this. */
1212 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); 1214 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, extack);
1213 if (err < 0) 1215 if (err < 0)
1214 return err; 1216 return err;
1215 1217
@@ -1567,7 +1569,8 @@ done:
1567 1569
1568 1570
1569 1571
1570static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n) 1572static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n,
1573 struct netlink_ext_ack *extack)
1571{ 1574{
1572 struct net *net = sock_net(skb->sk); 1575 struct net *net = sock_net(skb->sk);
1573 struct tcmsg *tcm = nlmsg_data(n); 1576 struct tcmsg *tcm = nlmsg_data(n);
@@ -1586,7 +1589,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n)
1586 !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) 1589 !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN))
1587 return -EPERM; 1590 return -EPERM;
1588 1591
1589 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); 1592 err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, extack);
1590 if (err < 0) 1593 if (err < 0)
1591 return err; 1594 return err;
1592 1595