aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/rtnetlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/core/rtnetlink.c')
-rw-r--r--net/core/rtnetlink.c42
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
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)