diff options
| author | David Ahern <dsa@cumulusnetworks.com> | 2017-04-16 12:48:24 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2017-04-17 15:35:38 -0400 |
| commit | c21ef3e343ae916ad3cfd4dc6ef6791c1f80a010 (patch) | |
| tree | babe94fe139a27e7c998ef76ca6e0791d835a78c /net | |
| parent | af3b5158b89d3bab9be881113417558c71b71ca4 (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.c | 6 | ||||
| -rw-r--r-- | net/can/gw.c | 6 | ||||
| -rw-r--r-- | net/core/fib_rules.c | 10 | ||||
| -rw-r--r-- | net/core/neighbour.c | 15 | ||||
| -rw-r--r-- | net/core/net_namespace.c | 10 | ||||
| -rw-r--r-- | net/core/rtnetlink.c | 42 | ||||
| -rw-r--r-- | net/dcb/dcbnl.c | 5 | ||||
| -rw-r--r-- | net/decnet/dn_dev.c | 12 | ||||
| -rw-r--r-- | net/decnet/dn_fib.c | 10 | ||||
| -rw-r--r-- | net/decnet/dn_route.c | 6 | ||||
| -rw-r--r-- | net/ipv4/devinet.c | 13 | ||||
| -rw-r--r-- | net/ipv4/fib_frontend.c | 6 | ||||
| -rw-r--r-- | net/ipv4/ipmr.c | 10 | ||||
| -rw-r--r-- | net/ipv4/route.c | 5 | ||||
| -rw-r--r-- | net/ipv6/addrconf.c | 20 | ||||
| -rw-r--r-- | net/ipv6/addrlabel.c | 12 | ||||
| -rw-r--r-- | net/ipv6/route.c | 11 | ||||
| -rw-r--r-- | net/mpls/af_mpls.c | 9 | ||||
| -rw-r--r-- | net/phonet/pn_netlink.c | 10 | ||||
| -rw-r--r-- | net/qrtr/qrtr.c | 5 | ||||
| -rw-r--r-- | net/sched/act_api.c | 5 | ||||
| -rw-r--r-- | net/sched/cls_api.c | 5 | ||||
| -rw-r--r-- | net/sched/sch_api.c | 15 |
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 | ||
| 572 | static int br_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) | 572 | static 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 | ||
| 666 | static int br_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) | 667 | static 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 | ||
| 812 | static int cgw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh) | 812 | static 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 | ||
| 924 | static int cgw_remove_job(struct sk_buff *skb, struct nlmsghdr *nlh) | 925 | static 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 | ||
| 371 | int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh) | 371 | int 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 | } |
| 562 | EXPORT_SYMBOL_GPL(fib_nl_newrule); | 563 | EXPORT_SYMBOL_GPL(fib_nl_newrule); |
| 563 | 564 | ||
| 564 | int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh) | 565 | int 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 | ||
| 1593 | static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh) | 1593 | static 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 | ||
| 1651 | static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh) | 1652 | static 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 | ||
| 1939 | static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh) | 1941 | static 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 | ||
| 574 | static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh) | 574 | static 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 | ||
| 647 | static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh) | 648 | static 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 | ||
| 2216 | static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) | 2216 | static 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 | } |
| 2307 | EXPORT_SYMBOL_GPL(rtnl_delete_link); | 2309 | EXPORT_SYMBOL_GPL(rtnl_delete_link); |
| 2308 | 2310 | ||
| 2309 | static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) | 2311 | static 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 | ||
| 2429 | static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh) | 2432 | static 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 |
| 2445 | replay: | 2449 | replay: |
| 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 | ||
| 2681 | static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh) | 2685 | static 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 | ||
| 2963 | static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) | 2968 | static 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 | } |
| 3061 | EXPORT_SYMBOL(ndo_dflt_fdb_del); | 3067 | EXPORT_SYMBOL(ndo_dflt_fdb_del); |
| 3062 | 3068 | ||
| 3063 | static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) | 3069 | static 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 | ||
| 3506 | static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) | 3513 | static 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 | ||
| 3580 | static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) | 3588 | static 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 | ||
| 3948 | static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh) | 3957 | static 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 | ||
| 4113 | static void rtnetlink_rcv(struct sk_buff *skb) | 4123 | static 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 | ||
| 1699 | static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | 1699 | static 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 | ||
| 568 | static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | 568 | static 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 | ||
| 612 | static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | 614 | static 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 | ||
| 504 | static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 504 | static 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 | ||
| 530 | static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 531 | static 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 | */ |
| 1643 | static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | 1643 | static 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 | ||
| 574 | static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | 574 | static 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 | ||
| 848 | static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | 849 | static 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 | ||
| 1873 | static int inet_netconf_get_devconf(struct sk_buff *in_skb, | 1875 | static 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 | ||
| 713 | static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 713 | static 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 | ||
| 735 | static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 736 | static 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 */ |
| 2431 | static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh, | 2431 | static 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 */ |
| 2502 | static int ipmr_rtm_route(struct sk_buff *skb, struct nlmsghdr *nlh) | 2503 | static 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 | ||
| 2632 | static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | 2632 | static 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 | ||
| 613 | static int inet6_netconf_get_devconf(struct sk_buff *in_skb, | 613 | static 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 | ||
| 4415 | static int | 4416 | static int |
| 4416 | inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | 4417 | inet6_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 | ||
| 4525 | static int | 4527 | static int |
| 4526 | inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | 4528 | inet6_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 | ||
| 4889 | static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh) | 4892 | static 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 | ||
| 407 | static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh) | 407 | static 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 | ||
| 524 | static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh) | 526 | static 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 | ||
| 3263 | static int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 3263 | static 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 | ||
| 3280 | static int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 3281 | static 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 | ||
| 3568 | static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | 3570 | static 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 | ||
| 1112 | static int mpls_netconf_get_devconf(struct sk_buff *in_skb, | 1112 | static 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 | ||
| 1749 | static int mpls_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 1750 | static 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 | ||
| 1770 | static int mpls_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) | 1772 | static 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 | ||
| 64 | static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | 64 | static 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 | ||
| 230 | static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | 231 | static 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 | ||
| 946 | static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | 946 | static 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 | ||
| 996 | static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n) | 996 | static 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 | ||
| 204 | static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) | 204 | static 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) | |||
| 229 | replay: | 230 | replay: |
| 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 | ||
| 1128 | static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | 1128 | static 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 | ||
| 1197 | static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | 1198 | static 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 | ||
| 1210 | replay: | 1212 | replay: |
| 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 | ||
| 1570 | static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n) | 1572 | static 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 | ||
