diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 42 |
1 files changed, 26 insertions, 16 deletions
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) |
