xref: /linux/net/core/rtnetlink.c (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * INET		An implementation of the TCP/IP protocol suite for the LINUX
4  *		operating system.  INET is implemented using the  BSD Socket
5  *		interface as the means of communication with the user level.
6  *
7  *		Routing netlink socket interface: protocol independent part.
8  *
9  * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
10  *
11  *	Fixes:
12  *	Vitaly E. Lavrov		RTA_OK arithmetic was wrong.
13  */
14 
15 #include <linux/bitops.h>
16 #include <linux/errno.h>
17 #include <linux/module.h>
18 #include <linux/types.h>
19 #include <linux/socket.h>
20 #include <linux/kernel.h>
21 #include <linux/timer.h>
22 #include <linux/string.h>
23 #include <linux/sockios.h>
24 #include <linux/net.h>
25 #include <linux/fcntl.h>
26 #include <linux/mm.h>
27 #include <linux/slab.h>
28 #include <linux/interrupt.h>
29 #include <linux/capability.h>
30 #include <linux/skbuff.h>
31 #include <linux/init.h>
32 #include <linux/security.h>
33 #include <linux/mutex.h>
34 #include <linux/if_addr.h>
35 #include <linux/if_bridge.h>
36 #include <linux/if_vlan.h>
37 #include <linux/pci.h>
38 #include <linux/etherdevice.h>
39 #include <linux/bpf.h>
40 
41 #include <linux/uaccess.h>
42 
43 #include <linux/inet.h>
44 #include <linux/netdevice.h>
45 #include <net/ip.h>
46 #include <net/protocol.h>
47 #include <net/arp.h>
48 #include <net/route.h>
49 #include <net/udp.h>
50 #include <net/tcp.h>
51 #include <net/sock.h>
52 #include <net/pkt_sched.h>
53 #include <net/fib_rules.h>
54 #include <net/rtnetlink.h>
55 #include <net/net_namespace.h>
56 #include <net/netdev_lock.h>
57 #include <net/devlink.h>
58 #if IS_ENABLED(CONFIG_IPV6)
59 #include <net/addrconf.h>
60 #endif
61 #include <linux/dpll.h>
62 
63 #include "dev.h"
64 
65 #define RTNL_MAX_TYPE		50
66 #define RTNL_SLAVE_MAX_TYPE	44
67 
68 struct rtnl_link {
69 	rtnl_doit_func		doit;
70 	rtnl_dumpit_func	dumpit;
71 	struct module		*owner;
72 	unsigned int		flags;
73 	struct rcu_head		rcu;
74 };
75 
76 static DEFINE_MUTEX(rtnl_mutex);
77 
rtnl_lock(void)78 void rtnl_lock(void)
79 {
80 	mutex_lock(&rtnl_mutex);
81 }
82 EXPORT_SYMBOL(rtnl_lock);
83 
rtnl_lock_interruptible(void)84 int rtnl_lock_interruptible(void)
85 {
86 	return mutex_lock_interruptible(&rtnl_mutex);
87 }
88 
rtnl_lock_killable(void)89 int rtnl_lock_killable(void)
90 {
91 	return mutex_lock_killable(&rtnl_mutex);
92 }
93 
94 static struct sk_buff *defer_kfree_skb_list;
rtnl_kfree_skbs(struct sk_buff * head,struct sk_buff * tail)95 void rtnl_kfree_skbs(struct sk_buff *head, struct sk_buff *tail)
96 {
97 	if (head && tail) {
98 		tail->next = defer_kfree_skb_list;
99 		defer_kfree_skb_list = head;
100 	}
101 }
102 EXPORT_SYMBOL(rtnl_kfree_skbs);
103 
__rtnl_unlock(void)104 void __rtnl_unlock(void)
105 {
106 	struct sk_buff *head = defer_kfree_skb_list;
107 
108 	defer_kfree_skb_list = NULL;
109 
110 	/* Ensure that we didn't actually add any TODO item when __rtnl_unlock()
111 	 * is used. In some places, e.g. in cfg80211, we have code that will do
112 	 * something like
113 	 *   rtnl_lock()
114 	 *   wiphy_lock()
115 	 *   ...
116 	 *   rtnl_unlock()
117 	 *
118 	 * and because netdev_run_todo() acquires the RTNL for items on the list
119 	 * we could cause a situation such as this:
120 	 * Thread 1			Thread 2
121 	 *				  rtnl_lock()
122 	 *				  unregister_netdevice()
123 	 *				  __rtnl_unlock()
124 	 * rtnl_lock()
125 	 * wiphy_lock()
126 	 * rtnl_unlock()
127 	 *   netdev_run_todo()
128 	 *     __rtnl_unlock()
129 	 *
130 	 *     // list not empty now
131 	 *     // because of thread 2
132 	 *				  rtnl_lock()
133 	 *     while (!list_empty(...))
134 	 *       rtnl_lock()
135 	 *				  wiphy_lock()
136 	 * **** DEADLOCK ****
137 	 *
138 	 * However, usage of __rtnl_unlock() is rare, and so we can ensure that
139 	 * it's not used in cases where something is added to do the list.
140 	 */
141 	WARN_ON(!list_empty(&net_todo_list));
142 
143 	mutex_unlock(&rtnl_mutex);
144 
145 	while (head) {
146 		struct sk_buff *next = head->next;
147 
148 		kfree_skb(head);
149 		cond_resched();
150 		head = next;
151 	}
152 }
153 
rtnl_unlock(void)154 void rtnl_unlock(void)
155 {
156 	/* This fellow will unlock it for us. */
157 	netdev_run_todo();
158 }
159 EXPORT_SYMBOL(rtnl_unlock);
160 
rtnl_trylock(void)161 int rtnl_trylock(void)
162 {
163 	return mutex_trylock(&rtnl_mutex);
164 }
165 EXPORT_SYMBOL(rtnl_trylock);
166 
rtnl_is_locked(void)167 int rtnl_is_locked(void)
168 {
169 	return mutex_is_locked(&rtnl_mutex);
170 }
171 EXPORT_SYMBOL(rtnl_is_locked);
172 
refcount_dec_and_rtnl_lock(refcount_t * r)173 bool refcount_dec_and_rtnl_lock(refcount_t *r)
174 {
175 	return refcount_dec_and_mutex_lock(r, &rtnl_mutex);
176 }
177 EXPORT_SYMBOL(refcount_dec_and_rtnl_lock);
178 
179 #ifdef CONFIG_PROVE_LOCKING
lockdep_rtnl_is_held(void)180 bool lockdep_rtnl_is_held(void)
181 {
182 	return lockdep_is_held(&rtnl_mutex);
183 }
184 EXPORT_SYMBOL(lockdep_rtnl_is_held);
185 #endif /* #ifdef CONFIG_PROVE_LOCKING */
186 
187 #ifdef CONFIG_DEBUG_NET_SMALL_RTNL
__rtnl_net_lock(struct net * net)188 void __rtnl_net_lock(struct net *net)
189 {
190 	ASSERT_RTNL();
191 
192 	mutex_lock(&net->rtnl_mutex);
193 }
194 EXPORT_SYMBOL(__rtnl_net_lock);
195 
__rtnl_net_unlock(struct net * net)196 void __rtnl_net_unlock(struct net *net)
197 {
198 	ASSERT_RTNL();
199 
200 	mutex_unlock(&net->rtnl_mutex);
201 }
202 EXPORT_SYMBOL(__rtnl_net_unlock);
203 
rtnl_net_lock(struct net * net)204 void rtnl_net_lock(struct net *net)
205 {
206 	rtnl_lock();
207 	__rtnl_net_lock(net);
208 }
209 EXPORT_SYMBOL(rtnl_net_lock);
210 
rtnl_net_unlock(struct net * net)211 void rtnl_net_unlock(struct net *net)
212 {
213 	__rtnl_net_unlock(net);
214 	rtnl_unlock();
215 }
216 EXPORT_SYMBOL(rtnl_net_unlock);
217 
rtnl_net_trylock(struct net * net)218 int rtnl_net_trylock(struct net *net)
219 {
220 	int ret = rtnl_trylock();
221 
222 	if (ret)
223 		__rtnl_net_lock(net);
224 
225 	return ret;
226 }
227 EXPORT_SYMBOL(rtnl_net_trylock);
228 
rtnl_net_lock_killable(struct net * net)229 int rtnl_net_lock_killable(struct net *net)
230 {
231 	int ret = rtnl_lock_killable();
232 
233 	if (!ret)
234 		__rtnl_net_lock(net);
235 
236 	return ret;
237 }
238 
rtnl_net_cmp_locks(const struct net * net_a,const struct net * net_b)239 static int rtnl_net_cmp_locks(const struct net *net_a, const struct net *net_b)
240 {
241 	if (net_eq(net_a, net_b))
242 		return 0;
243 
244 	/* always init_net first */
245 	if (net_eq(net_a, &init_net))
246 		return -1;
247 
248 	if (net_eq(net_b, &init_net))
249 		return 1;
250 
251 	/* otherwise lock in ascending order */
252 	return net_a < net_b ? -1 : 1;
253 }
254 
rtnl_net_lock_cmp_fn(const struct lockdep_map * a,const struct lockdep_map * b)255 int rtnl_net_lock_cmp_fn(const struct lockdep_map *a, const struct lockdep_map *b)
256 {
257 	const struct net *net_a, *net_b;
258 
259 	net_a = container_of(a, struct net, rtnl_mutex.dep_map);
260 	net_b = container_of(b, struct net, rtnl_mutex.dep_map);
261 
262 	return rtnl_net_cmp_locks(net_a, net_b);
263 }
264 
rtnl_net_is_locked(struct net * net)265 bool rtnl_net_is_locked(struct net *net)
266 {
267 	return rtnl_is_locked() && mutex_is_locked(&net->rtnl_mutex);
268 }
269 EXPORT_SYMBOL(rtnl_net_is_locked);
270 
lockdep_rtnl_net_is_held(struct net * net)271 bool lockdep_rtnl_net_is_held(struct net *net)
272 {
273 	return lockdep_rtnl_is_held() && lockdep_is_held(&net->rtnl_mutex);
274 }
275 EXPORT_SYMBOL(lockdep_rtnl_net_is_held);
276 #else
rtnl_net_cmp_locks(const struct net * net_a,const struct net * net_b)277 static int rtnl_net_cmp_locks(const struct net *net_a, const struct net *net_b)
278 {
279 	/* No need to swap */
280 	return -1;
281 }
282 #endif
283 
284 struct rtnl_nets {
285 	/* ->newlink() needs to freeze 3 netns at most;
286 	 * 2 for the new device, 1 for its peer.
287 	 */
288 	struct net *net[3];
289 	unsigned char len;
290 };
291 
rtnl_nets_init(struct rtnl_nets * rtnl_nets)292 static void rtnl_nets_init(struct rtnl_nets *rtnl_nets)
293 {
294 	memset(rtnl_nets, 0, sizeof(*rtnl_nets));
295 }
296 
rtnl_nets_destroy(struct rtnl_nets * rtnl_nets)297 static void rtnl_nets_destroy(struct rtnl_nets *rtnl_nets)
298 {
299 	int i;
300 
301 	for (i = 0; i < rtnl_nets->len; i++) {
302 		put_net(rtnl_nets->net[i]);
303 		rtnl_nets->net[i] = NULL;
304 	}
305 
306 	rtnl_nets->len = 0;
307 }
308 
309 /**
310  * rtnl_nets_add - Add netns to be locked before ->newlink().
311  *
312  * @rtnl_nets: rtnl_nets pointer passed to ->get_peer_net().
313  * @net: netns pointer with an extra refcnt held.
314  *
315  * The extra refcnt is released in rtnl_nets_destroy().
316  */
rtnl_nets_add(struct rtnl_nets * rtnl_nets,struct net * net)317 static void rtnl_nets_add(struct rtnl_nets *rtnl_nets, struct net *net)
318 {
319 	int i;
320 
321 	DEBUG_NET_WARN_ON_ONCE(rtnl_nets->len == ARRAY_SIZE(rtnl_nets->net));
322 
323 	for (i = 0; i < rtnl_nets->len; i++) {
324 		switch (rtnl_net_cmp_locks(rtnl_nets->net[i], net)) {
325 		case 0:
326 			put_net(net);
327 			return;
328 		case 1:
329 			swap(rtnl_nets->net[i], net);
330 		}
331 	}
332 
333 	rtnl_nets->net[i] = net;
334 	rtnl_nets->len++;
335 }
336 
rtnl_nets_lock(struct rtnl_nets * rtnl_nets)337 static void rtnl_nets_lock(struct rtnl_nets *rtnl_nets)
338 {
339 	int i;
340 
341 	rtnl_lock();
342 
343 	for (i = 0; i < rtnl_nets->len; i++)
344 		__rtnl_net_lock(rtnl_nets->net[i]);
345 }
346 
rtnl_nets_unlock(struct rtnl_nets * rtnl_nets)347 static void rtnl_nets_unlock(struct rtnl_nets *rtnl_nets)
348 {
349 	int i;
350 
351 	for (i = 0; i < rtnl_nets->len; i++)
352 		__rtnl_net_unlock(rtnl_nets->net[i]);
353 
354 	rtnl_unlock();
355 }
356 
357 static struct rtnl_link __rcu *__rcu *rtnl_msg_handlers[RTNL_FAMILY_MAX + 1];
358 
rtm_msgindex(int msgtype)359 static inline int rtm_msgindex(int msgtype)
360 {
361 	int msgindex = msgtype - RTM_BASE;
362 
363 	/*
364 	 * msgindex < 0 implies someone tried to register a netlink
365 	 * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
366 	 * the message type has not been added to linux/rtnetlink.h
367 	 */
368 	BUG_ON(msgindex < 0 || msgindex >= RTM_NR_MSGTYPES);
369 
370 	return msgindex;
371 }
372 
rtnl_get_link(int protocol,int msgtype)373 static struct rtnl_link *rtnl_get_link(int protocol, int msgtype)
374 {
375 	struct rtnl_link __rcu **tab;
376 
377 	if (protocol >= ARRAY_SIZE(rtnl_msg_handlers))
378 		protocol = PF_UNSPEC;
379 
380 	tab = rcu_dereference_rtnl(rtnl_msg_handlers[protocol]);
381 	if (!tab)
382 		tab = rcu_dereference_rtnl(rtnl_msg_handlers[PF_UNSPEC]);
383 
384 	return rcu_dereference_rtnl(tab[msgtype]);
385 }
386 
rtnl_register_internal(struct module * owner,int protocol,int msgtype,rtnl_doit_func doit,rtnl_dumpit_func dumpit,unsigned int flags)387 static int rtnl_register_internal(struct module *owner,
388 				  int protocol, int msgtype,
389 				  rtnl_doit_func doit, rtnl_dumpit_func dumpit,
390 				  unsigned int flags)
391 {
392 	struct rtnl_link *link, *old;
393 	struct rtnl_link __rcu **tab;
394 	int msgindex;
395 	int ret = -ENOBUFS;
396 
397 	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
398 	msgindex = rtm_msgindex(msgtype);
399 
400 	rtnl_lock();
401 	tab = rtnl_dereference(rtnl_msg_handlers[protocol]);
402 	if (tab == NULL) {
403 		tab = kcalloc(RTM_NR_MSGTYPES, sizeof(void *), GFP_KERNEL);
404 		if (!tab)
405 			goto unlock;
406 
407 		/* ensures we see the 0 stores */
408 		rcu_assign_pointer(rtnl_msg_handlers[protocol], tab);
409 	}
410 
411 	old = rtnl_dereference(tab[msgindex]);
412 	if (old) {
413 		link = kmemdup(old, sizeof(*old), GFP_KERNEL);
414 		if (!link)
415 			goto unlock;
416 	} else {
417 		link = kzalloc(sizeof(*link), GFP_KERNEL);
418 		if (!link)
419 			goto unlock;
420 	}
421 
422 	WARN_ON(link->owner && link->owner != owner);
423 	link->owner = owner;
424 
425 	WARN_ON(doit && link->doit && link->doit != doit);
426 	if (doit)
427 		link->doit = doit;
428 	WARN_ON(dumpit && link->dumpit && link->dumpit != dumpit);
429 	if (dumpit)
430 		link->dumpit = dumpit;
431 
432 	WARN_ON(rtnl_msgtype_kind(msgtype) != RTNL_KIND_DEL &&
433 		(flags & RTNL_FLAG_BULK_DEL_SUPPORTED));
434 	link->flags |= flags;
435 
436 	/* publish protocol:msgtype */
437 	rcu_assign_pointer(tab[msgindex], link);
438 	ret = 0;
439 	if (old)
440 		kfree_rcu(old, rcu);
441 unlock:
442 	rtnl_unlock();
443 	return ret;
444 }
445 
446 /**
447  * rtnl_unregister - Unregister a rtnetlink message type
448  * @protocol: Protocol family or PF_UNSPEC
449  * @msgtype: rtnetlink message type
450  *
451  * Returns 0 on success or a negative error code.
452  */
rtnl_unregister(int protocol,int msgtype)453 static int rtnl_unregister(int protocol, int msgtype)
454 {
455 	struct rtnl_link __rcu **tab;
456 	struct rtnl_link *link;
457 	int msgindex;
458 
459 	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
460 	msgindex = rtm_msgindex(msgtype);
461 
462 	rtnl_lock();
463 	tab = rtnl_dereference(rtnl_msg_handlers[protocol]);
464 	if (!tab) {
465 		rtnl_unlock();
466 		return -ENOENT;
467 	}
468 
469 	link = rcu_replace_pointer_rtnl(tab[msgindex], NULL);
470 	rtnl_unlock();
471 
472 	kfree_rcu(link, rcu);
473 
474 	return 0;
475 }
476 
477 /**
478  * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
479  * @protocol : Protocol family or PF_UNSPEC
480  *
481  * Identical to calling rtnl_unregster() for all registered message types
482  * of a certain protocol family.
483  */
rtnl_unregister_all(int protocol)484 void rtnl_unregister_all(int protocol)
485 {
486 	struct rtnl_link __rcu **tab;
487 	struct rtnl_link *link;
488 	int msgindex;
489 
490 	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
491 
492 	rtnl_lock();
493 	tab = rcu_replace_pointer_rtnl(rtnl_msg_handlers[protocol], NULL);
494 	if (!tab) {
495 		rtnl_unlock();
496 		return;
497 	}
498 	for (msgindex = 0; msgindex < RTM_NR_MSGTYPES; msgindex++) {
499 		link = rcu_replace_pointer_rtnl(tab[msgindex], NULL);
500 		kfree_rcu(link, rcu);
501 	}
502 	rtnl_unlock();
503 
504 	synchronize_net();
505 
506 	kfree(tab);
507 }
508 EXPORT_SYMBOL_GPL(rtnl_unregister_all);
509 
510 /**
511  * __rtnl_register_many - Register rtnetlink message types
512  * @handlers: Array of struct rtnl_msg_handlers
513  * @n: The length of @handlers
514  *
515  * Registers the specified function pointers (at least one of them has
516  * to be non-NULL) to be called whenever a request message for the
517  * specified protocol family and message type is received.
518  *
519  * The special protocol family PF_UNSPEC may be used to define fallback
520  * function pointers for the case when no entry for the specific protocol
521  * family exists.
522  *
523  * When one element of @handlers fails to register,
524  * 1) built-in: panics.
525  * 2) modules : the previous successful registrations are unwinded
526  *              and an error is returned.
527  *
528  * Use rtnl_register_many().
529  */
__rtnl_register_many(const struct rtnl_msg_handler * handlers,int n)530 int __rtnl_register_many(const struct rtnl_msg_handler *handlers, int n)
531 {
532 	const struct rtnl_msg_handler *handler;
533 	int i, err;
534 
535 	for (i = 0, handler = handlers; i < n; i++, handler++) {
536 		err = rtnl_register_internal(handler->owner, handler->protocol,
537 					     handler->msgtype, handler->doit,
538 					     handler->dumpit, handler->flags);
539 		if (err) {
540 			if (!handler->owner)
541 				panic("Unable to register rtnetlink message "
542 				      "handlers, %pS\n", handlers);
543 
544 			__rtnl_unregister_many(handlers, i);
545 			break;
546 		}
547 	}
548 
549 	return err;
550 }
551 EXPORT_SYMBOL_GPL(__rtnl_register_many);
552 
__rtnl_unregister_many(const struct rtnl_msg_handler * handlers,int n)553 void __rtnl_unregister_many(const struct rtnl_msg_handler *handlers, int n)
554 {
555 	const struct rtnl_msg_handler *handler;
556 	int i;
557 
558 	for (i = n - 1, handler = handlers + n - 1; i >= 0; i--, handler--)
559 		rtnl_unregister(handler->protocol, handler->msgtype);
560 }
561 EXPORT_SYMBOL_GPL(__rtnl_unregister_many);
562 
563 static DEFINE_MUTEX(link_ops_mutex);
564 static LIST_HEAD(link_ops);
565 
rtnl_link_ops_get(const char * kind,int * srcu_index)566 static struct rtnl_link_ops *rtnl_link_ops_get(const char *kind, int *srcu_index)
567 {
568 	struct rtnl_link_ops *ops;
569 
570 	rcu_read_lock();
571 
572 	list_for_each_entry_rcu(ops, &link_ops, list) {
573 		if (!strcmp(ops->kind, kind)) {
574 			*srcu_index = srcu_read_lock(&ops->srcu);
575 			goto unlock;
576 		}
577 	}
578 
579 	ops = NULL;
580 unlock:
581 	rcu_read_unlock();
582 
583 	return ops;
584 }
585 
rtnl_link_ops_put(struct rtnl_link_ops * ops,int srcu_index)586 static void rtnl_link_ops_put(struct rtnl_link_ops *ops, int srcu_index)
587 {
588 	srcu_read_unlock(&ops->srcu, srcu_index);
589 }
590 
591 /**
592  * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
593  * @ops: struct rtnl_link_ops * to register
594  *
595  * Returns 0 on success or a negative error code.
596  */
rtnl_link_register(struct rtnl_link_ops * ops)597 int rtnl_link_register(struct rtnl_link_ops *ops)
598 {
599 	struct rtnl_link_ops *tmp;
600 	int err;
601 
602 	/* Sanity-check max sizes to avoid stack buffer overflow. */
603 	if (WARN_ON(ops->maxtype > RTNL_MAX_TYPE ||
604 		    ops->slave_maxtype > RTNL_SLAVE_MAX_TYPE))
605 		return -EINVAL;
606 
607 	/* The check for alloc/setup is here because if ops
608 	 * does not have that filled up, it is not possible
609 	 * to use the ops for creating device. So do not
610 	 * fill up dellink as well. That disables rtnl_dellink.
611 	 */
612 	if ((ops->alloc || ops->setup) && !ops->dellink)
613 		ops->dellink = unregister_netdevice_queue;
614 
615 	err = init_srcu_struct(&ops->srcu);
616 	if (err)
617 		return err;
618 
619 	mutex_lock(&link_ops_mutex);
620 
621 	list_for_each_entry(tmp, &link_ops, list) {
622 		if (!strcmp(ops->kind, tmp->kind)) {
623 			err = -EEXIST;
624 			goto unlock;
625 		}
626 	}
627 
628 	list_add_tail_rcu(&ops->list, &link_ops);
629 unlock:
630 	mutex_unlock(&link_ops_mutex);
631 
632 	return err;
633 }
634 EXPORT_SYMBOL_GPL(rtnl_link_register);
635 
__rtnl_kill_links(struct net * net,struct rtnl_link_ops * ops)636 static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops)
637 {
638 	struct net_device *dev;
639 	LIST_HEAD(list_kill);
640 
641 	for_each_netdev(net, dev) {
642 		if (dev->rtnl_link_ops == ops)
643 			ops->dellink(dev, &list_kill);
644 	}
645 	unregister_netdevice_many(&list_kill);
646 }
647 
648 /* Return with the rtnl_lock held when there are no network
649  * devices unregistering in any network namespace.
650  */
rtnl_lock_unregistering_all(void)651 static void rtnl_lock_unregistering_all(void)
652 {
653 	DEFINE_WAIT_FUNC(wait, woken_wake_function);
654 
655 	add_wait_queue(&netdev_unregistering_wq, &wait);
656 	for (;;) {
657 		rtnl_lock();
658 		/* We held write locked pernet_ops_rwsem, and parallel
659 		 * setup_net() and cleanup_net() are not possible.
660 		 */
661 		if (!atomic_read(&dev_unreg_count))
662 			break;
663 		__rtnl_unlock();
664 
665 		wait_woken(&wait, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
666 	}
667 	remove_wait_queue(&netdev_unregistering_wq, &wait);
668 }
669 
670 /**
671  * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
672  * @ops: struct rtnl_link_ops * to unregister
673  */
rtnl_link_unregister(struct rtnl_link_ops * ops)674 void rtnl_link_unregister(struct rtnl_link_ops *ops)
675 {
676 	struct net *net;
677 
678 	mutex_lock(&link_ops_mutex);
679 	list_del_rcu(&ops->list);
680 	mutex_unlock(&link_ops_mutex);
681 
682 	synchronize_srcu(&ops->srcu);
683 	cleanup_srcu_struct(&ops->srcu);
684 
685 	/* Close the race with setup_net() and cleanup_net() */
686 	down_write(&pernet_ops_rwsem);
687 	rtnl_lock_unregistering_all();
688 
689 	for_each_net(net)
690 		__rtnl_kill_links(net, ops);
691 
692 	rtnl_unlock();
693 	up_write(&pernet_ops_rwsem);
694 }
695 EXPORT_SYMBOL_GPL(rtnl_link_unregister);
696 
rtnl_link_get_slave_info_data_size(const struct net_device * dev)697 static size_t rtnl_link_get_slave_info_data_size(const struct net_device *dev)
698 {
699 	struct net_device *master_dev;
700 	const struct rtnl_link_ops *ops;
701 	size_t size = 0;
702 
703 	rcu_read_lock();
704 
705 	master_dev = netdev_master_upper_dev_get_rcu((struct net_device *)dev);
706 	if (!master_dev)
707 		goto out;
708 
709 	ops = master_dev->rtnl_link_ops;
710 	if (!ops || !ops->get_slave_size)
711 		goto out;
712 	/* IFLA_INFO_SLAVE_DATA + nested data */
713 	size = nla_total_size(sizeof(struct nlattr)) +
714 	       ops->get_slave_size(master_dev, dev);
715 
716 out:
717 	rcu_read_unlock();
718 	return size;
719 }
720 
rtnl_link_get_size(const struct net_device * dev)721 static size_t rtnl_link_get_size(const struct net_device *dev)
722 {
723 	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
724 	size_t size;
725 
726 	if (!ops)
727 		return 0;
728 
729 	size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */
730 	       nla_total_size(strlen(ops->kind) + 1);  /* IFLA_INFO_KIND */
731 
732 	if (ops->get_size)
733 		/* IFLA_INFO_DATA + nested data */
734 		size += nla_total_size(sizeof(struct nlattr)) +
735 			ops->get_size(dev);
736 
737 	if (ops->get_xstats_size)
738 		/* IFLA_INFO_XSTATS */
739 		size += nla_total_size(ops->get_xstats_size(dev));
740 
741 	size += rtnl_link_get_slave_info_data_size(dev);
742 
743 	return size;
744 }
745 
746 static LIST_HEAD(rtnl_af_ops);
747 
rtnl_af_lookup(const int family,int * srcu_index)748 static struct rtnl_af_ops *rtnl_af_lookup(const int family, int *srcu_index)
749 {
750 	struct rtnl_af_ops *ops;
751 
752 	ASSERT_RTNL();
753 
754 	rcu_read_lock();
755 
756 	list_for_each_entry_rcu(ops, &rtnl_af_ops, list) {
757 		if (ops->family == family) {
758 			*srcu_index = srcu_read_lock(&ops->srcu);
759 			goto unlock;
760 		}
761 	}
762 
763 	ops = NULL;
764 unlock:
765 	rcu_read_unlock();
766 
767 	return ops;
768 }
769 
rtnl_af_put(struct rtnl_af_ops * ops,int srcu_index)770 static void rtnl_af_put(struct rtnl_af_ops *ops, int srcu_index)
771 {
772 	srcu_read_unlock(&ops->srcu, srcu_index);
773 }
774 
775 /**
776  * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
777  * @ops: struct rtnl_af_ops * to register
778  *
779  * Return: 0 on success or a negative error code.
780  */
rtnl_af_register(struct rtnl_af_ops * ops)781 int rtnl_af_register(struct rtnl_af_ops *ops)
782 {
783 	int err = init_srcu_struct(&ops->srcu);
784 
785 	if (err)
786 		return err;
787 
788 	rtnl_lock();
789 	list_add_tail_rcu(&ops->list, &rtnl_af_ops);
790 	rtnl_unlock();
791 
792 	return 0;
793 }
794 EXPORT_SYMBOL_GPL(rtnl_af_register);
795 
796 /**
797  * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
798  * @ops: struct rtnl_af_ops * to unregister
799  */
rtnl_af_unregister(struct rtnl_af_ops * ops)800 void rtnl_af_unregister(struct rtnl_af_ops *ops)
801 {
802 	rtnl_lock();
803 	list_del_rcu(&ops->list);
804 	rtnl_unlock();
805 
806 	synchronize_rcu();
807 	synchronize_srcu(&ops->srcu);
808 	cleanup_srcu_struct(&ops->srcu);
809 }
810 EXPORT_SYMBOL_GPL(rtnl_af_unregister);
811 
rtnl_link_get_af_size(const struct net_device * dev,u32 ext_filter_mask)812 static size_t rtnl_link_get_af_size(const struct net_device *dev,
813 				    u32 ext_filter_mask)
814 {
815 	struct rtnl_af_ops *af_ops;
816 	size_t size;
817 
818 	/* IFLA_AF_SPEC */
819 	size = nla_total_size(sizeof(struct nlattr));
820 
821 	rcu_read_lock();
822 	list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
823 		if (af_ops->get_link_af_size) {
824 			/* AF_* + nested data */
825 			size += nla_total_size(sizeof(struct nlattr)) +
826 				af_ops->get_link_af_size(dev, ext_filter_mask);
827 		}
828 	}
829 	rcu_read_unlock();
830 
831 	return size;
832 }
833 
rtnl_have_link_slave_info(const struct net_device * dev)834 static bool rtnl_have_link_slave_info(const struct net_device *dev)
835 {
836 	struct net_device *master_dev;
837 	bool ret = false;
838 
839 	rcu_read_lock();
840 
841 	master_dev = netdev_master_upper_dev_get_rcu((struct net_device *)dev);
842 	if (master_dev && master_dev->rtnl_link_ops)
843 		ret = true;
844 	rcu_read_unlock();
845 	return ret;
846 }
847 
rtnl_link_slave_info_fill(struct sk_buff * skb,const struct net_device * dev)848 static int rtnl_link_slave_info_fill(struct sk_buff *skb,
849 				     const struct net_device *dev)
850 {
851 	struct net_device *master_dev;
852 	const struct rtnl_link_ops *ops;
853 	struct nlattr *slave_data;
854 	int err;
855 
856 	master_dev = netdev_master_upper_dev_get((struct net_device *) dev);
857 	if (!master_dev)
858 		return 0;
859 	ops = master_dev->rtnl_link_ops;
860 	if (!ops)
861 		return 0;
862 	if (nla_put_string(skb, IFLA_INFO_SLAVE_KIND, ops->kind) < 0)
863 		return -EMSGSIZE;
864 	if (ops->fill_slave_info) {
865 		slave_data = nla_nest_start_noflag(skb, IFLA_INFO_SLAVE_DATA);
866 		if (!slave_data)
867 			return -EMSGSIZE;
868 		err = ops->fill_slave_info(skb, master_dev, dev);
869 		if (err < 0)
870 			goto err_cancel_slave_data;
871 		nla_nest_end(skb, slave_data);
872 	}
873 	return 0;
874 
875 err_cancel_slave_data:
876 	nla_nest_cancel(skb, slave_data);
877 	return err;
878 }
879 
rtnl_link_info_fill(struct sk_buff * skb,const struct net_device * dev)880 static int rtnl_link_info_fill(struct sk_buff *skb,
881 			       const struct net_device *dev)
882 {
883 	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
884 	struct nlattr *data;
885 	int err;
886 
887 	if (!ops)
888 		return 0;
889 	if (nla_put_string(skb, IFLA_INFO_KIND, ops->kind) < 0)
890 		return -EMSGSIZE;
891 	if (ops->fill_xstats) {
892 		err = ops->fill_xstats(skb, dev);
893 		if (err < 0)
894 			return err;
895 	}
896 	if (ops->fill_info) {
897 		data = nla_nest_start_noflag(skb, IFLA_INFO_DATA);
898 		if (data == NULL)
899 			return -EMSGSIZE;
900 		err = ops->fill_info(skb, dev);
901 		if (err < 0)
902 			goto err_cancel_data;
903 		nla_nest_end(skb, data);
904 	}
905 	return 0;
906 
907 err_cancel_data:
908 	nla_nest_cancel(skb, data);
909 	return err;
910 }
911 
rtnl_link_fill(struct sk_buff * skb,const struct net_device * dev)912 static int rtnl_link_fill(struct sk_buff *skb, const struct net_device *dev)
913 {
914 	struct nlattr *linkinfo;
915 	int err = -EMSGSIZE;
916 
917 	linkinfo = nla_nest_start_noflag(skb, IFLA_LINKINFO);
918 	if (linkinfo == NULL)
919 		goto out;
920 
921 	err = rtnl_link_info_fill(skb, dev);
922 	if (err < 0)
923 		goto err_cancel_link;
924 
925 	err = rtnl_link_slave_info_fill(skb, dev);
926 	if (err < 0)
927 		goto err_cancel_link;
928 
929 	nla_nest_end(skb, linkinfo);
930 	return 0;
931 
932 err_cancel_link:
933 	nla_nest_cancel(skb, linkinfo);
934 out:
935 	return err;
936 }
937 
rtnetlink_send(struct sk_buff * skb,struct net * net,u32 pid,unsigned int group,int echo)938 int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned int group, int echo)
939 {
940 	struct sock *rtnl = net->rtnl;
941 
942 	return nlmsg_notify(rtnl, skb, pid, group, echo, GFP_KERNEL);
943 }
944 
rtnl_unicast(struct sk_buff * skb,struct net * net,u32 pid)945 int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid)
946 {
947 	struct sock *rtnl = net->rtnl;
948 
949 	return nlmsg_unicast(rtnl, skb, pid);
950 }
951 EXPORT_SYMBOL(rtnl_unicast);
952 
rtnl_notify(struct sk_buff * skb,struct net * net,u32 pid,u32 group,const struct nlmsghdr * nlh,gfp_t flags)953 void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group,
954 		 const struct nlmsghdr *nlh, gfp_t flags)
955 {
956 	struct sock *rtnl = net->rtnl;
957 
958 	nlmsg_notify(rtnl, skb, pid, group, nlmsg_report(nlh), flags);
959 }
960 EXPORT_SYMBOL(rtnl_notify);
961 
rtnl_set_sk_err(struct net * net,u32 group,int error)962 void rtnl_set_sk_err(struct net *net, u32 group, int error)
963 {
964 	struct sock *rtnl = net->rtnl;
965 
966 	netlink_set_err(rtnl, 0, group, error);
967 }
968 EXPORT_SYMBOL(rtnl_set_sk_err);
969 
rtnetlink_put_metrics(struct sk_buff * skb,u32 * metrics)970 int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics)
971 {
972 	struct nlattr *mx;
973 	int i, valid = 0;
974 
975 	/* nothing is dumped for dst_default_metrics, so just skip the loop */
976 	if (metrics == dst_default_metrics.metrics)
977 		return 0;
978 
979 	mx = nla_nest_start_noflag(skb, RTA_METRICS);
980 	if (mx == NULL)
981 		return -ENOBUFS;
982 
983 	for (i = 0; i < RTAX_MAX; i++) {
984 		if (metrics[i]) {
985 			if (i == RTAX_CC_ALGO - 1) {
986 				char tmp[TCP_CA_NAME_MAX], *name;
987 
988 				name = tcp_ca_get_name_by_key(metrics[i], tmp);
989 				if (!name)
990 					continue;
991 				if (nla_put_string(skb, i + 1, name))
992 					goto nla_put_failure;
993 			} else if (i == RTAX_FEATURES - 1) {
994 				u32 user_features = metrics[i] & RTAX_FEATURE_MASK;
995 
996 				if (!user_features)
997 					continue;
998 				BUILD_BUG_ON(RTAX_FEATURE_MASK & DST_FEATURE_MASK);
999 				if (nla_put_u32(skb, i + 1, user_features))
1000 					goto nla_put_failure;
1001 			} else {
1002 				if (nla_put_u32(skb, i + 1, metrics[i]))
1003 					goto nla_put_failure;
1004 			}
1005 			valid++;
1006 		}
1007 	}
1008 
1009 	if (!valid) {
1010 		nla_nest_cancel(skb, mx);
1011 		return 0;
1012 	}
1013 
1014 	return nla_nest_end(skb, mx);
1015 
1016 nla_put_failure:
1017 	nla_nest_cancel(skb, mx);
1018 	return -EMSGSIZE;
1019 }
1020 EXPORT_SYMBOL(rtnetlink_put_metrics);
1021 
rtnl_put_cacheinfo(struct sk_buff * skb,struct dst_entry * dst,u32 id,long expires,u32 error)1022 int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
1023 		       long expires, u32 error)
1024 {
1025 	struct rta_cacheinfo ci = {
1026 		.rta_error = error,
1027 		.rta_id =  id,
1028 	};
1029 
1030 	if (dst) {
1031 		ci.rta_lastuse = jiffies_delta_to_clock_t(jiffies - dst->lastuse);
1032 		ci.rta_used = dst->__use;
1033 		ci.rta_clntref = rcuref_read(&dst->__rcuref);
1034 	}
1035 	if (expires) {
1036 		unsigned long clock;
1037 
1038 		clock = jiffies_to_clock_t(abs(expires));
1039 		clock = min_t(unsigned long, clock, INT_MAX);
1040 		ci.rta_expires = (expires > 0) ? clock : -clock;
1041 	}
1042 	return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci);
1043 }
1044 EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
1045 
netdev_set_operstate(struct net_device * dev,int newstate)1046 void netdev_set_operstate(struct net_device *dev, int newstate)
1047 {
1048 	unsigned int old = READ_ONCE(dev->operstate);
1049 
1050 	do {
1051 		if (old == newstate)
1052 			return;
1053 	} while (!try_cmpxchg(&dev->operstate, &old, newstate));
1054 
1055 	netdev_state_change(dev);
1056 }
1057 EXPORT_SYMBOL(netdev_set_operstate);
1058 
set_operstate(struct net_device * dev,unsigned char transition)1059 static void set_operstate(struct net_device *dev, unsigned char transition)
1060 {
1061 	unsigned char operstate = READ_ONCE(dev->operstate);
1062 
1063 	switch (transition) {
1064 	case IF_OPER_UP:
1065 		if ((operstate == IF_OPER_DORMANT ||
1066 		     operstate == IF_OPER_TESTING ||
1067 		     operstate == IF_OPER_UNKNOWN) &&
1068 		    !netif_dormant(dev) && !netif_testing(dev))
1069 			operstate = IF_OPER_UP;
1070 		break;
1071 
1072 	case IF_OPER_TESTING:
1073 		if (netif_oper_up(dev))
1074 			operstate = IF_OPER_TESTING;
1075 		break;
1076 
1077 	case IF_OPER_DORMANT:
1078 		if (netif_oper_up(dev))
1079 			operstate = IF_OPER_DORMANT;
1080 		break;
1081 	}
1082 
1083 	netdev_set_operstate(dev, operstate);
1084 }
1085 
rtnl_dev_get_flags(const struct net_device * dev)1086 static unsigned int rtnl_dev_get_flags(const struct net_device *dev)
1087 {
1088 	return (dev->flags & ~(IFF_PROMISC | IFF_ALLMULTI)) |
1089 	       (dev->gflags & (IFF_PROMISC | IFF_ALLMULTI));
1090 }
1091 
rtnl_dev_combine_flags(const struct net_device * dev,const struct ifinfomsg * ifm)1092 static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,
1093 					   const struct ifinfomsg *ifm)
1094 {
1095 	unsigned int flags = ifm->ifi_flags;
1096 
1097 	/* bugwards compatibility: ifi_change == 0 is treated as ~0 */
1098 	if (ifm->ifi_change)
1099 		flags = (flags & ifm->ifi_change) |
1100 			(rtnl_dev_get_flags(dev) & ~ifm->ifi_change);
1101 
1102 	return flags;
1103 }
1104 
copy_rtnl_link_stats(struct rtnl_link_stats * a,const struct rtnl_link_stats64 * b)1105 static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
1106 				 const struct rtnl_link_stats64 *b)
1107 {
1108 	a->rx_packets = b->rx_packets;
1109 	a->tx_packets = b->tx_packets;
1110 	a->rx_bytes = b->rx_bytes;
1111 	a->tx_bytes = b->tx_bytes;
1112 	a->rx_errors = b->rx_errors;
1113 	a->tx_errors = b->tx_errors;
1114 	a->rx_dropped = b->rx_dropped;
1115 	a->tx_dropped = b->tx_dropped;
1116 
1117 	a->multicast = b->multicast;
1118 	a->collisions = b->collisions;
1119 
1120 	a->rx_length_errors = b->rx_length_errors;
1121 	a->rx_over_errors = b->rx_over_errors;
1122 	a->rx_crc_errors = b->rx_crc_errors;
1123 	a->rx_frame_errors = b->rx_frame_errors;
1124 	a->rx_fifo_errors = b->rx_fifo_errors;
1125 	a->rx_missed_errors = b->rx_missed_errors;
1126 
1127 	a->tx_aborted_errors = b->tx_aborted_errors;
1128 	a->tx_carrier_errors = b->tx_carrier_errors;
1129 	a->tx_fifo_errors = b->tx_fifo_errors;
1130 	a->tx_heartbeat_errors = b->tx_heartbeat_errors;
1131 	a->tx_window_errors = b->tx_window_errors;
1132 
1133 	a->rx_compressed = b->rx_compressed;
1134 	a->tx_compressed = b->tx_compressed;
1135 
1136 	a->rx_nohandler = b->rx_nohandler;
1137 }
1138 
1139 /* All VF info */
rtnl_vfinfo_size(const struct net_device * dev,u32 ext_filter_mask)1140 static inline int rtnl_vfinfo_size(const struct net_device *dev,
1141 				   u32 ext_filter_mask)
1142 {
1143 	if (dev->dev.parent && (ext_filter_mask & RTEXT_FILTER_VF)) {
1144 		int num_vfs = dev_num_vf(dev->dev.parent);
1145 		size_t size = nla_total_size(0);
1146 		size += num_vfs *
1147 			(nla_total_size(0) +
1148 			 nla_total_size(sizeof(struct ifla_vf_mac)) +
1149 			 nla_total_size(sizeof(struct ifla_vf_broadcast)) +
1150 			 nla_total_size(sizeof(struct ifla_vf_vlan)) +
1151 			 nla_total_size(0) + /* nest IFLA_VF_VLAN_LIST */
1152 			 nla_total_size(MAX_VLAN_LIST_LEN *
1153 					sizeof(struct ifla_vf_vlan_info)) +
1154 			 nla_total_size(sizeof(struct ifla_vf_spoofchk)) +
1155 			 nla_total_size(sizeof(struct ifla_vf_tx_rate)) +
1156 			 nla_total_size(sizeof(struct ifla_vf_rate)) +
1157 			 nla_total_size(sizeof(struct ifla_vf_link_state)) +
1158 			 nla_total_size(sizeof(struct ifla_vf_rss_query_en)) +
1159 			 nla_total_size(sizeof(struct ifla_vf_trust)));
1160 		if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) {
1161 			size += num_vfs *
1162 				(nla_total_size(0) + /* nest IFLA_VF_STATS */
1163 				 /* IFLA_VF_STATS_RX_PACKETS */
1164 				 nla_total_size_64bit(sizeof(__u64)) +
1165 				 /* IFLA_VF_STATS_TX_PACKETS */
1166 				 nla_total_size_64bit(sizeof(__u64)) +
1167 				 /* IFLA_VF_STATS_RX_BYTES */
1168 				 nla_total_size_64bit(sizeof(__u64)) +
1169 				 /* IFLA_VF_STATS_TX_BYTES */
1170 				 nla_total_size_64bit(sizeof(__u64)) +
1171 				 /* IFLA_VF_STATS_BROADCAST */
1172 				 nla_total_size_64bit(sizeof(__u64)) +
1173 				 /* IFLA_VF_STATS_MULTICAST */
1174 				 nla_total_size_64bit(sizeof(__u64)) +
1175 				 /* IFLA_VF_STATS_RX_DROPPED */
1176 				 nla_total_size_64bit(sizeof(__u64)) +
1177 				 /* IFLA_VF_STATS_TX_DROPPED */
1178 				 nla_total_size_64bit(sizeof(__u64)));
1179 		}
1180 		return size;
1181 	} else
1182 		return 0;
1183 }
1184 
rtnl_port_size(const struct net_device * dev,u32 ext_filter_mask)1185 static size_t rtnl_port_size(const struct net_device *dev,
1186 			     u32 ext_filter_mask)
1187 {
1188 	size_t port_size = nla_total_size(4)		/* PORT_VF */
1189 		+ nla_total_size(PORT_PROFILE_MAX)	/* PORT_PROFILE */
1190 		+ nla_total_size(PORT_UUID_MAX)		/* PORT_INSTANCE_UUID */
1191 		+ nla_total_size(PORT_UUID_MAX)		/* PORT_HOST_UUID */
1192 		+ nla_total_size(1)			/* PROT_VDP_REQUEST */
1193 		+ nla_total_size(2);			/* PORT_VDP_RESPONSE */
1194 	size_t vf_ports_size = nla_total_size(sizeof(struct nlattr));
1195 	size_t vf_port_size = nla_total_size(sizeof(struct nlattr))
1196 		+ port_size;
1197 	size_t port_self_size = nla_total_size(sizeof(struct nlattr))
1198 		+ port_size;
1199 
1200 	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
1201 	    !(ext_filter_mask & RTEXT_FILTER_VF))
1202 		return 0;
1203 	if (dev_num_vf(dev->dev.parent))
1204 		return port_self_size + vf_ports_size +
1205 			vf_port_size * dev_num_vf(dev->dev.parent);
1206 	else
1207 		return port_self_size;
1208 }
1209 
rtnl_xdp_size(void)1210 static size_t rtnl_xdp_size(void)
1211 {
1212 	size_t xdp_size = nla_total_size(0) +	/* nest IFLA_XDP */
1213 			  nla_total_size(1) +	/* XDP_ATTACHED */
1214 			  nla_total_size(4) +	/* XDP_PROG_ID (or 1st mode) */
1215 			  nla_total_size(4);	/* XDP_<mode>_PROG_ID */
1216 
1217 	return xdp_size;
1218 }
1219 
rtnl_prop_list_size(const struct net_device * dev)1220 static size_t rtnl_prop_list_size(const struct net_device *dev)
1221 {
1222 	struct netdev_name_node *name_node;
1223 	unsigned int cnt = 0;
1224 
1225 	rcu_read_lock();
1226 	list_for_each_entry_rcu(name_node, &dev->name_node->list, list)
1227 		cnt++;
1228 	rcu_read_unlock();
1229 
1230 	if (!cnt)
1231 		return 0;
1232 
1233 	return nla_total_size(0) + cnt * nla_total_size(ALTIFNAMSIZ);
1234 }
1235 
rtnl_proto_down_size(const struct net_device * dev)1236 static size_t rtnl_proto_down_size(const struct net_device *dev)
1237 {
1238 	size_t size = nla_total_size(1);
1239 
1240 	/* Assume dev->proto_down_reason is not zero. */
1241 	size += nla_total_size(0) + nla_total_size(4);
1242 
1243 	return size;
1244 }
1245 
rtnl_devlink_port_size(const struct net_device * dev)1246 static size_t rtnl_devlink_port_size(const struct net_device *dev)
1247 {
1248 	size_t size = nla_total_size(0); /* nest IFLA_DEVLINK_PORT */
1249 
1250 	if (dev->devlink_port)
1251 		size += devlink_nl_port_handle_size(dev->devlink_port);
1252 
1253 	return size;
1254 }
1255 
rtnl_dpll_pin_size(const struct net_device * dev)1256 static size_t rtnl_dpll_pin_size(const struct net_device *dev)
1257 {
1258 	size_t size = nla_total_size(0); /* nest IFLA_DPLL_PIN */
1259 
1260 	size += dpll_netdev_pin_handle_size(dev);
1261 
1262 	return size;
1263 }
1264 
if_nlmsg_size(const struct net_device * dev,u32 ext_filter_mask)1265 static noinline size_t if_nlmsg_size(const struct net_device *dev,
1266 				     u32 ext_filter_mask)
1267 {
1268 	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
1269 	       + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
1270 	       + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
1271 	       + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
1272 	       + nla_total_size_64bit(sizeof(struct rtnl_link_ifmap))
1273 	       + nla_total_size(sizeof(struct rtnl_link_stats))
1274 	       + nla_total_size_64bit(sizeof(struct rtnl_link_stats64))
1275 	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
1276 	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_BROADCAST */
1277 	       + nla_total_size(4) /* IFLA_TXQLEN */
1278 	       + nla_total_size(4) /* IFLA_WEIGHT */
1279 	       + nla_total_size(4) /* IFLA_MTU */
1280 	       + nla_total_size(4) /* IFLA_LINK */
1281 	       + nla_total_size(4) /* IFLA_MASTER */
1282 	       + nla_total_size(1) /* IFLA_CARRIER */
1283 	       + nla_total_size(4) /* IFLA_PROMISCUITY */
1284 	       + nla_total_size(4) /* IFLA_ALLMULTI */
1285 	       + nla_total_size(4) /* IFLA_NUM_TX_QUEUES */
1286 	       + nla_total_size(4) /* IFLA_NUM_RX_QUEUES */
1287 	       + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */
1288 	       + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */
1289 	       + nla_total_size(4) /* IFLA_GRO_MAX_SIZE */
1290 	       + nla_total_size(4) /* IFLA_GSO_IPV4_MAX_SIZE */
1291 	       + nla_total_size(4) /* IFLA_GRO_IPV4_MAX_SIZE */
1292 	       + nla_total_size(4) /* IFLA_TSO_MAX_SIZE */
1293 	       + nla_total_size(4) /* IFLA_TSO_MAX_SEGS */
1294 	       + nla_total_size(1) /* IFLA_OPERSTATE */
1295 	       + nla_total_size(1) /* IFLA_LINKMODE */
1296 	       + nla_total_size(1) /* IFLA_NETNS_IMMUTABLE */
1297 	       + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
1298 	       + nla_total_size(4) /* IFLA_LINK_NETNSID */
1299 	       + nla_total_size(4) /* IFLA_GROUP */
1300 	       + nla_total_size(ext_filter_mask
1301 			        & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
1302 	       + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
1303 	       + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
1304 	       + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
1305 	       + rtnl_link_get_af_size(dev, ext_filter_mask) /* IFLA_AF_SPEC */
1306 	       + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
1307 	       + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */
1308 	       + nla_total_size(IFNAMSIZ) /* IFLA_PHYS_PORT_NAME */
1309 	       + rtnl_xdp_size() /* IFLA_XDP */
1310 	       + nla_total_size(4)  /* IFLA_EVENT */
1311 	       + nla_total_size(4)  /* IFLA_NEW_NETNSID */
1312 	       + nla_total_size(4)  /* IFLA_NEW_IFINDEX */
1313 	       + rtnl_proto_down_size(dev)  /* proto down */
1314 	       + nla_total_size(4)  /* IFLA_TARGET_NETNSID */
1315 	       + nla_total_size(4)  /* IFLA_CARRIER_UP_COUNT */
1316 	       + nla_total_size(4)  /* IFLA_CARRIER_DOWN_COUNT */
1317 	       + nla_total_size(4)  /* IFLA_MIN_MTU */
1318 	       + nla_total_size(4)  /* IFLA_MAX_MTU */
1319 	       + rtnl_prop_list_size(dev)
1320 	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_PERM_ADDRESS */
1321 	       + rtnl_devlink_port_size(dev)
1322 	       + rtnl_dpll_pin_size(dev)
1323 	       + nla_total_size(8)  /* IFLA_MAX_PACING_OFFLOAD_HORIZON */
1324 	       + 0;
1325 }
1326 
rtnl_vf_ports_fill(struct sk_buff * skb,struct net_device * dev)1327 static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
1328 {
1329 	struct nlattr *vf_ports;
1330 	struct nlattr *vf_port;
1331 	int vf;
1332 	int err;
1333 
1334 	vf_ports = nla_nest_start_noflag(skb, IFLA_VF_PORTS);
1335 	if (!vf_ports)
1336 		return -EMSGSIZE;
1337 
1338 	for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
1339 		vf_port = nla_nest_start_noflag(skb, IFLA_VF_PORT);
1340 		if (!vf_port)
1341 			goto nla_put_failure;
1342 		if (nla_put_u32(skb, IFLA_PORT_VF, vf))
1343 			goto nla_put_failure;
1344 		err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
1345 		if (err == -EMSGSIZE)
1346 			goto nla_put_failure;
1347 		if (err) {
1348 			nla_nest_cancel(skb, vf_port);
1349 			continue;
1350 		}
1351 		nla_nest_end(skb, vf_port);
1352 	}
1353 
1354 	nla_nest_end(skb, vf_ports);
1355 
1356 	return 0;
1357 
1358 nla_put_failure:
1359 	nla_nest_cancel(skb, vf_ports);
1360 	return -EMSGSIZE;
1361 }
1362 
rtnl_port_self_fill(struct sk_buff * skb,struct net_device * dev)1363 static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
1364 {
1365 	struct nlattr *port_self;
1366 	int err;
1367 
1368 	port_self = nla_nest_start_noflag(skb, IFLA_PORT_SELF);
1369 	if (!port_self)
1370 		return -EMSGSIZE;
1371 
1372 	err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
1373 	if (err) {
1374 		nla_nest_cancel(skb, port_self);
1375 		return (err == -EMSGSIZE) ? err : 0;
1376 	}
1377 
1378 	nla_nest_end(skb, port_self);
1379 
1380 	return 0;
1381 }
1382 
rtnl_port_fill(struct sk_buff * skb,struct net_device * dev,u32 ext_filter_mask)1383 static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev,
1384 			  u32 ext_filter_mask)
1385 {
1386 	int err;
1387 
1388 	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
1389 	    !(ext_filter_mask & RTEXT_FILTER_VF))
1390 		return 0;
1391 
1392 	err = rtnl_port_self_fill(skb, dev);
1393 	if (err)
1394 		return err;
1395 
1396 	if (dev_num_vf(dev->dev.parent)) {
1397 		err = rtnl_vf_ports_fill(skb, dev);
1398 		if (err)
1399 			return err;
1400 	}
1401 
1402 	return 0;
1403 }
1404 
rtnl_phys_port_id_fill(struct sk_buff * skb,struct net_device * dev)1405 static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev)
1406 {
1407 	int err;
1408 	struct netdev_phys_item_id ppid;
1409 
1410 	err = dev_get_phys_port_id(dev, &ppid);
1411 	if (err) {
1412 		if (err == -EOPNOTSUPP)
1413 			return 0;
1414 		return err;
1415 	}
1416 
1417 	if (nla_put(skb, IFLA_PHYS_PORT_ID, ppid.id_len, ppid.id))
1418 		return -EMSGSIZE;
1419 
1420 	return 0;
1421 }
1422 
rtnl_phys_port_name_fill(struct sk_buff * skb,struct net_device * dev)1423 static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev)
1424 {
1425 	char name[IFNAMSIZ];
1426 	int err;
1427 
1428 	err = dev_get_phys_port_name(dev, name, sizeof(name));
1429 	if (err) {
1430 		if (err == -EOPNOTSUPP)
1431 			return 0;
1432 		return err;
1433 	}
1434 
1435 	if (nla_put_string(skb, IFLA_PHYS_PORT_NAME, name))
1436 		return -EMSGSIZE;
1437 
1438 	return 0;
1439 }
1440 
rtnl_phys_switch_id_fill(struct sk_buff * skb,struct net_device * dev)1441 static int rtnl_phys_switch_id_fill(struct sk_buff *skb, struct net_device *dev)
1442 {
1443 	struct netdev_phys_item_id ppid = { };
1444 	int err;
1445 
1446 	err = dev_get_port_parent_id(dev, &ppid, false);
1447 	if (err) {
1448 		if (err == -EOPNOTSUPP)
1449 			return 0;
1450 		return err;
1451 	}
1452 
1453 	if (nla_put(skb, IFLA_PHYS_SWITCH_ID, ppid.id_len, ppid.id))
1454 		return -EMSGSIZE;
1455 
1456 	return 0;
1457 }
1458 
rtnl_fill_stats(struct sk_buff * skb,struct net_device * dev)1459 static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb,
1460 					      struct net_device *dev)
1461 {
1462 	struct rtnl_link_stats64 *sp;
1463 	struct nlattr *attr;
1464 
1465 	attr = nla_reserve_64bit(skb, IFLA_STATS64,
1466 				 sizeof(struct rtnl_link_stats64), IFLA_PAD);
1467 	if (!attr)
1468 		return -EMSGSIZE;
1469 
1470 	sp = nla_data(attr);
1471 	dev_get_stats(dev, sp);
1472 
1473 	attr = nla_reserve(skb, IFLA_STATS,
1474 			   sizeof(struct rtnl_link_stats));
1475 	if (!attr)
1476 		return -EMSGSIZE;
1477 
1478 	copy_rtnl_link_stats(nla_data(attr), sp);
1479 
1480 	return 0;
1481 }
1482 
rtnl_fill_vfinfo(struct sk_buff * skb,struct net_device * dev,int vfs_num,u32 ext_filter_mask)1483 static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
1484 					       struct net_device *dev,
1485 					       int vfs_num,
1486 					       u32 ext_filter_mask)
1487 {
1488 	struct ifla_vf_rss_query_en vf_rss_query_en;
1489 	struct nlattr *vf, *vfstats, *vfvlanlist;
1490 	struct ifla_vf_link_state vf_linkstate;
1491 	struct ifla_vf_vlan_info vf_vlan_info;
1492 	struct ifla_vf_spoofchk vf_spoofchk;
1493 	struct ifla_vf_tx_rate vf_tx_rate;
1494 	struct ifla_vf_stats vf_stats;
1495 	struct ifla_vf_trust vf_trust;
1496 	struct ifla_vf_vlan vf_vlan;
1497 	struct ifla_vf_rate vf_rate;
1498 	struct ifla_vf_mac vf_mac;
1499 	struct ifla_vf_broadcast vf_broadcast;
1500 	struct ifla_vf_info ivi;
1501 	struct ifla_vf_guid node_guid;
1502 	struct ifla_vf_guid port_guid;
1503 
1504 	memset(&ivi, 0, sizeof(ivi));
1505 
1506 	/* Not all SR-IOV capable drivers support the
1507 	 * spoofcheck and "RSS query enable" query.  Preset to
1508 	 * -1 so the user space tool can detect that the driver
1509 	 * didn't report anything.
1510 	 */
1511 	ivi.spoofchk = -1;
1512 	ivi.rss_query_en = -1;
1513 	ivi.trusted = -1;
1514 	/* The default value for VF link state is "auto"
1515 	 * IFLA_VF_LINK_STATE_AUTO which equals zero
1516 	 */
1517 	ivi.linkstate = 0;
1518 	/* VLAN Protocol by default is 802.1Q */
1519 	ivi.vlan_proto = htons(ETH_P_8021Q);
1520 	if (dev->netdev_ops->ndo_get_vf_config(dev, vfs_num, &ivi))
1521 		return 0;
1522 
1523 	memset(&vf_vlan_info, 0, sizeof(vf_vlan_info));
1524 	memset(&node_guid, 0, sizeof(node_guid));
1525 	memset(&port_guid, 0, sizeof(port_guid));
1526 
1527 	vf_mac.vf =
1528 		vf_vlan.vf =
1529 		vf_vlan_info.vf =
1530 		vf_rate.vf =
1531 		vf_tx_rate.vf =
1532 		vf_spoofchk.vf =
1533 		vf_linkstate.vf =
1534 		vf_rss_query_en.vf =
1535 		vf_trust.vf =
1536 		node_guid.vf =
1537 		port_guid.vf = ivi.vf;
1538 
1539 	memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
1540 	memcpy(vf_broadcast.broadcast, dev->broadcast, dev->addr_len);
1541 	vf_vlan.vlan = ivi.vlan;
1542 	vf_vlan.qos = ivi.qos;
1543 	vf_vlan_info.vlan = ivi.vlan;
1544 	vf_vlan_info.qos = ivi.qos;
1545 	vf_vlan_info.vlan_proto = ivi.vlan_proto;
1546 	vf_tx_rate.rate = ivi.max_tx_rate;
1547 	vf_rate.min_tx_rate = ivi.min_tx_rate;
1548 	vf_rate.max_tx_rate = ivi.max_tx_rate;
1549 	vf_spoofchk.setting = ivi.spoofchk;
1550 	vf_linkstate.link_state = ivi.linkstate;
1551 	vf_rss_query_en.setting = ivi.rss_query_en;
1552 	vf_trust.setting = ivi.trusted;
1553 	vf = nla_nest_start_noflag(skb, IFLA_VF_INFO);
1554 	if (!vf)
1555 		return -EMSGSIZE;
1556 	if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
1557 	    nla_put(skb, IFLA_VF_BROADCAST, sizeof(vf_broadcast), &vf_broadcast) ||
1558 	    nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
1559 	    nla_put(skb, IFLA_VF_RATE, sizeof(vf_rate),
1560 		    &vf_rate) ||
1561 	    nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
1562 		    &vf_tx_rate) ||
1563 	    nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
1564 		    &vf_spoofchk) ||
1565 	    nla_put(skb, IFLA_VF_LINK_STATE, sizeof(vf_linkstate),
1566 		    &vf_linkstate) ||
1567 	    nla_put(skb, IFLA_VF_RSS_QUERY_EN,
1568 		    sizeof(vf_rss_query_en),
1569 		    &vf_rss_query_en) ||
1570 	    nla_put(skb, IFLA_VF_TRUST,
1571 		    sizeof(vf_trust), &vf_trust))
1572 		goto nla_put_vf_failure;
1573 
1574 	if (dev->netdev_ops->ndo_get_vf_guid &&
1575 	    !dev->netdev_ops->ndo_get_vf_guid(dev, vfs_num, &node_guid,
1576 					      &port_guid)) {
1577 		if (nla_put(skb, IFLA_VF_IB_NODE_GUID, sizeof(node_guid),
1578 			    &node_guid) ||
1579 		    nla_put(skb, IFLA_VF_IB_PORT_GUID, sizeof(port_guid),
1580 			    &port_guid))
1581 			goto nla_put_vf_failure;
1582 	}
1583 	vfvlanlist = nla_nest_start_noflag(skb, IFLA_VF_VLAN_LIST);
1584 	if (!vfvlanlist)
1585 		goto nla_put_vf_failure;
1586 	if (nla_put(skb, IFLA_VF_VLAN_INFO, sizeof(vf_vlan_info),
1587 		    &vf_vlan_info)) {
1588 		nla_nest_cancel(skb, vfvlanlist);
1589 		goto nla_put_vf_failure;
1590 	}
1591 	nla_nest_end(skb, vfvlanlist);
1592 	if (~ext_filter_mask & RTEXT_FILTER_SKIP_STATS) {
1593 		memset(&vf_stats, 0, sizeof(vf_stats));
1594 		if (dev->netdev_ops->ndo_get_vf_stats)
1595 			dev->netdev_ops->ndo_get_vf_stats(dev, vfs_num,
1596 							  &vf_stats);
1597 		vfstats = nla_nest_start_noflag(skb, IFLA_VF_STATS);
1598 		if (!vfstats)
1599 			goto nla_put_vf_failure;
1600 		if (nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_PACKETS,
1601 				      vf_stats.rx_packets, IFLA_VF_STATS_PAD) ||
1602 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_PACKETS,
1603 				      vf_stats.tx_packets, IFLA_VF_STATS_PAD) ||
1604 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_BYTES,
1605 				      vf_stats.rx_bytes, IFLA_VF_STATS_PAD) ||
1606 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_BYTES,
1607 				      vf_stats.tx_bytes, IFLA_VF_STATS_PAD) ||
1608 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST,
1609 				      vf_stats.broadcast, IFLA_VF_STATS_PAD) ||
1610 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST,
1611 				      vf_stats.multicast, IFLA_VF_STATS_PAD) ||
1612 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_DROPPED,
1613 				      vf_stats.rx_dropped, IFLA_VF_STATS_PAD) ||
1614 		    nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_DROPPED,
1615 				      vf_stats.tx_dropped, IFLA_VF_STATS_PAD)) {
1616 			nla_nest_cancel(skb, vfstats);
1617 			goto nla_put_vf_failure;
1618 		}
1619 		nla_nest_end(skb, vfstats);
1620 	}
1621 	nla_nest_end(skb, vf);
1622 	return 0;
1623 
1624 nla_put_vf_failure:
1625 	nla_nest_cancel(skb, vf);
1626 	return -EMSGSIZE;
1627 }
1628 
rtnl_fill_vf(struct sk_buff * skb,struct net_device * dev,u32 ext_filter_mask)1629 static noinline_for_stack int rtnl_fill_vf(struct sk_buff *skb,
1630 					   struct net_device *dev,
1631 					   u32 ext_filter_mask)
1632 {
1633 	struct nlattr *vfinfo;
1634 	int i, num_vfs;
1635 
1636 	if (!dev->dev.parent || ((ext_filter_mask & RTEXT_FILTER_VF) == 0))
1637 		return 0;
1638 
1639 	num_vfs = dev_num_vf(dev->dev.parent);
1640 	if (nla_put_u32(skb, IFLA_NUM_VF, num_vfs))
1641 		return -EMSGSIZE;
1642 
1643 	if (!dev->netdev_ops->ndo_get_vf_config)
1644 		return 0;
1645 
1646 	vfinfo = nla_nest_start_noflag(skb, IFLA_VFINFO_LIST);
1647 	if (!vfinfo)
1648 		return -EMSGSIZE;
1649 
1650 	for (i = 0; i < num_vfs; i++) {
1651 		if (rtnl_fill_vfinfo(skb, dev, i, ext_filter_mask)) {
1652 			nla_nest_cancel(skb, vfinfo);
1653 			return -EMSGSIZE;
1654 		}
1655 	}
1656 
1657 	nla_nest_end(skb, vfinfo);
1658 	return 0;
1659 }
1660 
rtnl_fill_link_ifmap(struct sk_buff * skb,const struct net_device * dev)1661 static int rtnl_fill_link_ifmap(struct sk_buff *skb,
1662 				const struct net_device *dev)
1663 {
1664 	struct rtnl_link_ifmap map;
1665 
1666 	memset(&map, 0, sizeof(map));
1667 	map.mem_start = READ_ONCE(dev->mem_start);
1668 	map.mem_end   = READ_ONCE(dev->mem_end);
1669 	map.base_addr = READ_ONCE(dev->base_addr);
1670 	map.irq       = READ_ONCE(dev->irq);
1671 	map.dma       = READ_ONCE(dev->dma);
1672 	map.port      = READ_ONCE(dev->if_port);
1673 
1674 	if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD))
1675 		return -EMSGSIZE;
1676 
1677 	return 0;
1678 }
1679 
rtnl_xdp_prog_skb(struct net_device * dev)1680 static u32 rtnl_xdp_prog_skb(struct net_device *dev)
1681 {
1682 	const struct bpf_prog *generic_xdp_prog;
1683 	u32 res = 0;
1684 
1685 	rcu_read_lock();
1686 	generic_xdp_prog = rcu_dereference(dev->xdp_prog);
1687 	if (generic_xdp_prog)
1688 		res = generic_xdp_prog->aux->id;
1689 	rcu_read_unlock();
1690 
1691 	return res;
1692 }
1693 
rtnl_xdp_prog_drv(struct net_device * dev)1694 static u32 rtnl_xdp_prog_drv(struct net_device *dev)
1695 {
1696 	return dev_xdp_prog_id(dev, XDP_MODE_DRV);
1697 }
1698 
rtnl_xdp_prog_hw(struct net_device * dev)1699 static u32 rtnl_xdp_prog_hw(struct net_device *dev)
1700 {
1701 	return dev_xdp_prog_id(dev, XDP_MODE_HW);
1702 }
1703 
rtnl_xdp_report_one(struct sk_buff * skb,struct net_device * dev,u32 * prog_id,u8 * mode,u8 tgt_mode,u32 attr,u32 (* get_prog_id)(struct net_device * dev))1704 static int rtnl_xdp_report_one(struct sk_buff *skb, struct net_device *dev,
1705 			       u32 *prog_id, u8 *mode, u8 tgt_mode, u32 attr,
1706 			       u32 (*get_prog_id)(struct net_device *dev))
1707 {
1708 	u32 curr_id;
1709 	int err;
1710 
1711 	curr_id = get_prog_id(dev);
1712 	if (!curr_id)
1713 		return 0;
1714 
1715 	*prog_id = curr_id;
1716 	err = nla_put_u32(skb, attr, curr_id);
1717 	if (err)
1718 		return err;
1719 
1720 	if (*mode != XDP_ATTACHED_NONE)
1721 		*mode = XDP_ATTACHED_MULTI;
1722 	else
1723 		*mode = tgt_mode;
1724 
1725 	return 0;
1726 }
1727 
rtnl_xdp_fill(struct sk_buff * skb,struct net_device * dev)1728 static int rtnl_xdp_fill(struct sk_buff *skb, struct net_device *dev)
1729 {
1730 	struct nlattr *xdp;
1731 	u32 prog_id;
1732 	int err;
1733 	u8 mode;
1734 
1735 	xdp = nla_nest_start_noflag(skb, IFLA_XDP);
1736 	if (!xdp)
1737 		return -EMSGSIZE;
1738 
1739 	prog_id = 0;
1740 	mode = XDP_ATTACHED_NONE;
1741 	err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_SKB,
1742 				  IFLA_XDP_SKB_PROG_ID, rtnl_xdp_prog_skb);
1743 	if (err)
1744 		goto err_cancel;
1745 	err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_DRV,
1746 				  IFLA_XDP_DRV_PROG_ID, rtnl_xdp_prog_drv);
1747 	if (err)
1748 		goto err_cancel;
1749 	err = rtnl_xdp_report_one(skb, dev, &prog_id, &mode, XDP_ATTACHED_HW,
1750 				  IFLA_XDP_HW_PROG_ID, rtnl_xdp_prog_hw);
1751 	if (err)
1752 		goto err_cancel;
1753 
1754 	err = nla_put_u8(skb, IFLA_XDP_ATTACHED, mode);
1755 	if (err)
1756 		goto err_cancel;
1757 
1758 	if (prog_id && mode != XDP_ATTACHED_MULTI) {
1759 		err = nla_put_u32(skb, IFLA_XDP_PROG_ID, prog_id);
1760 		if (err)
1761 			goto err_cancel;
1762 	}
1763 
1764 	nla_nest_end(skb, xdp);
1765 	return 0;
1766 
1767 err_cancel:
1768 	nla_nest_cancel(skb, xdp);
1769 	return err;
1770 }
1771 
rtnl_get_event(unsigned long event)1772 static u32 rtnl_get_event(unsigned long event)
1773 {
1774 	u32 rtnl_event_type = IFLA_EVENT_NONE;
1775 
1776 	switch (event) {
1777 	case NETDEV_REBOOT:
1778 		rtnl_event_type = IFLA_EVENT_REBOOT;
1779 		break;
1780 	case NETDEV_FEAT_CHANGE:
1781 		rtnl_event_type = IFLA_EVENT_FEATURES;
1782 		break;
1783 	case NETDEV_BONDING_FAILOVER:
1784 		rtnl_event_type = IFLA_EVENT_BONDING_FAILOVER;
1785 		break;
1786 	case NETDEV_NOTIFY_PEERS:
1787 		rtnl_event_type = IFLA_EVENT_NOTIFY_PEERS;
1788 		break;
1789 	case NETDEV_RESEND_IGMP:
1790 		rtnl_event_type = IFLA_EVENT_IGMP_RESEND;
1791 		break;
1792 	case NETDEV_CHANGEINFODATA:
1793 		rtnl_event_type = IFLA_EVENT_BONDING_OPTIONS;
1794 		break;
1795 	default:
1796 		break;
1797 	}
1798 
1799 	return rtnl_event_type;
1800 }
1801 
put_master_ifindex(struct sk_buff * skb,struct net_device * dev)1802 static int put_master_ifindex(struct sk_buff *skb, struct net_device *dev)
1803 {
1804 	const struct net_device *upper_dev;
1805 	int ret = 0;
1806 
1807 	rcu_read_lock();
1808 
1809 	upper_dev = netdev_master_upper_dev_get_rcu(dev);
1810 	if (upper_dev)
1811 		ret = nla_put_u32(skb, IFLA_MASTER,
1812 				  READ_ONCE(upper_dev->ifindex));
1813 
1814 	rcu_read_unlock();
1815 	return ret;
1816 }
1817 
nla_put_iflink(struct sk_buff * skb,const struct net_device * dev,bool force)1818 static int nla_put_iflink(struct sk_buff *skb, const struct net_device *dev,
1819 			  bool force)
1820 {
1821 	int iflink = dev_get_iflink(dev);
1822 
1823 	if (force || READ_ONCE(dev->ifindex) != iflink)
1824 		return nla_put_u32(skb, IFLA_LINK, iflink);
1825 
1826 	return 0;
1827 }
1828 
nla_put_ifalias(struct sk_buff * skb,struct net_device * dev)1829 static noinline_for_stack int nla_put_ifalias(struct sk_buff *skb,
1830 					      struct net_device *dev)
1831 {
1832 	char buf[IFALIASZ];
1833 	int ret;
1834 
1835 	ret = dev_get_alias(dev, buf, sizeof(buf));
1836 	return ret > 0 ? nla_put_string(skb, IFLA_IFALIAS, buf) : 0;
1837 }
1838 
rtnl_fill_link_netnsid(struct sk_buff * skb,const struct net_device * dev,struct net * src_net,gfp_t gfp)1839 static int rtnl_fill_link_netnsid(struct sk_buff *skb,
1840 				  const struct net_device *dev,
1841 				  struct net *src_net, gfp_t gfp)
1842 {
1843 	bool put_iflink = false;
1844 
1845 	if (dev->rtnl_link_ops && dev->rtnl_link_ops->get_link_net) {
1846 		struct net *link_net = dev->rtnl_link_ops->get_link_net(dev);
1847 
1848 		if (!net_eq(dev_net(dev), link_net)) {
1849 			int id = peernet2id_alloc(src_net, link_net, gfp);
1850 
1851 			if (nla_put_s32(skb, IFLA_LINK_NETNSID, id))
1852 				return -EMSGSIZE;
1853 
1854 			put_iflink = true;
1855 		}
1856 	}
1857 
1858 	return nla_put_iflink(skb, dev, put_iflink);
1859 }
1860 
rtnl_fill_link_af(struct sk_buff * skb,const struct net_device * dev,u32 ext_filter_mask)1861 static int rtnl_fill_link_af(struct sk_buff *skb,
1862 			     const struct net_device *dev,
1863 			     u32 ext_filter_mask)
1864 {
1865 	const struct rtnl_af_ops *af_ops;
1866 	struct nlattr *af_spec;
1867 
1868 	af_spec = nla_nest_start_noflag(skb, IFLA_AF_SPEC);
1869 	if (!af_spec)
1870 		return -EMSGSIZE;
1871 
1872 	list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
1873 		struct nlattr *af;
1874 		int err;
1875 
1876 		if (!af_ops->fill_link_af)
1877 			continue;
1878 
1879 		af = nla_nest_start_noflag(skb, af_ops->family);
1880 		if (!af)
1881 			return -EMSGSIZE;
1882 
1883 		err = af_ops->fill_link_af(skb, dev, ext_filter_mask);
1884 		/*
1885 		 * Caller may return ENODATA to indicate that there
1886 		 * was no data to be dumped. This is not an error, it
1887 		 * means we should trim the attribute header and
1888 		 * continue.
1889 		 */
1890 		if (err == -ENODATA)
1891 			nla_nest_cancel(skb, af);
1892 		else if (err < 0)
1893 			return -EMSGSIZE;
1894 
1895 		nla_nest_end(skb, af);
1896 	}
1897 
1898 	nla_nest_end(skb, af_spec);
1899 	return 0;
1900 }
1901 
rtnl_fill_alt_ifnames(struct sk_buff * skb,const struct net_device * dev)1902 static int rtnl_fill_alt_ifnames(struct sk_buff *skb,
1903 				 const struct net_device *dev)
1904 {
1905 	struct netdev_name_node *name_node;
1906 	int count = 0;
1907 
1908 	list_for_each_entry_rcu(name_node, &dev->name_node->list, list) {
1909 		if (nla_put_string(skb, IFLA_ALT_IFNAME, name_node->name))
1910 			return -EMSGSIZE;
1911 		count++;
1912 	}
1913 	return count;
1914 }
1915 
1916 /* RCU protected. */
rtnl_fill_prop_list(struct sk_buff * skb,const struct net_device * dev)1917 static int rtnl_fill_prop_list(struct sk_buff *skb,
1918 			       const struct net_device *dev)
1919 {
1920 	struct nlattr *prop_list;
1921 	int ret;
1922 
1923 	prop_list = nla_nest_start(skb, IFLA_PROP_LIST);
1924 	if (!prop_list)
1925 		return -EMSGSIZE;
1926 
1927 	ret = rtnl_fill_alt_ifnames(skb, dev);
1928 	if (ret <= 0)
1929 		goto nest_cancel;
1930 
1931 	nla_nest_end(skb, prop_list);
1932 	return 0;
1933 
1934 nest_cancel:
1935 	nla_nest_cancel(skb, prop_list);
1936 	return ret;
1937 }
1938 
rtnl_fill_proto_down(struct sk_buff * skb,const struct net_device * dev)1939 static int rtnl_fill_proto_down(struct sk_buff *skb,
1940 				const struct net_device *dev)
1941 {
1942 	struct nlattr *pr;
1943 	u32 preason;
1944 
1945 	if (nla_put_u8(skb, IFLA_PROTO_DOWN, READ_ONCE(dev->proto_down)))
1946 		goto nla_put_failure;
1947 
1948 	preason = READ_ONCE(dev->proto_down_reason);
1949 	if (!preason)
1950 		return 0;
1951 
1952 	pr = nla_nest_start(skb, IFLA_PROTO_DOWN_REASON);
1953 	if (!pr)
1954 		return -EMSGSIZE;
1955 
1956 	if (nla_put_u32(skb, IFLA_PROTO_DOWN_REASON_VALUE, preason)) {
1957 		nla_nest_cancel(skb, pr);
1958 		goto nla_put_failure;
1959 	}
1960 
1961 	nla_nest_end(skb, pr);
1962 	return 0;
1963 
1964 nla_put_failure:
1965 	return -EMSGSIZE;
1966 }
1967 
rtnl_fill_devlink_port(struct sk_buff * skb,const struct net_device * dev)1968 static int rtnl_fill_devlink_port(struct sk_buff *skb,
1969 				  const struct net_device *dev)
1970 {
1971 	struct nlattr *devlink_port_nest;
1972 	int ret;
1973 
1974 	devlink_port_nest = nla_nest_start(skb, IFLA_DEVLINK_PORT);
1975 	if (!devlink_port_nest)
1976 		return -EMSGSIZE;
1977 
1978 	if (dev->devlink_port) {
1979 		ret = devlink_nl_port_handle_fill(skb, dev->devlink_port);
1980 		if (ret < 0)
1981 			goto nest_cancel;
1982 	}
1983 
1984 	nla_nest_end(skb, devlink_port_nest);
1985 	return 0;
1986 
1987 nest_cancel:
1988 	nla_nest_cancel(skb, devlink_port_nest);
1989 	return ret;
1990 }
1991 
rtnl_fill_dpll_pin(struct sk_buff * skb,const struct net_device * dev)1992 static int rtnl_fill_dpll_pin(struct sk_buff *skb,
1993 			      const struct net_device *dev)
1994 {
1995 	struct nlattr *dpll_pin_nest;
1996 	int ret;
1997 
1998 	dpll_pin_nest = nla_nest_start(skb, IFLA_DPLL_PIN);
1999 	if (!dpll_pin_nest)
2000 		return -EMSGSIZE;
2001 
2002 	ret = dpll_netdev_add_pin_handle(skb, dev);
2003 	if (ret < 0)
2004 		goto nest_cancel;
2005 
2006 	nla_nest_end(skb, dpll_pin_nest);
2007 	return 0;
2008 
2009 nest_cancel:
2010 	nla_nest_cancel(skb, dpll_pin_nest);
2011 	return ret;
2012 }
2013 
rtnl_fill_ifinfo(struct sk_buff * skb,struct net_device * dev,struct net * src_net,int type,u32 pid,u32 seq,u32 change,unsigned int flags,u32 ext_filter_mask,u32 event,int * new_nsid,int new_ifindex,int tgt_netnsid,gfp_t gfp)2014 static int rtnl_fill_ifinfo(struct sk_buff *skb,
2015 			    struct net_device *dev, struct net *src_net,
2016 			    int type, u32 pid, u32 seq, u32 change,
2017 			    unsigned int flags, u32 ext_filter_mask,
2018 			    u32 event, int *new_nsid, int new_ifindex,
2019 			    int tgt_netnsid, gfp_t gfp)
2020 {
2021 	char devname[IFNAMSIZ];
2022 	struct ifinfomsg *ifm;
2023 	struct nlmsghdr *nlh;
2024 	struct Qdisc *qdisc;
2025 
2026 	ASSERT_RTNL();
2027 	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
2028 	if (nlh == NULL)
2029 		return -EMSGSIZE;
2030 
2031 	ifm = nlmsg_data(nlh);
2032 	ifm->ifi_family = AF_UNSPEC;
2033 	ifm->__ifi_pad = 0;
2034 	ifm->ifi_type = READ_ONCE(dev->type);
2035 	ifm->ifi_index = READ_ONCE(dev->ifindex);
2036 	ifm->ifi_flags = dev_get_flags(dev);
2037 	ifm->ifi_change = change;
2038 
2039 	if (tgt_netnsid >= 0 && nla_put_s32(skb, IFLA_TARGET_NETNSID, tgt_netnsid))
2040 		goto nla_put_failure;
2041 
2042 	netdev_copy_name(dev, devname);
2043 	if (nla_put_string(skb, IFLA_IFNAME, devname))
2044 		goto nla_put_failure;
2045 
2046 	if (nla_put_u32(skb, IFLA_TXQLEN, READ_ONCE(dev->tx_queue_len)) ||
2047 	    nla_put_u8(skb, IFLA_OPERSTATE,
2048 		       netif_running(dev) ? READ_ONCE(dev->operstate) :
2049 					    IF_OPER_DOWN) ||
2050 	    nla_put_u8(skb, IFLA_LINKMODE, READ_ONCE(dev->link_mode)) ||
2051 	    nla_put_u8(skb, IFLA_NETNS_IMMUTABLE, dev->netns_immutable) ||
2052 	    nla_put_u32(skb, IFLA_MTU, READ_ONCE(dev->mtu)) ||
2053 	    nla_put_u32(skb, IFLA_MIN_MTU, READ_ONCE(dev->min_mtu)) ||
2054 	    nla_put_u32(skb, IFLA_MAX_MTU, READ_ONCE(dev->max_mtu)) ||
2055 	    nla_put_u32(skb, IFLA_GROUP, READ_ONCE(dev->group)) ||
2056 	    nla_put_u32(skb, IFLA_PROMISCUITY, READ_ONCE(dev->promiscuity)) ||
2057 	    nla_put_u32(skb, IFLA_ALLMULTI, READ_ONCE(dev->allmulti)) ||
2058 	    nla_put_u32(skb, IFLA_NUM_TX_QUEUES,
2059 			READ_ONCE(dev->num_tx_queues)) ||
2060 	    nla_put_u32(skb, IFLA_GSO_MAX_SEGS,
2061 			READ_ONCE(dev->gso_max_segs)) ||
2062 	    nla_put_u32(skb, IFLA_GSO_MAX_SIZE,
2063 			READ_ONCE(dev->gso_max_size)) ||
2064 	    nla_put_u32(skb, IFLA_GRO_MAX_SIZE,
2065 			READ_ONCE(dev->gro_max_size)) ||
2066 	    nla_put_u32(skb, IFLA_GSO_IPV4_MAX_SIZE,
2067 			READ_ONCE(dev->gso_ipv4_max_size)) ||
2068 	    nla_put_u32(skb, IFLA_GRO_IPV4_MAX_SIZE,
2069 			READ_ONCE(dev->gro_ipv4_max_size)) ||
2070 	    nla_put_u32(skb, IFLA_TSO_MAX_SIZE,
2071 			READ_ONCE(dev->tso_max_size)) ||
2072 	    nla_put_u32(skb, IFLA_TSO_MAX_SEGS,
2073 			READ_ONCE(dev->tso_max_segs)) ||
2074 	    nla_put_uint(skb, IFLA_MAX_PACING_OFFLOAD_HORIZON,
2075 			 READ_ONCE(dev->max_pacing_offload_horizon)) ||
2076 #ifdef CONFIG_RPS
2077 	    nla_put_u32(skb, IFLA_NUM_RX_QUEUES,
2078 			READ_ONCE(dev->num_rx_queues)) ||
2079 #endif
2080 	    put_master_ifindex(skb, dev) ||
2081 	    nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
2082 	    nla_put_ifalias(skb, dev) ||
2083 	    nla_put_u32(skb, IFLA_CARRIER_CHANGES,
2084 			atomic_read(&dev->carrier_up_count) +
2085 			atomic_read(&dev->carrier_down_count)) ||
2086 	    nla_put_u32(skb, IFLA_CARRIER_UP_COUNT,
2087 			atomic_read(&dev->carrier_up_count)) ||
2088 	    nla_put_u32(skb, IFLA_CARRIER_DOWN_COUNT,
2089 			atomic_read(&dev->carrier_down_count)))
2090 		goto nla_put_failure;
2091 
2092 	if (rtnl_fill_proto_down(skb, dev))
2093 		goto nla_put_failure;
2094 
2095 	if (event != IFLA_EVENT_NONE) {
2096 		if (nla_put_u32(skb, IFLA_EVENT, event))
2097 			goto nla_put_failure;
2098 	}
2099 
2100 	if (dev->addr_len) {
2101 		if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
2102 		    nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
2103 			goto nla_put_failure;
2104 	}
2105 
2106 	if (rtnl_phys_port_id_fill(skb, dev))
2107 		goto nla_put_failure;
2108 
2109 	if (rtnl_phys_port_name_fill(skb, dev))
2110 		goto nla_put_failure;
2111 
2112 	if (rtnl_phys_switch_id_fill(skb, dev))
2113 		goto nla_put_failure;
2114 
2115 	if (rtnl_fill_stats(skb, dev))
2116 		goto nla_put_failure;
2117 
2118 	if (rtnl_fill_vf(skb, dev, ext_filter_mask))
2119 		goto nla_put_failure;
2120 
2121 	if (rtnl_port_fill(skb, dev, ext_filter_mask))
2122 		goto nla_put_failure;
2123 
2124 	if (rtnl_xdp_fill(skb, dev))
2125 		goto nla_put_failure;
2126 
2127 	if (dev->rtnl_link_ops || rtnl_have_link_slave_info(dev)) {
2128 		if (rtnl_link_fill(skb, dev) < 0)
2129 			goto nla_put_failure;
2130 	}
2131 
2132 	if (new_nsid &&
2133 	    nla_put_s32(skb, IFLA_NEW_NETNSID, *new_nsid) < 0)
2134 		goto nla_put_failure;
2135 	if (new_ifindex &&
2136 	    nla_put_s32(skb, IFLA_NEW_IFINDEX, new_ifindex) < 0)
2137 		goto nla_put_failure;
2138 
2139 	if (memchr_inv(dev->perm_addr, '\0', dev->addr_len) &&
2140 	    nla_put(skb, IFLA_PERM_ADDRESS, dev->addr_len, dev->perm_addr))
2141 		goto nla_put_failure;
2142 
2143 	rcu_read_lock();
2144 	if (rtnl_fill_link_netnsid(skb, dev, src_net, GFP_ATOMIC))
2145 		goto nla_put_failure_rcu;
2146 	qdisc = rcu_dereference(dev->qdisc);
2147 	if (qdisc && nla_put_string(skb, IFLA_QDISC, qdisc->ops->id))
2148 		goto nla_put_failure_rcu;
2149 	if (rtnl_fill_link_af(skb, dev, ext_filter_mask))
2150 		goto nla_put_failure_rcu;
2151 	if (rtnl_fill_link_ifmap(skb, dev))
2152 		goto nla_put_failure_rcu;
2153 	if (rtnl_fill_prop_list(skb, dev))
2154 		goto nla_put_failure_rcu;
2155 	rcu_read_unlock();
2156 
2157 	if (dev->dev.parent &&
2158 	    nla_put_string(skb, IFLA_PARENT_DEV_NAME,
2159 			   dev_name(dev->dev.parent)))
2160 		goto nla_put_failure;
2161 
2162 	if (dev->dev.parent && dev->dev.parent->bus &&
2163 	    nla_put_string(skb, IFLA_PARENT_DEV_BUS_NAME,
2164 			   dev->dev.parent->bus->name))
2165 		goto nla_put_failure;
2166 
2167 	if (rtnl_fill_devlink_port(skb, dev))
2168 		goto nla_put_failure;
2169 
2170 	if (rtnl_fill_dpll_pin(skb, dev))
2171 		goto nla_put_failure;
2172 
2173 	nlmsg_end(skb, nlh);
2174 	return 0;
2175 
2176 nla_put_failure_rcu:
2177 	rcu_read_unlock();
2178 nla_put_failure:
2179 	nlmsg_cancel(skb, nlh);
2180 	return -EMSGSIZE;
2181 }
2182 
2183 static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
2184 	[IFLA_UNSPEC]		= { .strict_start_type = IFLA_DPLL_PIN },
2185 	[IFLA_IFNAME]		= { .type = NLA_STRING, .len = IFNAMSIZ-1 },
2186 	[IFLA_ADDRESS]		= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
2187 	[IFLA_BROADCAST]	= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
2188 	[IFLA_MAP]		= { .len = sizeof(struct rtnl_link_ifmap) },
2189 	[IFLA_MTU]		= { .type = NLA_U32 },
2190 	[IFLA_LINK]		= { .type = NLA_U32 },
2191 	[IFLA_MASTER]		= { .type = NLA_U32 },
2192 	[IFLA_CARRIER]		= { .type = NLA_U8 },
2193 	[IFLA_TXQLEN]		= { .type = NLA_U32 },
2194 	[IFLA_WEIGHT]		= { .type = NLA_U32 },
2195 	[IFLA_OPERSTATE]	= { .type = NLA_U8 },
2196 	[IFLA_LINKMODE]		= { .type = NLA_U8 },
2197 	[IFLA_LINKINFO]		= { .type = NLA_NESTED },
2198 	[IFLA_NET_NS_PID]	= { .type = NLA_U32 },
2199 	[IFLA_NET_NS_FD]	= { .type = NLA_U32 },
2200 	/* IFLA_IFALIAS is a string, but policy is set to NLA_BINARY to
2201 	 * allow 0-length string (needed to remove an alias).
2202 	 */
2203 	[IFLA_IFALIAS]	        = { .type = NLA_BINARY, .len = IFALIASZ - 1 },
2204 	[IFLA_VFINFO_LIST]	= {. type = NLA_NESTED },
2205 	[IFLA_VF_PORTS]		= { .type = NLA_NESTED },
2206 	[IFLA_PORT_SELF]	= { .type = NLA_NESTED },
2207 	[IFLA_AF_SPEC]		= { .type = NLA_NESTED },
2208 	[IFLA_EXT_MASK]		= { .type = NLA_U32 },
2209 	[IFLA_PROMISCUITY]	= { .type = NLA_U32 },
2210 	[IFLA_NUM_TX_QUEUES]	= { .type = NLA_U32 },
2211 	[IFLA_NUM_RX_QUEUES]	= { .type = NLA_U32 },
2212 	[IFLA_GSO_MAX_SEGS]	= { .type = NLA_U32 },
2213 	[IFLA_GSO_MAX_SIZE]	= NLA_POLICY_MIN(NLA_U32, MAX_TCP_HEADER + 1),
2214 	[IFLA_PHYS_PORT_ID]	= { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
2215 	[IFLA_CARRIER_CHANGES]	= { .type = NLA_U32 },  /* ignored */
2216 	[IFLA_PHYS_SWITCH_ID]	= { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
2217 	[IFLA_LINK_NETNSID]	= { .type = NLA_S32 },
2218 	[IFLA_PROTO_DOWN]	= { .type = NLA_U8 },
2219 	[IFLA_XDP]		= { .type = NLA_NESTED },
2220 	[IFLA_EVENT]		= { .type = NLA_U32 },
2221 	[IFLA_GROUP]		= { .type = NLA_U32 },
2222 	[IFLA_TARGET_NETNSID]	= { .type = NLA_S32 },
2223 	[IFLA_CARRIER_UP_COUNT]	= { .type = NLA_U32 },
2224 	[IFLA_CARRIER_DOWN_COUNT] = { .type = NLA_U32 },
2225 	[IFLA_MIN_MTU]		= { .type = NLA_U32 },
2226 	[IFLA_MAX_MTU]		= { .type = NLA_U32 },
2227 	[IFLA_PROP_LIST]	= { .type = NLA_NESTED },
2228 	[IFLA_ALT_IFNAME]	= { .type = NLA_STRING,
2229 				    .len = ALTIFNAMSIZ - 1 },
2230 	[IFLA_PERM_ADDRESS]	= { .type = NLA_REJECT },
2231 	[IFLA_PROTO_DOWN_REASON] = { .type = NLA_NESTED },
2232 	[IFLA_NEW_IFINDEX]	= NLA_POLICY_MIN(NLA_S32, 1),
2233 	[IFLA_PARENT_DEV_NAME]	= { .type = NLA_NUL_STRING },
2234 	[IFLA_GRO_MAX_SIZE]	= { .type = NLA_U32 },
2235 	[IFLA_TSO_MAX_SIZE]	= { .type = NLA_REJECT },
2236 	[IFLA_TSO_MAX_SEGS]	= { .type = NLA_REJECT },
2237 	[IFLA_ALLMULTI]		= { .type = NLA_REJECT },
2238 	[IFLA_GSO_IPV4_MAX_SIZE]	= NLA_POLICY_MIN(NLA_U32, MAX_TCP_HEADER + 1),
2239 	[IFLA_GRO_IPV4_MAX_SIZE]	= { .type = NLA_U32 },
2240 	[IFLA_NETNS_IMMUTABLE]	= { .type = NLA_REJECT },
2241 };
2242 
2243 static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
2244 	[IFLA_INFO_KIND]	= { .type = NLA_STRING },
2245 	[IFLA_INFO_DATA]	= { .type = NLA_NESTED },
2246 	[IFLA_INFO_SLAVE_KIND]	= { .type = NLA_STRING },
2247 	[IFLA_INFO_SLAVE_DATA]	= { .type = NLA_NESTED },
2248 };
2249 
2250 static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
2251 	[IFLA_VF_MAC]		= { .len = sizeof(struct ifla_vf_mac) },
2252 	[IFLA_VF_BROADCAST]	= { .type = NLA_REJECT },
2253 	[IFLA_VF_VLAN]		= { .len = sizeof(struct ifla_vf_vlan) },
2254 	[IFLA_VF_VLAN_LIST]     = { .type = NLA_NESTED },
2255 	[IFLA_VF_TX_RATE]	= { .len = sizeof(struct ifla_vf_tx_rate) },
2256 	[IFLA_VF_SPOOFCHK]	= { .len = sizeof(struct ifla_vf_spoofchk) },
2257 	[IFLA_VF_RATE]		= { .len = sizeof(struct ifla_vf_rate) },
2258 	[IFLA_VF_LINK_STATE]	= { .len = sizeof(struct ifla_vf_link_state) },
2259 	[IFLA_VF_RSS_QUERY_EN]	= { .len = sizeof(struct ifla_vf_rss_query_en) },
2260 	[IFLA_VF_STATS]		= { .type = NLA_NESTED },
2261 	[IFLA_VF_TRUST]		= { .len = sizeof(struct ifla_vf_trust) },
2262 	[IFLA_VF_IB_NODE_GUID]	= { .len = sizeof(struct ifla_vf_guid) },
2263 	[IFLA_VF_IB_PORT_GUID]	= { .len = sizeof(struct ifla_vf_guid) },
2264 };
2265 
2266 static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
2267 	[IFLA_PORT_VF]		= { .type = NLA_U32 },
2268 	[IFLA_PORT_PROFILE]	= { .type = NLA_STRING,
2269 				    .len = PORT_PROFILE_MAX },
2270 	[IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
2271 				      .len = PORT_UUID_MAX },
2272 	[IFLA_PORT_HOST_UUID]	= { .type = NLA_STRING,
2273 				    .len = PORT_UUID_MAX },
2274 	[IFLA_PORT_REQUEST]	= { .type = NLA_U8, },
2275 	[IFLA_PORT_RESPONSE]	= { .type = NLA_U16, },
2276 
2277 	/* Unused, but we need to keep it here since user space could
2278 	 * fill it. It's also broken with regard to NLA_BINARY use in
2279 	 * combination with structs.
2280 	 */
2281 	[IFLA_PORT_VSI_TYPE]	= { .type = NLA_BINARY,
2282 				    .len = sizeof(struct ifla_port_vsi) },
2283 };
2284 
2285 static const struct nla_policy ifla_xdp_policy[IFLA_XDP_MAX + 1] = {
2286 	[IFLA_XDP_UNSPEC]	= { .strict_start_type = IFLA_XDP_EXPECTED_FD },
2287 	[IFLA_XDP_FD]		= { .type = NLA_S32 },
2288 	[IFLA_XDP_EXPECTED_FD]	= { .type = NLA_S32 },
2289 	[IFLA_XDP_ATTACHED]	= { .type = NLA_U8 },
2290 	[IFLA_XDP_FLAGS]	= { .type = NLA_U32 },
2291 	[IFLA_XDP_PROG_ID]	= { .type = NLA_U32 },
2292 };
2293 
linkinfo_to_kind_ops(const struct nlattr * nla,int * ops_srcu_index)2294 static struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla,
2295 						  int *ops_srcu_index)
2296 {
2297 	struct nlattr *linfo[IFLA_INFO_MAX + 1];
2298 	struct rtnl_link_ops *ops = NULL;
2299 
2300 	if (nla_parse_nested_deprecated(linfo, IFLA_INFO_MAX, nla, ifla_info_policy, NULL) < 0)
2301 		return NULL;
2302 
2303 	if (linfo[IFLA_INFO_KIND]) {
2304 		char kind[MODULE_NAME_LEN];
2305 
2306 		nla_strscpy(kind, linfo[IFLA_INFO_KIND], sizeof(kind));
2307 		ops = rtnl_link_ops_get(kind, ops_srcu_index);
2308 	}
2309 
2310 	return ops;
2311 }
2312 
link_master_filtered(struct net_device * dev,int master_idx)2313 static bool link_master_filtered(struct net_device *dev, int master_idx)
2314 {
2315 	struct net_device *master;
2316 
2317 	if (!master_idx)
2318 		return false;
2319 
2320 	master = netdev_master_upper_dev_get(dev);
2321 
2322 	/* 0 is already used to denote IFLA_MASTER wasn't passed, therefore need
2323 	 * another invalid value for ifindex to denote "no master".
2324 	 */
2325 	if (master_idx == -1)
2326 		return !!master;
2327 
2328 	if (!master || master->ifindex != master_idx)
2329 		return true;
2330 
2331 	return false;
2332 }
2333 
link_kind_filtered(const struct net_device * dev,const struct rtnl_link_ops * kind_ops)2334 static bool link_kind_filtered(const struct net_device *dev,
2335 			       const struct rtnl_link_ops *kind_ops)
2336 {
2337 	if (kind_ops && dev->rtnl_link_ops != kind_ops)
2338 		return true;
2339 
2340 	return false;
2341 }
2342 
link_dump_filtered(struct net_device * dev,int master_idx,const struct rtnl_link_ops * kind_ops)2343 static bool link_dump_filtered(struct net_device *dev,
2344 			       int master_idx,
2345 			       const struct rtnl_link_ops *kind_ops)
2346 {
2347 	if (link_master_filtered(dev, master_idx) ||
2348 	    link_kind_filtered(dev, kind_ops))
2349 		return true;
2350 
2351 	return false;
2352 }
2353 
2354 /**
2355  * rtnl_get_net_ns_capable - Get netns if sufficiently privileged.
2356  * @sk: netlink socket
2357  * @netnsid: network namespace identifier
2358  *
2359  * Returns the network namespace identified by netnsid on success or an error
2360  * pointer on failure.
2361  */
rtnl_get_net_ns_capable(struct sock * sk,int netnsid)2362 struct net *rtnl_get_net_ns_capable(struct sock *sk, int netnsid)
2363 {
2364 	struct net *net;
2365 
2366 	net = get_net_ns_by_id(sock_net(sk), netnsid);
2367 	if (!net)
2368 		return ERR_PTR(-EINVAL);
2369 
2370 	/* For now, the caller is required to have CAP_NET_ADMIN in
2371 	 * the user namespace owning the target net ns.
2372 	 */
2373 	if (!sk_ns_capable(sk, net->user_ns, CAP_NET_ADMIN)) {
2374 		put_net(net);
2375 		return ERR_PTR(-EACCES);
2376 	}
2377 	return net;
2378 }
2379 EXPORT_SYMBOL_GPL(rtnl_get_net_ns_capable);
2380 
rtnl_valid_dump_ifinfo_req(const struct nlmsghdr * nlh,bool strict_check,struct nlattr ** tb,struct netlink_ext_ack * extack)2381 static int rtnl_valid_dump_ifinfo_req(const struct nlmsghdr *nlh,
2382 				      bool strict_check, struct nlattr **tb,
2383 				      struct netlink_ext_ack *extack)
2384 {
2385 	int hdrlen;
2386 
2387 	if (strict_check) {
2388 		struct ifinfomsg *ifm;
2389 
2390 		if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
2391 			NL_SET_ERR_MSG(extack, "Invalid header for link dump");
2392 			return -EINVAL;
2393 		}
2394 
2395 		ifm = nlmsg_data(nlh);
2396 		if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
2397 		    ifm->ifi_change) {
2398 			NL_SET_ERR_MSG(extack, "Invalid values in header for link dump request");
2399 			return -EINVAL;
2400 		}
2401 		if (ifm->ifi_index) {
2402 			NL_SET_ERR_MSG(extack, "Filter by device index not supported for link dumps");
2403 			return -EINVAL;
2404 		}
2405 
2406 		return nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb,
2407 						     IFLA_MAX, ifla_policy,
2408 						     extack);
2409 	}
2410 
2411 	/* A hack to preserve kernel<->userspace interface.
2412 	 * The correct header is ifinfomsg. It is consistent with rtnl_getlink.
2413 	 * However, before Linux v3.9 the code here assumed rtgenmsg and that's
2414 	 * what iproute2 < v3.9.0 used.
2415 	 * We can detect the old iproute2. Even including the IFLA_EXT_MASK
2416 	 * attribute, its netlink message is shorter than struct ifinfomsg.
2417 	 */
2418 	hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
2419 		 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
2420 
2421 	return nlmsg_parse_deprecated(nlh, hdrlen, tb, IFLA_MAX, ifla_policy,
2422 				      extack);
2423 }
2424 
rtnl_dump_ifinfo(struct sk_buff * skb,struct netlink_callback * cb)2425 static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
2426 {
2427 	struct netlink_ext_ack *extack = cb->extack;
2428 	struct rtnl_link_ops *kind_ops = NULL;
2429 	const struct nlmsghdr *nlh = cb->nlh;
2430 	struct net *net = sock_net(skb->sk);
2431 	unsigned int flags = NLM_F_MULTI;
2432 	struct nlattr *tb[IFLA_MAX+1];
2433 	struct {
2434 		unsigned long ifindex;
2435 	} *ctx = (void *)cb->ctx;
2436 	struct net *tgt_net = net;
2437 	u32 ext_filter_mask = 0;
2438 	struct net_device *dev;
2439 	int ops_srcu_index;
2440 	int master_idx = 0;
2441 	int netnsid = -1;
2442 	int err, i;
2443 
2444 	err = rtnl_valid_dump_ifinfo_req(nlh, cb->strict_check, tb, extack);
2445 	if (err < 0) {
2446 		if (cb->strict_check)
2447 			return err;
2448 
2449 		goto walk_entries;
2450 	}
2451 
2452 	for (i = 0; i <= IFLA_MAX; ++i) {
2453 		if (!tb[i])
2454 			continue;
2455 
2456 		/* new attributes should only be added with strict checking */
2457 		switch (i) {
2458 		case IFLA_TARGET_NETNSID:
2459 			netnsid = nla_get_s32(tb[i]);
2460 			tgt_net = rtnl_get_net_ns_capable(skb->sk, netnsid);
2461 			if (IS_ERR(tgt_net)) {
2462 				NL_SET_ERR_MSG(extack, "Invalid target network namespace id");
2463 				err = PTR_ERR(tgt_net);
2464 				netnsid = -1;
2465 				goto out;
2466 			}
2467 			break;
2468 		case IFLA_EXT_MASK:
2469 			ext_filter_mask = nla_get_u32(tb[i]);
2470 			break;
2471 		case IFLA_MASTER:
2472 			master_idx = nla_get_u32(tb[i]);
2473 			break;
2474 		case IFLA_LINKINFO:
2475 			kind_ops = linkinfo_to_kind_ops(tb[i], &ops_srcu_index);
2476 			break;
2477 		default:
2478 			if (cb->strict_check) {
2479 				NL_SET_ERR_MSG(extack, "Unsupported attribute in link dump request");
2480 				err = -EINVAL;
2481 				goto out;
2482 			}
2483 		}
2484 	}
2485 
2486 	if (master_idx || kind_ops)
2487 		flags |= NLM_F_DUMP_FILTERED;
2488 
2489 walk_entries:
2490 	err = 0;
2491 	for_each_netdev_dump(tgt_net, dev, ctx->ifindex) {
2492 		if (link_dump_filtered(dev, master_idx, kind_ops))
2493 			continue;
2494 		err = rtnl_fill_ifinfo(skb, dev, net, RTM_NEWLINK,
2495 				       NETLINK_CB(cb->skb).portid,
2496 				       nlh->nlmsg_seq, 0, flags,
2497 				       ext_filter_mask, 0, NULL, 0,
2498 				       netnsid, GFP_KERNEL);
2499 		if (err < 0)
2500 			break;
2501 	}
2502 
2503 
2504 	cb->seq = tgt_net->dev_base_seq;
2505 	nl_dump_check_consistent(cb, nlmsg_hdr(skb));
2506 
2507 out:
2508 
2509 	if (kind_ops)
2510 		rtnl_link_ops_put(kind_ops, ops_srcu_index);
2511 	if (netnsid >= 0)
2512 		put_net(tgt_net);
2513 
2514 	return err;
2515 }
2516 
rtnl_nla_parse_ifinfomsg(struct nlattr ** tb,const struct nlattr * nla_peer,struct netlink_ext_ack * exterr)2517 int rtnl_nla_parse_ifinfomsg(struct nlattr **tb, const struct nlattr *nla_peer,
2518 			     struct netlink_ext_ack *exterr)
2519 {
2520 	const struct ifinfomsg *ifmp;
2521 	const struct nlattr *attrs;
2522 	size_t len;
2523 
2524 	ifmp = nla_data(nla_peer);
2525 	attrs = nla_data(nla_peer) + sizeof(struct ifinfomsg);
2526 	len = nla_len(nla_peer) - sizeof(struct ifinfomsg);
2527 
2528 	if (ifmp->ifi_index < 0) {
2529 		NL_SET_ERR_MSG_ATTR(exterr, nla_peer,
2530 				    "ifindex can't be negative");
2531 		return -EINVAL;
2532 	}
2533 
2534 	return nla_parse_deprecated(tb, IFLA_MAX, attrs, len, ifla_policy,
2535 				    exterr);
2536 }
2537 EXPORT_SYMBOL(rtnl_nla_parse_ifinfomsg);
2538 
rtnl_link_get_net_ifla(struct nlattr * tb[])2539 static struct net *rtnl_link_get_net_ifla(struct nlattr *tb[])
2540 {
2541 	struct net *net = NULL;
2542 
2543 	/* Examine the link attributes and figure out which
2544 	 * network namespace we are talking about.
2545 	 */
2546 	if (tb[IFLA_NET_NS_PID])
2547 		net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
2548 	else if (tb[IFLA_NET_NS_FD])
2549 		net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
2550 
2551 	return net;
2552 }
2553 
rtnl_link_get_net(struct net * src_net,struct nlattr * tb[])2554 struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
2555 {
2556 	struct net *net = rtnl_link_get_net_ifla(tb);
2557 
2558 	if (!net)
2559 		net = get_net(src_net);
2560 
2561 	return net;
2562 }
2563 EXPORT_SYMBOL(rtnl_link_get_net);
2564 
2565 /* Figure out which network namespace we are talking about by
2566  * examining the link attributes in the following order:
2567  *
2568  * 1. IFLA_NET_NS_PID
2569  * 2. IFLA_NET_NS_FD
2570  * 3. IFLA_TARGET_NETNSID
2571  */
rtnl_link_get_net_by_nlattr(struct net * src_net,struct nlattr * tb[])2572 static struct net *rtnl_link_get_net_by_nlattr(struct net *src_net,
2573 					       struct nlattr *tb[])
2574 {
2575 	struct net *net;
2576 
2577 	if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD])
2578 		return rtnl_link_get_net(src_net, tb);
2579 
2580 	if (!tb[IFLA_TARGET_NETNSID])
2581 		return get_net(src_net);
2582 
2583 	net = get_net_ns_by_id(src_net, nla_get_u32(tb[IFLA_TARGET_NETNSID]));
2584 	if (!net)
2585 		return ERR_PTR(-EINVAL);
2586 
2587 	return net;
2588 }
2589 
rtnl_link_get_net_capable(const struct sk_buff * skb,struct net * src_net,struct nlattr * tb[],int cap)2590 static struct net *rtnl_link_get_net_capable(const struct sk_buff *skb,
2591 					     struct net *src_net,
2592 					     struct nlattr *tb[], int cap)
2593 {
2594 	struct net *net;
2595 
2596 	net = rtnl_link_get_net_by_nlattr(src_net, tb);
2597 	if (IS_ERR(net))
2598 		return net;
2599 
2600 	if (!netlink_ns_capable(skb, net->user_ns, cap)) {
2601 		put_net(net);
2602 		return ERR_PTR(-EPERM);
2603 	}
2604 
2605 	return net;
2606 }
2607 
2608 /* Verify that rtnetlink requests do not pass additional properties
2609  * potentially referring to different network namespaces.
2610  */
rtnl_ensure_unique_netns(struct nlattr * tb[],struct netlink_ext_ack * extack,bool netns_id_only)2611 static int rtnl_ensure_unique_netns(struct nlattr *tb[],
2612 				    struct netlink_ext_ack *extack,
2613 				    bool netns_id_only)
2614 {
2615 
2616 	if (netns_id_only) {
2617 		if (!tb[IFLA_NET_NS_PID] && !tb[IFLA_NET_NS_FD])
2618 			return 0;
2619 
2620 		NL_SET_ERR_MSG(extack, "specified netns attribute not supported");
2621 		return -EOPNOTSUPP;
2622 	}
2623 
2624 	if (tb[IFLA_TARGET_NETNSID] && (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]))
2625 		goto invalid_attr;
2626 
2627 	if (tb[IFLA_NET_NS_PID] && (tb[IFLA_TARGET_NETNSID] || tb[IFLA_NET_NS_FD]))
2628 		goto invalid_attr;
2629 
2630 	if (tb[IFLA_NET_NS_FD] && (tb[IFLA_TARGET_NETNSID] || tb[IFLA_NET_NS_PID]))
2631 		goto invalid_attr;
2632 
2633 	return 0;
2634 
2635 invalid_attr:
2636 	NL_SET_ERR_MSG(extack, "multiple netns identifying attributes specified");
2637 	return -EINVAL;
2638 }
2639 
rtnl_set_vf_rate(struct net_device * dev,int vf,int min_tx_rate,int max_tx_rate)2640 static	int rtnl_set_vf_rate(struct net_device *dev, int vf, int min_tx_rate,
2641 			     int max_tx_rate)
2642 {
2643 	const struct net_device_ops *ops = dev->netdev_ops;
2644 
2645 	if (!ops->ndo_set_vf_rate)
2646 		return -EOPNOTSUPP;
2647 	if (max_tx_rate && max_tx_rate < min_tx_rate)
2648 		return -EINVAL;
2649 
2650 	return ops->ndo_set_vf_rate(dev, vf, min_tx_rate, max_tx_rate);
2651 }
2652 
validate_linkmsg(struct net_device * dev,struct nlattr * tb[],struct netlink_ext_ack * extack)2653 static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[],
2654 			    struct netlink_ext_ack *extack)
2655 {
2656 	if (tb[IFLA_ADDRESS] &&
2657 	    nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
2658 		return -EINVAL;
2659 
2660 	if (tb[IFLA_BROADCAST] &&
2661 	    nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
2662 		return -EINVAL;
2663 
2664 	if (tb[IFLA_GSO_MAX_SIZE] &&
2665 	    nla_get_u32(tb[IFLA_GSO_MAX_SIZE]) > dev->tso_max_size) {
2666 		NL_SET_ERR_MSG(extack, "too big gso_max_size");
2667 		return -EINVAL;
2668 	}
2669 
2670 	if (tb[IFLA_GSO_MAX_SEGS] &&
2671 	    (nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > GSO_MAX_SEGS ||
2672 	     nla_get_u32(tb[IFLA_GSO_MAX_SEGS]) > dev->tso_max_segs)) {
2673 		NL_SET_ERR_MSG(extack, "too big gso_max_segs");
2674 		return -EINVAL;
2675 	}
2676 
2677 	if (tb[IFLA_GRO_MAX_SIZE] &&
2678 	    nla_get_u32(tb[IFLA_GRO_MAX_SIZE]) > GRO_MAX_SIZE) {
2679 		NL_SET_ERR_MSG(extack, "too big gro_max_size");
2680 		return -EINVAL;
2681 	}
2682 
2683 	if (tb[IFLA_GSO_IPV4_MAX_SIZE] &&
2684 	    nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]) > dev->tso_max_size) {
2685 		NL_SET_ERR_MSG(extack, "too big gso_ipv4_max_size");
2686 		return -EINVAL;
2687 	}
2688 
2689 	if (tb[IFLA_GRO_IPV4_MAX_SIZE] &&
2690 	    nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]) > GRO_MAX_SIZE) {
2691 		NL_SET_ERR_MSG(extack, "too big gro_ipv4_max_size");
2692 		return -EINVAL;
2693 	}
2694 
2695 	if (tb[IFLA_AF_SPEC]) {
2696 		struct nlattr *af;
2697 		int rem, err;
2698 
2699 		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
2700 			struct rtnl_af_ops *af_ops;
2701 			int af_ops_srcu_index;
2702 
2703 			af_ops = rtnl_af_lookup(nla_type(af), &af_ops_srcu_index);
2704 			if (!af_ops)
2705 				return -EAFNOSUPPORT;
2706 
2707 			if (!af_ops->set_link_af)
2708 				err = -EOPNOTSUPP;
2709 			else if (af_ops->validate_link_af)
2710 				err = af_ops->validate_link_af(dev, af, extack);
2711 			else
2712 				err = 0;
2713 
2714 			rtnl_af_put(af_ops, af_ops_srcu_index);
2715 
2716 			if (err < 0)
2717 				return err;
2718 		}
2719 	}
2720 
2721 	return 0;
2722 }
2723 
handle_infiniband_guid(struct net_device * dev,struct ifla_vf_guid * ivt,int guid_type)2724 static int handle_infiniband_guid(struct net_device *dev, struct ifla_vf_guid *ivt,
2725 				  int guid_type)
2726 {
2727 	const struct net_device_ops *ops = dev->netdev_ops;
2728 
2729 	return ops->ndo_set_vf_guid(dev, ivt->vf, ivt->guid, guid_type);
2730 }
2731 
handle_vf_guid(struct net_device * dev,struct ifla_vf_guid * ivt,int guid_type)2732 static int handle_vf_guid(struct net_device *dev, struct ifla_vf_guid *ivt, int guid_type)
2733 {
2734 	if (dev->type != ARPHRD_INFINIBAND)
2735 		return -EOPNOTSUPP;
2736 
2737 	return handle_infiniband_guid(dev, ivt, guid_type);
2738 }
2739 
do_setvfinfo(struct net_device * dev,struct nlattr ** tb)2740 static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
2741 {
2742 	const struct net_device_ops *ops = dev->netdev_ops;
2743 	int err = -EINVAL;
2744 
2745 	if (tb[IFLA_VF_MAC]) {
2746 		struct ifla_vf_mac *ivm = nla_data(tb[IFLA_VF_MAC]);
2747 
2748 		if (ivm->vf >= INT_MAX)
2749 			return -EINVAL;
2750 		err = -EOPNOTSUPP;
2751 		if (ops->ndo_set_vf_mac)
2752 			err = ops->ndo_set_vf_mac(dev, ivm->vf,
2753 						  ivm->mac);
2754 		if (err < 0)
2755 			return err;
2756 	}
2757 
2758 	if (tb[IFLA_VF_VLAN]) {
2759 		struct ifla_vf_vlan *ivv = nla_data(tb[IFLA_VF_VLAN]);
2760 
2761 		if (ivv->vf >= INT_MAX)
2762 			return -EINVAL;
2763 		err = -EOPNOTSUPP;
2764 		if (ops->ndo_set_vf_vlan)
2765 			err = ops->ndo_set_vf_vlan(dev, ivv->vf, ivv->vlan,
2766 						   ivv->qos,
2767 						   htons(ETH_P_8021Q));
2768 		if (err < 0)
2769 			return err;
2770 	}
2771 
2772 	if (tb[IFLA_VF_VLAN_LIST]) {
2773 		struct ifla_vf_vlan_info *ivvl[MAX_VLAN_LIST_LEN];
2774 		struct nlattr *attr;
2775 		int rem, len = 0;
2776 
2777 		err = -EOPNOTSUPP;
2778 		if (!ops->ndo_set_vf_vlan)
2779 			return err;
2780 
2781 		nla_for_each_nested(attr, tb[IFLA_VF_VLAN_LIST], rem) {
2782 			if (nla_type(attr) != IFLA_VF_VLAN_INFO ||
2783 			    nla_len(attr) < sizeof(struct ifla_vf_vlan_info)) {
2784 				return -EINVAL;
2785 			}
2786 			if (len >= MAX_VLAN_LIST_LEN)
2787 				return -EOPNOTSUPP;
2788 			ivvl[len] = nla_data(attr);
2789 
2790 			len++;
2791 		}
2792 		if (len == 0)
2793 			return -EINVAL;
2794 
2795 		if (ivvl[0]->vf >= INT_MAX)
2796 			return -EINVAL;
2797 		err = ops->ndo_set_vf_vlan(dev, ivvl[0]->vf, ivvl[0]->vlan,
2798 					   ivvl[0]->qos, ivvl[0]->vlan_proto);
2799 		if (err < 0)
2800 			return err;
2801 	}
2802 
2803 	if (tb[IFLA_VF_TX_RATE]) {
2804 		struct ifla_vf_tx_rate *ivt = nla_data(tb[IFLA_VF_TX_RATE]);
2805 		struct ifla_vf_info ivf;
2806 
2807 		if (ivt->vf >= INT_MAX)
2808 			return -EINVAL;
2809 		err = -EOPNOTSUPP;
2810 		if (ops->ndo_get_vf_config)
2811 			err = ops->ndo_get_vf_config(dev, ivt->vf, &ivf);
2812 		if (err < 0)
2813 			return err;
2814 
2815 		err = rtnl_set_vf_rate(dev, ivt->vf,
2816 				       ivf.min_tx_rate, ivt->rate);
2817 		if (err < 0)
2818 			return err;
2819 	}
2820 
2821 	if (tb[IFLA_VF_RATE]) {
2822 		struct ifla_vf_rate *ivt = nla_data(tb[IFLA_VF_RATE]);
2823 
2824 		if (ivt->vf >= INT_MAX)
2825 			return -EINVAL;
2826 
2827 		err = rtnl_set_vf_rate(dev, ivt->vf,
2828 				       ivt->min_tx_rate, ivt->max_tx_rate);
2829 		if (err < 0)
2830 			return err;
2831 	}
2832 
2833 	if (tb[IFLA_VF_SPOOFCHK]) {
2834 		struct ifla_vf_spoofchk *ivs = nla_data(tb[IFLA_VF_SPOOFCHK]);
2835 
2836 		if (ivs->vf >= INT_MAX)
2837 			return -EINVAL;
2838 		err = -EOPNOTSUPP;
2839 		if (ops->ndo_set_vf_spoofchk)
2840 			err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
2841 						       ivs->setting);
2842 		if (err < 0)
2843 			return err;
2844 	}
2845 
2846 	if (tb[IFLA_VF_LINK_STATE]) {
2847 		struct ifla_vf_link_state *ivl = nla_data(tb[IFLA_VF_LINK_STATE]);
2848 
2849 		if (ivl->vf >= INT_MAX)
2850 			return -EINVAL;
2851 		err = -EOPNOTSUPP;
2852 		if (ops->ndo_set_vf_link_state)
2853 			err = ops->ndo_set_vf_link_state(dev, ivl->vf,
2854 							 ivl->link_state);
2855 		if (err < 0)
2856 			return err;
2857 	}
2858 
2859 	if (tb[IFLA_VF_RSS_QUERY_EN]) {
2860 		struct ifla_vf_rss_query_en *ivrssq_en;
2861 
2862 		err = -EOPNOTSUPP;
2863 		ivrssq_en = nla_data(tb[IFLA_VF_RSS_QUERY_EN]);
2864 		if (ivrssq_en->vf >= INT_MAX)
2865 			return -EINVAL;
2866 		if (ops->ndo_set_vf_rss_query_en)
2867 			err = ops->ndo_set_vf_rss_query_en(dev, ivrssq_en->vf,
2868 							   ivrssq_en->setting);
2869 		if (err < 0)
2870 			return err;
2871 	}
2872 
2873 	if (tb[IFLA_VF_TRUST]) {
2874 		struct ifla_vf_trust *ivt = nla_data(tb[IFLA_VF_TRUST]);
2875 
2876 		if (ivt->vf >= INT_MAX)
2877 			return -EINVAL;
2878 		err = -EOPNOTSUPP;
2879 		if (ops->ndo_set_vf_trust)
2880 			err = ops->ndo_set_vf_trust(dev, ivt->vf, ivt->setting);
2881 		if (err < 0)
2882 			return err;
2883 	}
2884 
2885 	if (tb[IFLA_VF_IB_NODE_GUID]) {
2886 		struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_NODE_GUID]);
2887 
2888 		if (ivt->vf >= INT_MAX)
2889 			return -EINVAL;
2890 		if (!ops->ndo_set_vf_guid)
2891 			return -EOPNOTSUPP;
2892 		return handle_vf_guid(dev, ivt, IFLA_VF_IB_NODE_GUID);
2893 	}
2894 
2895 	if (tb[IFLA_VF_IB_PORT_GUID]) {
2896 		struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_PORT_GUID]);
2897 
2898 		if (ivt->vf >= INT_MAX)
2899 			return -EINVAL;
2900 		if (!ops->ndo_set_vf_guid)
2901 			return -EOPNOTSUPP;
2902 
2903 		return handle_vf_guid(dev, ivt, IFLA_VF_IB_PORT_GUID);
2904 	}
2905 
2906 	return err;
2907 }
2908 
do_set_master(struct net_device * dev,int ifindex,struct netlink_ext_ack * extack)2909 static int do_set_master(struct net_device *dev, int ifindex,
2910 			 struct netlink_ext_ack *extack)
2911 {
2912 	struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
2913 	const struct net_device_ops *ops;
2914 	int err;
2915 
2916 	/* Release the lower lock, the upper is responsible for locking
2917 	 * the lower if needed. None of the existing upper devices
2918 	 * use netdev instance lock, so don't grab it.
2919 	 */
2920 
2921 	if (upper_dev) {
2922 		if (upper_dev->ifindex == ifindex)
2923 			return 0;
2924 		ops = upper_dev->netdev_ops;
2925 		if (ops->ndo_del_slave) {
2926 			netdev_unlock_ops(dev);
2927 			err = ops->ndo_del_slave(upper_dev, dev);
2928 			netdev_lock_ops(dev);
2929 			if (err)
2930 				return err;
2931 		} else {
2932 			return -EOPNOTSUPP;
2933 		}
2934 	}
2935 
2936 	if (ifindex) {
2937 		upper_dev = __dev_get_by_index(dev_net(dev), ifindex);
2938 		if (!upper_dev)
2939 			return -EINVAL;
2940 		ops = upper_dev->netdev_ops;
2941 		if (ops->ndo_add_slave) {
2942 			netdev_unlock_ops(dev);
2943 			err = ops->ndo_add_slave(upper_dev, dev, extack);
2944 			netdev_lock_ops(dev);
2945 			if (err)
2946 				return err;
2947 		} else {
2948 			return -EOPNOTSUPP;
2949 		}
2950 	}
2951 	return 0;
2952 }
2953 
2954 static const struct nla_policy ifla_proto_down_reason_policy[IFLA_PROTO_DOWN_REASON_VALUE + 1] = {
2955 	[IFLA_PROTO_DOWN_REASON_MASK]	= { .type = NLA_U32 },
2956 	[IFLA_PROTO_DOWN_REASON_VALUE]	= { .type = NLA_U32 },
2957 };
2958 
do_set_proto_down(struct net_device * dev,struct nlattr * nl_proto_down,struct nlattr * nl_proto_down_reason,struct netlink_ext_ack * extack)2959 static int do_set_proto_down(struct net_device *dev,
2960 			     struct nlattr *nl_proto_down,
2961 			     struct nlattr *nl_proto_down_reason,
2962 			     struct netlink_ext_ack *extack)
2963 {
2964 	struct nlattr *pdreason[IFLA_PROTO_DOWN_REASON_MAX + 1];
2965 	unsigned long mask = 0;
2966 	u32 value;
2967 	bool proto_down;
2968 	int err;
2969 
2970 	if (!dev->change_proto_down) {
2971 		NL_SET_ERR_MSG(extack,  "Protodown not supported by device");
2972 		return -EOPNOTSUPP;
2973 	}
2974 
2975 	if (nl_proto_down_reason) {
2976 		err = nla_parse_nested_deprecated(pdreason,
2977 						  IFLA_PROTO_DOWN_REASON_MAX,
2978 						  nl_proto_down_reason,
2979 						  ifla_proto_down_reason_policy,
2980 						  NULL);
2981 		if (err < 0)
2982 			return err;
2983 
2984 		if (!pdreason[IFLA_PROTO_DOWN_REASON_VALUE]) {
2985 			NL_SET_ERR_MSG(extack, "Invalid protodown reason value");
2986 			return -EINVAL;
2987 		}
2988 
2989 		value = nla_get_u32(pdreason[IFLA_PROTO_DOWN_REASON_VALUE]);
2990 
2991 		if (pdreason[IFLA_PROTO_DOWN_REASON_MASK])
2992 			mask = nla_get_u32(pdreason[IFLA_PROTO_DOWN_REASON_MASK]);
2993 
2994 		netdev_change_proto_down_reason_locked(dev, mask, value);
2995 	}
2996 
2997 	if (nl_proto_down) {
2998 		proto_down = nla_get_u8(nl_proto_down);
2999 
3000 		/* Don't turn off protodown if there are active reasons */
3001 		if (!proto_down && dev->proto_down_reason) {
3002 			NL_SET_ERR_MSG(extack, "Cannot clear protodown, active reasons");
3003 			return -EBUSY;
3004 		}
3005 		err = netif_change_proto_down(dev, proto_down);
3006 		if (err)
3007 			return err;
3008 	}
3009 
3010 	return 0;
3011 }
3012 
3013 #define DO_SETLINK_MODIFIED	0x01
3014 /* notify flag means notify + modified. */
3015 #define DO_SETLINK_NOTIFY	0x03
do_setlink(const struct sk_buff * skb,struct net_device * dev,struct net * tgt_net,struct ifinfomsg * ifm,struct netlink_ext_ack * extack,struct nlattr ** tb,int status)3016 static int do_setlink(const struct sk_buff *skb, struct net_device *dev,
3017 		      struct net *tgt_net, struct ifinfomsg *ifm,
3018 		      struct netlink_ext_ack *extack,
3019 		      struct nlattr **tb, int status)
3020 {
3021 	const struct net_device_ops *ops = dev->netdev_ops;
3022 	char ifname[IFNAMSIZ];
3023 	int err;
3024 
3025 	netdev_lock_ops(dev);
3026 
3027 	err = validate_linkmsg(dev, tb, extack);
3028 	if (err < 0)
3029 		goto errout;
3030 
3031 	if (tb[IFLA_IFNAME])
3032 		nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
3033 	else
3034 		ifname[0] = '\0';
3035 
3036 	if (!net_eq(tgt_net, dev_net(dev))) {
3037 		const char *pat = ifname[0] ? ifname : NULL;
3038 		int new_ifindex;
3039 
3040 		new_ifindex = nla_get_s32_default(tb[IFLA_NEW_IFINDEX], 0);
3041 
3042 		err = netif_change_net_namespace(dev, tgt_net, pat,
3043 						 new_ifindex, extack);
3044 		if (err)
3045 			goto errout;
3046 
3047 		status |= DO_SETLINK_MODIFIED;
3048 	}
3049 
3050 	if (tb[IFLA_MAP]) {
3051 		struct rtnl_link_ifmap *u_map;
3052 		struct ifmap k_map;
3053 
3054 		if (!ops->ndo_set_config) {
3055 			err = -EOPNOTSUPP;
3056 			goto errout;
3057 		}
3058 
3059 		if (!netif_device_present(dev)) {
3060 			err = -ENODEV;
3061 			goto errout;
3062 		}
3063 
3064 		u_map = nla_data(tb[IFLA_MAP]);
3065 		k_map.mem_start = (unsigned long) u_map->mem_start;
3066 		k_map.mem_end = (unsigned long) u_map->mem_end;
3067 		k_map.base_addr = (unsigned short) u_map->base_addr;
3068 		k_map.irq = (unsigned char) u_map->irq;
3069 		k_map.dma = (unsigned char) u_map->dma;
3070 		k_map.port = (unsigned char) u_map->port;
3071 
3072 		err = ops->ndo_set_config(dev, &k_map);
3073 		if (err < 0)
3074 			goto errout;
3075 
3076 		status |= DO_SETLINK_NOTIFY;
3077 	}
3078 
3079 	if (tb[IFLA_ADDRESS]) {
3080 		struct sockaddr *sa;
3081 		int len;
3082 
3083 		len = sizeof(sa_family_t) + max_t(size_t, dev->addr_len,
3084 						  sizeof(*sa));
3085 		sa = kmalloc(len, GFP_KERNEL);
3086 		if (!sa) {
3087 			err = -ENOMEM;
3088 			goto errout;
3089 		}
3090 		sa->sa_family = dev->type;
3091 
3092 		netdev_unlock_ops(dev);
3093 
3094 		/* dev_addr_sem is an outer lock, enforce proper ordering */
3095 		down_write(&dev_addr_sem);
3096 		netdev_lock_ops(dev);
3097 
3098 		memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
3099 		       dev->addr_len);
3100 		err = netif_set_mac_address(dev, sa, extack);
3101 		kfree(sa);
3102 		if (err) {
3103 			up_write(&dev_addr_sem);
3104 			goto errout;
3105 		}
3106 		status |= DO_SETLINK_MODIFIED;
3107 
3108 		up_write(&dev_addr_sem);
3109 	}
3110 
3111 	if (tb[IFLA_MTU]) {
3112 		err = netif_set_mtu_ext(dev, nla_get_u32(tb[IFLA_MTU]), extack);
3113 		if (err < 0)
3114 			goto errout;
3115 		status |= DO_SETLINK_MODIFIED;
3116 	}
3117 
3118 	if (tb[IFLA_GROUP]) {
3119 		netif_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
3120 		status |= DO_SETLINK_NOTIFY;
3121 	}
3122 
3123 	/*
3124 	 * Interface selected by interface index but interface
3125 	 * name provided implies that a name change has been
3126 	 * requested.
3127 	 */
3128 	if (ifm->ifi_index > 0 && ifname[0]) {
3129 		err = netif_change_name(dev, ifname);
3130 		if (err < 0)
3131 			goto errout;
3132 		status |= DO_SETLINK_MODIFIED;
3133 	}
3134 
3135 	if (tb[IFLA_IFALIAS]) {
3136 		err = netif_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
3137 				      nla_len(tb[IFLA_IFALIAS]));
3138 		if (err < 0)
3139 			goto errout;
3140 		status |= DO_SETLINK_NOTIFY;
3141 	}
3142 
3143 	if (tb[IFLA_BROADCAST]) {
3144 		nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
3145 		call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
3146 	}
3147 
3148 	if (ifm->ifi_flags || ifm->ifi_change) {
3149 		err = netif_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
3150 					 extack);
3151 		if (err < 0)
3152 			goto errout;
3153 	}
3154 
3155 	if (tb[IFLA_MASTER]) {
3156 		err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
3157 		if (err)
3158 			goto errout;
3159 		status |= DO_SETLINK_MODIFIED;
3160 	}
3161 
3162 	if (tb[IFLA_CARRIER]) {
3163 		err = netif_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
3164 		if (err)
3165 			goto errout;
3166 		status |= DO_SETLINK_MODIFIED;
3167 	}
3168 
3169 	if (tb[IFLA_TXQLEN]) {
3170 		unsigned int value = nla_get_u32(tb[IFLA_TXQLEN]);
3171 
3172 		err = netif_change_tx_queue_len(dev, value);
3173 		if (err)
3174 			goto errout;
3175 		status |= DO_SETLINK_MODIFIED;
3176 	}
3177 
3178 	if (tb[IFLA_GSO_MAX_SIZE]) {
3179 		u32 max_size = nla_get_u32(tb[IFLA_GSO_MAX_SIZE]);
3180 
3181 		if (dev->gso_max_size ^ max_size) {
3182 			netif_set_gso_max_size(dev, max_size);
3183 			status |= DO_SETLINK_MODIFIED;
3184 		}
3185 	}
3186 
3187 	if (tb[IFLA_GSO_MAX_SEGS]) {
3188 		u32 max_segs = nla_get_u32(tb[IFLA_GSO_MAX_SEGS]);
3189 
3190 		if (dev->gso_max_segs ^ max_segs) {
3191 			netif_set_gso_max_segs(dev, max_segs);
3192 			status |= DO_SETLINK_MODIFIED;
3193 		}
3194 	}
3195 
3196 	if (tb[IFLA_GRO_MAX_SIZE]) {
3197 		u32 gro_max_size = nla_get_u32(tb[IFLA_GRO_MAX_SIZE]);
3198 
3199 		if (dev->gro_max_size ^ gro_max_size) {
3200 			netif_set_gro_max_size(dev, gro_max_size);
3201 			status |= DO_SETLINK_MODIFIED;
3202 		}
3203 	}
3204 
3205 	if (tb[IFLA_GSO_IPV4_MAX_SIZE]) {
3206 		u32 max_size = nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]);
3207 
3208 		if (dev->gso_ipv4_max_size ^ max_size) {
3209 			netif_set_gso_ipv4_max_size(dev, max_size);
3210 			status |= DO_SETLINK_MODIFIED;
3211 		}
3212 	}
3213 
3214 	if (tb[IFLA_GRO_IPV4_MAX_SIZE]) {
3215 		u32 gro_max_size = nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]);
3216 
3217 		if (dev->gro_ipv4_max_size ^ gro_max_size) {
3218 			netif_set_gro_ipv4_max_size(dev, gro_max_size);
3219 			status |= DO_SETLINK_MODIFIED;
3220 		}
3221 	}
3222 
3223 	if (tb[IFLA_OPERSTATE])
3224 		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
3225 
3226 	if (tb[IFLA_LINKMODE]) {
3227 		unsigned char value = nla_get_u8(tb[IFLA_LINKMODE]);
3228 
3229 		if (dev->link_mode ^ value)
3230 			status |= DO_SETLINK_NOTIFY;
3231 		WRITE_ONCE(dev->link_mode, value);
3232 	}
3233 
3234 	if (tb[IFLA_VFINFO_LIST]) {
3235 		struct nlattr *vfinfo[IFLA_VF_MAX + 1];
3236 		struct nlattr *attr;
3237 		int rem;
3238 
3239 		nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
3240 			if (nla_type(attr) != IFLA_VF_INFO ||
3241 			    nla_len(attr) < NLA_HDRLEN) {
3242 				err = -EINVAL;
3243 				goto errout;
3244 			}
3245 			err = nla_parse_nested_deprecated(vfinfo, IFLA_VF_MAX,
3246 							  attr,
3247 							  ifla_vf_policy,
3248 							  NULL);
3249 			if (err < 0)
3250 				goto errout;
3251 			err = do_setvfinfo(dev, vfinfo);
3252 			if (err < 0)
3253 				goto errout;
3254 			status |= DO_SETLINK_NOTIFY;
3255 		}
3256 	}
3257 	err = 0;
3258 
3259 	if (tb[IFLA_VF_PORTS]) {
3260 		struct nlattr *port[IFLA_PORT_MAX+1];
3261 		struct nlattr *attr;
3262 		int vf;
3263 		int rem;
3264 
3265 		err = -EOPNOTSUPP;
3266 		if (!ops->ndo_set_vf_port)
3267 			goto errout;
3268 
3269 		nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
3270 			if (nla_type(attr) != IFLA_VF_PORT ||
3271 			    nla_len(attr) < NLA_HDRLEN) {
3272 				err = -EINVAL;
3273 				goto errout;
3274 			}
3275 			err = nla_parse_nested_deprecated(port, IFLA_PORT_MAX,
3276 							  attr,
3277 							  ifla_port_policy,
3278 							  NULL);
3279 			if (err < 0)
3280 				goto errout;
3281 			if (!port[IFLA_PORT_VF]) {
3282 				err = -EOPNOTSUPP;
3283 				goto errout;
3284 			}
3285 			vf = nla_get_u32(port[IFLA_PORT_VF]);
3286 			err = ops->ndo_set_vf_port(dev, vf, port);
3287 			if (err < 0)
3288 				goto errout;
3289 			status |= DO_SETLINK_NOTIFY;
3290 		}
3291 	}
3292 	err = 0;
3293 
3294 	if (tb[IFLA_PORT_SELF]) {
3295 		struct nlattr *port[IFLA_PORT_MAX+1];
3296 
3297 		err = nla_parse_nested_deprecated(port, IFLA_PORT_MAX,
3298 						  tb[IFLA_PORT_SELF],
3299 						  ifla_port_policy, NULL);
3300 		if (err < 0)
3301 			goto errout;
3302 
3303 		err = -EOPNOTSUPP;
3304 		if (ops->ndo_set_vf_port)
3305 			err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
3306 		if (err < 0)
3307 			goto errout;
3308 		status |= DO_SETLINK_NOTIFY;
3309 	}
3310 
3311 	if (tb[IFLA_AF_SPEC]) {
3312 		struct nlattr *af;
3313 		int rem;
3314 
3315 		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
3316 			struct rtnl_af_ops *af_ops;
3317 			int af_ops_srcu_index;
3318 
3319 			af_ops = rtnl_af_lookup(nla_type(af), &af_ops_srcu_index);
3320 			if (!af_ops) {
3321 				err = -EAFNOSUPPORT;
3322 				goto errout;
3323 			}
3324 
3325 			err = af_ops->set_link_af(dev, af, extack);
3326 			rtnl_af_put(af_ops, af_ops_srcu_index);
3327 
3328 			if (err < 0)
3329 				goto errout;
3330 
3331 			status |= DO_SETLINK_NOTIFY;
3332 		}
3333 	}
3334 	err = 0;
3335 
3336 	if (tb[IFLA_PROTO_DOWN] || tb[IFLA_PROTO_DOWN_REASON]) {
3337 		err = do_set_proto_down(dev, tb[IFLA_PROTO_DOWN],
3338 					tb[IFLA_PROTO_DOWN_REASON], extack);
3339 		if (err)
3340 			goto errout;
3341 		status |= DO_SETLINK_NOTIFY;
3342 	}
3343 
3344 	if (tb[IFLA_XDP]) {
3345 		struct nlattr *xdp[IFLA_XDP_MAX + 1];
3346 		u32 xdp_flags = 0;
3347 
3348 		err = nla_parse_nested_deprecated(xdp, IFLA_XDP_MAX,
3349 						  tb[IFLA_XDP],
3350 						  ifla_xdp_policy, NULL);
3351 		if (err < 0)
3352 			goto errout;
3353 
3354 		if (xdp[IFLA_XDP_ATTACHED] || xdp[IFLA_XDP_PROG_ID]) {
3355 			err = -EINVAL;
3356 			goto errout;
3357 		}
3358 
3359 		if (xdp[IFLA_XDP_FLAGS]) {
3360 			xdp_flags = nla_get_u32(xdp[IFLA_XDP_FLAGS]);
3361 			if (xdp_flags & ~XDP_FLAGS_MASK) {
3362 				err = -EINVAL;
3363 				goto errout;
3364 			}
3365 			if (hweight32(xdp_flags & XDP_FLAGS_MODES) > 1) {
3366 				err = -EINVAL;
3367 				goto errout;
3368 			}
3369 		}
3370 
3371 		if (xdp[IFLA_XDP_FD]) {
3372 			int expected_fd = -1;
3373 
3374 			if (xdp_flags & XDP_FLAGS_REPLACE) {
3375 				if (!xdp[IFLA_XDP_EXPECTED_FD]) {
3376 					err = -EINVAL;
3377 					goto errout;
3378 				}
3379 				expected_fd =
3380 					nla_get_s32(xdp[IFLA_XDP_EXPECTED_FD]);
3381 			}
3382 
3383 			err = dev_change_xdp_fd(dev, extack,
3384 						nla_get_s32(xdp[IFLA_XDP_FD]),
3385 						expected_fd,
3386 						xdp_flags);
3387 			if (err)
3388 				goto errout;
3389 			status |= DO_SETLINK_NOTIFY;
3390 		}
3391 	}
3392 
3393 errout:
3394 	if (status & DO_SETLINK_MODIFIED) {
3395 		if ((status & DO_SETLINK_NOTIFY) == DO_SETLINK_NOTIFY)
3396 			netdev_state_change(dev);
3397 
3398 		if (err < 0)
3399 			net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
3400 					     dev->name);
3401 	}
3402 
3403 	netdev_unlock_ops(dev);
3404 
3405 	return err;
3406 }
3407 
rtnl_dev_get(struct net * net,struct nlattr * tb[])3408 static struct net_device *rtnl_dev_get(struct net *net,
3409 				       struct nlattr *tb[])
3410 {
3411 	char ifname[ALTIFNAMSIZ];
3412 
3413 	if (tb[IFLA_IFNAME])
3414 		nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
3415 	else if (tb[IFLA_ALT_IFNAME])
3416 		nla_strscpy(ifname, tb[IFLA_ALT_IFNAME], ALTIFNAMSIZ);
3417 	else
3418 		return NULL;
3419 
3420 	return __dev_get_by_name(net, ifname);
3421 }
3422 
rtnl_setlink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)3423 static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
3424 			struct netlink_ext_ack *extack)
3425 {
3426 	struct ifinfomsg *ifm = nlmsg_data(nlh);
3427 	struct net *net = sock_net(skb->sk);
3428 	struct nlattr *tb[IFLA_MAX+1];
3429 	struct net_device *dev = NULL;
3430 	struct rtnl_nets rtnl_nets;
3431 	struct net *tgt_net;
3432 	int err;
3433 
3434 	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
3435 				     ifla_policy, extack);
3436 	if (err < 0)
3437 		goto errout;
3438 
3439 	err = rtnl_ensure_unique_netns(tb, extack, false);
3440 	if (err < 0)
3441 		goto errout;
3442 
3443 	tgt_net = rtnl_link_get_net_capable(skb, net, tb, CAP_NET_ADMIN);
3444 	if (IS_ERR(tgt_net)) {
3445 		err = PTR_ERR(tgt_net);
3446 		goto errout;
3447 	}
3448 
3449 	rtnl_nets_init(&rtnl_nets);
3450 	rtnl_nets_add(&rtnl_nets, get_net(net));
3451 	rtnl_nets_add(&rtnl_nets, tgt_net);
3452 
3453 	rtnl_nets_lock(&rtnl_nets);
3454 
3455 	if (ifm->ifi_index > 0)
3456 		dev = __dev_get_by_index(net, ifm->ifi_index);
3457 	else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
3458 		dev = rtnl_dev_get(net, tb);
3459 	else
3460 		err = -EINVAL;
3461 
3462 	if (dev)
3463 		err = do_setlink(skb, dev, tgt_net, ifm, extack, tb, 0);
3464 	else if (!err)
3465 		err = -ENODEV;
3466 
3467 	rtnl_nets_unlock(&rtnl_nets);
3468 	rtnl_nets_destroy(&rtnl_nets);
3469 errout:
3470 	return err;
3471 }
3472 
rtnl_group_dellink(const struct net * net,int group)3473 static int rtnl_group_dellink(const struct net *net, int group)
3474 {
3475 	struct net_device *dev, *aux;
3476 	LIST_HEAD(list_kill);
3477 	bool found = false;
3478 
3479 	if (!group)
3480 		return -EPERM;
3481 
3482 	for_each_netdev(net, dev) {
3483 		if (dev->group == group) {
3484 			const struct rtnl_link_ops *ops;
3485 
3486 			found = true;
3487 			ops = dev->rtnl_link_ops;
3488 			if (!ops || !ops->dellink)
3489 				return -EOPNOTSUPP;
3490 		}
3491 	}
3492 
3493 	if (!found)
3494 		return -ENODEV;
3495 
3496 	for_each_netdev_safe(net, dev, aux) {
3497 		if (dev->group == group) {
3498 			const struct rtnl_link_ops *ops;
3499 
3500 			ops = dev->rtnl_link_ops;
3501 			ops->dellink(dev, &list_kill);
3502 		}
3503 	}
3504 	unregister_netdevice_many(&list_kill);
3505 
3506 	return 0;
3507 }
3508 
rtnl_delete_link(struct net_device * dev,u32 portid,const struct nlmsghdr * nlh)3509 int rtnl_delete_link(struct net_device *dev, u32 portid, const struct nlmsghdr *nlh)
3510 {
3511 	const struct rtnl_link_ops *ops;
3512 	LIST_HEAD(list_kill);
3513 
3514 	ops = dev->rtnl_link_ops;
3515 	if (!ops || !ops->dellink)
3516 		return -EOPNOTSUPP;
3517 
3518 	ops->dellink(dev, &list_kill);
3519 	unregister_netdevice_many_notify(&list_kill, portid, nlh);
3520 
3521 	return 0;
3522 }
3523 EXPORT_SYMBOL_GPL(rtnl_delete_link);
3524 
rtnl_dellink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)3525 static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
3526 			struct netlink_ext_ack *extack)
3527 {
3528 	struct ifinfomsg *ifm = nlmsg_data(nlh);
3529 	struct net *net = sock_net(skb->sk);
3530 	u32 portid = NETLINK_CB(skb).portid;
3531 	struct nlattr *tb[IFLA_MAX+1];
3532 	struct net_device *dev = NULL;
3533 	struct net *tgt_net = net;
3534 	int netnsid = -1;
3535 	int err;
3536 
3537 	err = nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
3538 				     ifla_policy, extack);
3539 	if (err < 0)
3540 		return err;
3541 
3542 	err = rtnl_ensure_unique_netns(tb, extack, true);
3543 	if (err < 0)
3544 		return err;
3545 
3546 	if (tb[IFLA_TARGET_NETNSID]) {
3547 		netnsid = nla_get_s32(tb[IFLA_TARGET_NETNSID]);
3548 		tgt_net = rtnl_get_net_ns_capable(NETLINK_CB(skb).sk, netnsid);
3549 		if (IS_ERR(tgt_net))
3550 			return PTR_ERR(tgt_net);
3551 	}
3552 
3553 	rtnl_net_lock(tgt_net);
3554 
3555 	if (ifm->ifi_index > 0)
3556 		dev = __dev_get_by_index(tgt_net, ifm->ifi_index);
3557 	else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
3558 		dev = rtnl_dev_get(tgt_net, tb);
3559 
3560 	if (dev)
3561 		err = rtnl_delete_link(dev, portid, nlh);
3562 	else if (ifm->ifi_index > 0 || tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
3563 		err = -ENODEV;
3564 	else if (tb[IFLA_GROUP])
3565 		err = rtnl_group_dellink(tgt_net, nla_get_u32(tb[IFLA_GROUP]));
3566 	else
3567 		err = -EINVAL;
3568 
3569 	rtnl_net_unlock(tgt_net);
3570 
3571 	if (netnsid >= 0)
3572 		put_net(tgt_net);
3573 
3574 	return err;
3575 }
3576 
rtnl_configure_link(struct net_device * dev,const struct ifinfomsg * ifm,u32 portid,const struct nlmsghdr * nlh)3577 int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm,
3578 			u32 portid, const struct nlmsghdr *nlh)
3579 {
3580 	unsigned int old_flags;
3581 	int err;
3582 
3583 	old_flags = dev->flags;
3584 	if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
3585 		err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
3586 					 NULL);
3587 		if (err < 0)
3588 			return err;
3589 	}
3590 
3591 	if (dev->rtnl_link_state == RTNL_LINK_INITIALIZED) {
3592 		__dev_notify_flags(dev, old_flags, (old_flags ^ dev->flags), portid, nlh);
3593 	} else {
3594 		dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
3595 		__dev_notify_flags(dev, old_flags, ~0U, portid, nlh);
3596 	}
3597 	return 0;
3598 }
3599 EXPORT_SYMBOL(rtnl_configure_link);
3600 
rtnl_create_link(struct net * net,const char * ifname,unsigned char name_assign_type,const struct rtnl_link_ops * ops,struct nlattr * tb[],struct netlink_ext_ack * extack)3601 struct net_device *rtnl_create_link(struct net *net, const char *ifname,
3602 				    unsigned char name_assign_type,
3603 				    const struct rtnl_link_ops *ops,
3604 				    struct nlattr *tb[],
3605 				    struct netlink_ext_ack *extack)
3606 {
3607 	struct net_device *dev;
3608 	unsigned int num_tx_queues = 1;
3609 	unsigned int num_rx_queues = 1;
3610 	int err;
3611 
3612 	if (tb[IFLA_NUM_TX_QUEUES])
3613 		num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
3614 	else if (ops->get_num_tx_queues)
3615 		num_tx_queues = ops->get_num_tx_queues();
3616 
3617 	if (tb[IFLA_NUM_RX_QUEUES])
3618 		num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]);
3619 	else if (ops->get_num_rx_queues)
3620 		num_rx_queues = ops->get_num_rx_queues();
3621 
3622 	if (num_tx_queues < 1 || num_tx_queues > 4096) {
3623 		NL_SET_ERR_MSG(extack, "Invalid number of transmit queues");
3624 		return ERR_PTR(-EINVAL);
3625 	}
3626 
3627 	if (num_rx_queues < 1 || num_rx_queues > 4096) {
3628 		NL_SET_ERR_MSG(extack, "Invalid number of receive queues");
3629 		return ERR_PTR(-EINVAL);
3630 	}
3631 
3632 	if (ops->alloc) {
3633 		dev = ops->alloc(tb, ifname, name_assign_type,
3634 				 num_tx_queues, num_rx_queues);
3635 		if (IS_ERR(dev))
3636 			return dev;
3637 	} else {
3638 		dev = alloc_netdev_mqs(ops->priv_size, ifname,
3639 				       name_assign_type, ops->setup,
3640 				       num_tx_queues, num_rx_queues);
3641 	}
3642 
3643 	if (!dev)
3644 		return ERR_PTR(-ENOMEM);
3645 
3646 	err = validate_linkmsg(dev, tb, extack);
3647 	if (err < 0) {
3648 		free_netdev(dev);
3649 		return ERR_PTR(err);
3650 	}
3651 
3652 	dev_net_set(dev, net);
3653 	dev->rtnl_link_ops = ops;
3654 	dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
3655 
3656 	if (tb[IFLA_MTU]) {
3657 		u32 mtu = nla_get_u32(tb[IFLA_MTU]);
3658 
3659 		err = dev_validate_mtu(dev, mtu, extack);
3660 		if (err) {
3661 			free_netdev(dev);
3662 			return ERR_PTR(err);
3663 		}
3664 		dev->mtu = mtu;
3665 	}
3666 	if (tb[IFLA_ADDRESS]) {
3667 		__dev_addr_set(dev, nla_data(tb[IFLA_ADDRESS]),
3668 			       nla_len(tb[IFLA_ADDRESS]));
3669 		dev->addr_assign_type = NET_ADDR_SET;
3670 	}
3671 	if (tb[IFLA_BROADCAST])
3672 		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
3673 				nla_len(tb[IFLA_BROADCAST]));
3674 	if (tb[IFLA_TXQLEN])
3675 		dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
3676 	if (tb[IFLA_OPERSTATE])
3677 		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
3678 	if (tb[IFLA_LINKMODE])
3679 		dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
3680 	if (tb[IFLA_GROUP])
3681 		dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
3682 	if (tb[IFLA_GSO_MAX_SIZE])
3683 		netif_set_gso_max_size(dev, nla_get_u32(tb[IFLA_GSO_MAX_SIZE]));
3684 	if (tb[IFLA_GSO_MAX_SEGS])
3685 		netif_set_gso_max_segs(dev, nla_get_u32(tb[IFLA_GSO_MAX_SEGS]));
3686 	if (tb[IFLA_GRO_MAX_SIZE])
3687 		netif_set_gro_max_size(dev, nla_get_u32(tb[IFLA_GRO_MAX_SIZE]));
3688 	if (tb[IFLA_GSO_IPV4_MAX_SIZE])
3689 		netif_set_gso_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GSO_IPV4_MAX_SIZE]));
3690 	if (tb[IFLA_GRO_IPV4_MAX_SIZE])
3691 		netif_set_gro_ipv4_max_size(dev, nla_get_u32(tb[IFLA_GRO_IPV4_MAX_SIZE]));
3692 
3693 	return dev;
3694 }
3695 EXPORT_SYMBOL(rtnl_create_link);
3696 
3697 struct rtnl_newlink_tbs {
3698 	struct nlattr *tb[IFLA_MAX + 1];
3699 	struct nlattr *linkinfo[IFLA_INFO_MAX + 1];
3700 	struct nlattr *attr[RTNL_MAX_TYPE + 1];
3701 	struct nlattr *slave_attr[RTNL_SLAVE_MAX_TYPE + 1];
3702 };
3703 
rtnl_changelink(const struct sk_buff * skb,struct nlmsghdr * nlh,const struct rtnl_link_ops * ops,struct net_device * dev,struct net * tgt_net,struct rtnl_newlink_tbs * tbs,struct nlattr ** data,struct netlink_ext_ack * extack)3704 static int rtnl_changelink(const struct sk_buff *skb, struct nlmsghdr *nlh,
3705 			   const struct rtnl_link_ops *ops,
3706 			   struct net_device *dev, struct net *tgt_net,
3707 			   struct rtnl_newlink_tbs *tbs,
3708 			   struct nlattr **data,
3709 			   struct netlink_ext_ack *extack)
3710 {
3711 	struct nlattr ** const linkinfo = tbs->linkinfo;
3712 	struct nlattr ** const tb = tbs->tb;
3713 	int status = 0;
3714 	int err;
3715 
3716 	if (nlh->nlmsg_flags & NLM_F_EXCL)
3717 		return -EEXIST;
3718 
3719 	if (nlh->nlmsg_flags & NLM_F_REPLACE)
3720 		return -EOPNOTSUPP;
3721 
3722 	if (linkinfo[IFLA_INFO_DATA]) {
3723 		if (!ops || ops != dev->rtnl_link_ops || !ops->changelink)
3724 			return -EOPNOTSUPP;
3725 
3726 		err = ops->changelink(dev, tb, data, extack);
3727 		if (err < 0)
3728 			return err;
3729 
3730 		status |= DO_SETLINK_NOTIFY;
3731 	}
3732 
3733 	if (linkinfo[IFLA_INFO_SLAVE_DATA]) {
3734 		const struct rtnl_link_ops *m_ops = NULL;
3735 		struct nlattr **slave_data = NULL;
3736 		struct net_device *master_dev;
3737 
3738 		master_dev = netdev_master_upper_dev_get(dev);
3739 		if (master_dev)
3740 			m_ops = master_dev->rtnl_link_ops;
3741 
3742 		if (!m_ops || !m_ops->slave_changelink)
3743 			return -EOPNOTSUPP;
3744 
3745 		if (m_ops->slave_maxtype > RTNL_SLAVE_MAX_TYPE)
3746 			return -EINVAL;
3747 
3748 		if (m_ops->slave_maxtype) {
3749 			err = nla_parse_nested_deprecated(tbs->slave_attr,
3750 							  m_ops->slave_maxtype,
3751 							  linkinfo[IFLA_INFO_SLAVE_DATA],
3752 							  m_ops->slave_policy, extack);
3753 			if (err < 0)
3754 				return err;
3755 
3756 			slave_data = tbs->slave_attr;
3757 		}
3758 
3759 		err = m_ops->slave_changelink(master_dev, dev, tb, slave_data, extack);
3760 		if (err < 0)
3761 			return err;
3762 
3763 		status |= DO_SETLINK_NOTIFY;
3764 	}
3765 
3766 	return do_setlink(skb, dev, tgt_net, nlmsg_data(nlh), extack, tb, status);
3767 }
3768 
rtnl_group_changelink(const struct sk_buff * skb,struct net * net,struct net * tgt_net,int group,struct ifinfomsg * ifm,struct netlink_ext_ack * extack,struct nlattr ** tb)3769 static int rtnl_group_changelink(const struct sk_buff *skb,
3770 				 struct net *net, struct net *tgt_net,
3771 				 int group, struct ifinfomsg *ifm,
3772 				 struct netlink_ext_ack *extack,
3773 				 struct nlattr **tb)
3774 {
3775 	struct net_device *dev, *aux;
3776 	int err;
3777 
3778 	for_each_netdev_safe(net, dev, aux) {
3779 		if (dev->group == group) {
3780 			err = do_setlink(skb, dev, tgt_net, ifm, extack, tb, 0);
3781 			if (err < 0)
3782 				return err;
3783 		}
3784 	}
3785 
3786 	return 0;
3787 }
3788 
rtnl_newlink_create(struct sk_buff * skb,struct ifinfomsg * ifm,const struct rtnl_link_ops * ops,struct net * tgt_net,struct net * link_net,struct net * peer_net,const struct nlmsghdr * nlh,struct nlattr ** tb,struct nlattr ** data,struct netlink_ext_ack * extack)3789 static int rtnl_newlink_create(struct sk_buff *skb, struct ifinfomsg *ifm,
3790 			       const struct rtnl_link_ops *ops,
3791 			       struct net *tgt_net, struct net *link_net,
3792 			       struct net *peer_net,
3793 			       const struct nlmsghdr *nlh,
3794 			       struct nlattr **tb, struct nlattr **data,
3795 			       struct netlink_ext_ack *extack)
3796 {
3797 	unsigned char name_assign_type = NET_NAME_USER;
3798 	struct rtnl_newlink_params params = {
3799 		.src_net = sock_net(skb->sk),
3800 		.link_net = link_net,
3801 		.peer_net = peer_net,
3802 		.tb = tb,
3803 		.data = data,
3804 	};
3805 	u32 portid = NETLINK_CB(skb).portid;
3806 	struct net_device *dev;
3807 	char ifname[IFNAMSIZ];
3808 	int err;
3809 
3810 	if (!ops->alloc && !ops->setup)
3811 		return -EOPNOTSUPP;
3812 
3813 	if (tb[IFLA_IFNAME]) {
3814 		nla_strscpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
3815 	} else {
3816 		snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
3817 		name_assign_type = NET_NAME_ENUM;
3818 	}
3819 
3820 	dev = rtnl_create_link(tgt_net, ifname, name_assign_type, ops, tb,
3821 			       extack);
3822 	if (IS_ERR(dev)) {
3823 		err = PTR_ERR(dev);
3824 		goto out;
3825 	}
3826 
3827 	dev->ifindex = ifm->ifi_index;
3828 
3829 	if (ops->newlink)
3830 		err = ops->newlink(dev, &params, extack);
3831 	else
3832 		err = register_netdevice(dev);
3833 	if (err < 0) {
3834 		free_netdev(dev);
3835 		goto out;
3836 	}
3837 
3838 	netdev_lock_ops(dev);
3839 
3840 	err = rtnl_configure_link(dev, ifm, portid, nlh);
3841 	if (err < 0)
3842 		goto out_unregister;
3843 	if (tb[IFLA_MASTER]) {
3844 		err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]), extack);
3845 		if (err)
3846 			goto out_unregister;
3847 	}
3848 
3849 	netdev_unlock_ops(dev);
3850 out:
3851 	return err;
3852 out_unregister:
3853 	netdev_unlock_ops(dev);
3854 	if (ops->newlink) {
3855 		LIST_HEAD(list_kill);
3856 
3857 		ops->dellink(dev, &list_kill);
3858 		unregister_netdevice_many(&list_kill);
3859 	} else {
3860 		unregister_netdevice(dev);
3861 	}
3862 	goto out;
3863 }
3864 
rtnl_get_peer_net(const struct rtnl_link_ops * ops,struct nlattr * tbp[],struct nlattr * data[],struct netlink_ext_ack * extack)3865 static struct net *rtnl_get_peer_net(const struct rtnl_link_ops *ops,
3866 				     struct nlattr *tbp[],
3867 				     struct nlattr *data[],
3868 				     struct netlink_ext_ack *extack)
3869 {
3870 	struct nlattr *tb[IFLA_MAX + 1];
3871 	int err;
3872 
3873 	if (!data || !data[ops->peer_type])
3874 		return rtnl_link_get_net_ifla(tbp);
3875 
3876 	err = rtnl_nla_parse_ifinfomsg(tb, data[ops->peer_type], extack);
3877 	if (err < 0)
3878 		return ERR_PTR(err);
3879 
3880 	if (ops->validate) {
3881 		err = ops->validate(tb, NULL, extack);
3882 		if (err < 0)
3883 			return ERR_PTR(err);
3884 	}
3885 
3886 	return rtnl_link_get_net_ifla(tb);
3887 }
3888 
__rtnl_newlink(struct sk_buff * skb,struct nlmsghdr * nlh,const struct rtnl_link_ops * ops,struct net * tgt_net,struct net * link_net,struct net * peer_net,struct rtnl_newlink_tbs * tbs,struct nlattr ** data,struct netlink_ext_ack * extack)3889 static int __rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
3890 			  const struct rtnl_link_ops *ops,
3891 			  struct net *tgt_net, struct net *link_net,
3892 			  struct net *peer_net,
3893 			  struct rtnl_newlink_tbs *tbs,
3894 			  struct nlattr **data,
3895 			  struct netlink_ext_ack *extack)
3896 {
3897 	struct nlattr ** const tb = tbs->tb;
3898 	struct net *net = sock_net(skb->sk);
3899 	struct net *device_net;
3900 	struct net_device *dev;
3901 	struct ifinfomsg *ifm;
3902 	bool link_specified;
3903 
3904 	/* When creating, lookup for existing device in target net namespace */
3905 	device_net = (nlh->nlmsg_flags & NLM_F_CREATE) &&
3906 		     (nlh->nlmsg_flags & NLM_F_EXCL) ?
3907 		     tgt_net : net;
3908 
3909 	ifm = nlmsg_data(nlh);
3910 	if (ifm->ifi_index > 0) {
3911 		link_specified = true;
3912 		dev = __dev_get_by_index(device_net, ifm->ifi_index);
3913 	} else if (ifm->ifi_index < 0) {
3914 		NL_SET_ERR_MSG(extack, "ifindex can't be negative");
3915 		return -EINVAL;
3916 	} else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME]) {
3917 		link_specified = true;
3918 		dev = rtnl_dev_get(device_net, tb);
3919 	} else {
3920 		link_specified = false;
3921 		dev = NULL;
3922 	}
3923 
3924 	if (dev)
3925 		return rtnl_changelink(skb, nlh, ops, dev, tgt_net, tbs, data, extack);
3926 
3927 	if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
3928 		/* No dev found and NLM_F_CREATE not set. Requested dev does not exist,
3929 		 * or it's for a group
3930 		*/
3931 		if (link_specified || !tb[IFLA_GROUP])
3932 			return -ENODEV;
3933 
3934 		return rtnl_group_changelink(skb, net, tgt_net,
3935 					     nla_get_u32(tb[IFLA_GROUP]),
3936 					     ifm, extack, tb);
3937 	}
3938 
3939 	if (tb[IFLA_MAP] || tb[IFLA_PROTINFO])
3940 		return -EOPNOTSUPP;
3941 
3942 	if (!ops) {
3943 		NL_SET_ERR_MSG(extack, "Unknown device type");
3944 		return -EOPNOTSUPP;
3945 	}
3946 
3947 	return rtnl_newlink_create(skb, ifm, ops, tgt_net, link_net, peer_net, nlh,
3948 				   tb, data, extack);
3949 }
3950 
rtnl_newlink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)3951 static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh,
3952 			struct netlink_ext_ack *extack)
3953 {
3954 	struct net *tgt_net, *link_net = NULL, *peer_net = NULL;
3955 	struct nlattr **tb, **linkinfo, **data = NULL;
3956 	struct rtnl_link_ops *ops = NULL;
3957 	struct rtnl_newlink_tbs *tbs;
3958 	struct rtnl_nets rtnl_nets;
3959 	int ops_srcu_index;
3960 	int ret;
3961 
3962 	tbs = kmalloc(sizeof(*tbs), GFP_KERNEL);
3963 	if (!tbs)
3964 		return -ENOMEM;
3965 
3966 	tb = tbs->tb;
3967 	ret = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg), tb,
3968 				     IFLA_MAX, ifla_policy, extack);
3969 	if (ret < 0)
3970 		goto free;
3971 
3972 	ret = rtnl_ensure_unique_netns(tb, extack, false);
3973 	if (ret < 0)
3974 		goto free;
3975 
3976 	linkinfo = tbs->linkinfo;
3977 	if (tb[IFLA_LINKINFO]) {
3978 		ret = nla_parse_nested_deprecated(linkinfo, IFLA_INFO_MAX,
3979 						  tb[IFLA_LINKINFO],
3980 						  ifla_info_policy, NULL);
3981 		if (ret < 0)
3982 			goto free;
3983 	} else {
3984 		memset(linkinfo, 0, sizeof(tbs->linkinfo));
3985 	}
3986 
3987 	if (linkinfo[IFLA_INFO_KIND]) {
3988 		char kind[MODULE_NAME_LEN];
3989 
3990 		nla_strscpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
3991 		ops = rtnl_link_ops_get(kind, &ops_srcu_index);
3992 #ifdef CONFIG_MODULES
3993 		if (!ops) {
3994 			request_module("rtnl-link-%s", kind);
3995 			ops = rtnl_link_ops_get(kind, &ops_srcu_index);
3996 		}
3997 #endif
3998 	}
3999 
4000 	rtnl_nets_init(&rtnl_nets);
4001 
4002 	if (ops) {
4003 		if (ops->maxtype > RTNL_MAX_TYPE) {
4004 			ret = -EINVAL;
4005 			goto put_ops;
4006 		}
4007 
4008 		if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
4009 			ret = nla_parse_nested_deprecated(tbs->attr, ops->maxtype,
4010 							  linkinfo[IFLA_INFO_DATA],
4011 							  ops->policy, extack);
4012 			if (ret < 0)
4013 				goto put_ops;
4014 
4015 			data = tbs->attr;
4016 		}
4017 
4018 		if (ops->validate) {
4019 			ret = ops->validate(tb, data, extack);
4020 			if (ret < 0)
4021 				goto put_ops;
4022 		}
4023 
4024 		if (ops->peer_type) {
4025 			peer_net = rtnl_get_peer_net(ops, tb, data, extack);
4026 			if (IS_ERR(peer_net)) {
4027 				ret = PTR_ERR(peer_net);
4028 				goto put_ops;
4029 			}
4030 			if (peer_net)
4031 				rtnl_nets_add(&rtnl_nets, peer_net);
4032 		}
4033 	}
4034 
4035 	tgt_net = rtnl_link_get_net_capable(skb, sock_net(skb->sk), tb, CAP_NET_ADMIN);
4036 	if (IS_ERR(tgt_net)) {
4037 		ret = PTR_ERR(tgt_net);
4038 		goto put_net;
4039 	}
4040 
4041 	rtnl_nets_add(&rtnl_nets, tgt_net);
4042 
4043 	if (tb[IFLA_LINK_NETNSID]) {
4044 		int id = nla_get_s32(tb[IFLA_LINK_NETNSID]);
4045 
4046 		link_net = get_net_ns_by_id(tgt_net, id);
4047 		if (!link_net) {
4048 			NL_SET_ERR_MSG(extack, "Unknown network namespace id");
4049 			ret =  -EINVAL;
4050 			goto put_net;
4051 		}
4052 
4053 		rtnl_nets_add(&rtnl_nets, link_net);
4054 
4055 		if (!netlink_ns_capable(skb, link_net->user_ns, CAP_NET_ADMIN)) {
4056 			ret = -EPERM;
4057 			goto put_net;
4058 		}
4059 	}
4060 
4061 	rtnl_nets_lock(&rtnl_nets);
4062 	ret = __rtnl_newlink(skb, nlh, ops, tgt_net, link_net, peer_net, tbs, data, extack);
4063 	rtnl_nets_unlock(&rtnl_nets);
4064 
4065 put_net:
4066 	rtnl_nets_destroy(&rtnl_nets);
4067 put_ops:
4068 	if (ops)
4069 		rtnl_link_ops_put(ops, ops_srcu_index);
4070 free:
4071 	kfree(tbs);
4072 	return ret;
4073 }
4074 
rtnl_valid_getlink_req(struct sk_buff * skb,const struct nlmsghdr * nlh,struct nlattr ** tb,struct netlink_ext_ack * extack)4075 static int rtnl_valid_getlink_req(struct sk_buff *skb,
4076 				  const struct nlmsghdr *nlh,
4077 				  struct nlattr **tb,
4078 				  struct netlink_ext_ack *extack)
4079 {
4080 	struct ifinfomsg *ifm;
4081 	int i, err;
4082 
4083 	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
4084 		NL_SET_ERR_MSG(extack, "Invalid header for get link");
4085 		return -EINVAL;
4086 	}
4087 
4088 	if (!netlink_strict_get_check(skb))
4089 		return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFLA_MAX,
4090 					      ifla_policy, extack);
4091 
4092 	ifm = nlmsg_data(nlh);
4093 	if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
4094 	    ifm->ifi_change) {
4095 		NL_SET_ERR_MSG(extack, "Invalid values in header for get link request");
4096 		return -EINVAL;
4097 	}
4098 
4099 	err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFLA_MAX,
4100 					    ifla_policy, extack);
4101 	if (err)
4102 		return err;
4103 
4104 	for (i = 0; i <= IFLA_MAX; i++) {
4105 		if (!tb[i])
4106 			continue;
4107 
4108 		switch (i) {
4109 		case IFLA_IFNAME:
4110 		case IFLA_ALT_IFNAME:
4111 		case IFLA_EXT_MASK:
4112 		case IFLA_TARGET_NETNSID:
4113 			break;
4114 		default:
4115 			NL_SET_ERR_MSG(extack, "Unsupported attribute in get link request");
4116 			return -EINVAL;
4117 		}
4118 	}
4119 
4120 	return 0;
4121 }
4122 
rtnl_getlink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4123 static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr *nlh,
4124 			struct netlink_ext_ack *extack)
4125 {
4126 	struct net *net = sock_net(skb->sk);
4127 	struct net *tgt_net = net;
4128 	struct ifinfomsg *ifm;
4129 	struct nlattr *tb[IFLA_MAX+1];
4130 	struct net_device *dev = NULL;
4131 	struct sk_buff *nskb;
4132 	int netnsid = -1;
4133 	int err;
4134 	u32 ext_filter_mask = 0;
4135 
4136 	err = rtnl_valid_getlink_req(skb, nlh, tb, extack);
4137 	if (err < 0)
4138 		return err;
4139 
4140 	err = rtnl_ensure_unique_netns(tb, extack, true);
4141 	if (err < 0)
4142 		return err;
4143 
4144 	if (tb[IFLA_TARGET_NETNSID]) {
4145 		netnsid = nla_get_s32(tb[IFLA_TARGET_NETNSID]);
4146 		tgt_net = rtnl_get_net_ns_capable(NETLINK_CB(skb).sk, netnsid);
4147 		if (IS_ERR(tgt_net))
4148 			return PTR_ERR(tgt_net);
4149 	}
4150 
4151 	if (tb[IFLA_EXT_MASK])
4152 		ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
4153 
4154 	err = -EINVAL;
4155 	ifm = nlmsg_data(nlh);
4156 	if (ifm->ifi_index > 0)
4157 		dev = __dev_get_by_index(tgt_net, ifm->ifi_index);
4158 	else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
4159 		dev = rtnl_dev_get(tgt_net, tb);
4160 	else
4161 		goto out;
4162 
4163 	err = -ENODEV;
4164 	if (dev == NULL)
4165 		goto out;
4166 
4167 	err = -ENOBUFS;
4168 	nskb = nlmsg_new_large(if_nlmsg_size(dev, ext_filter_mask));
4169 	if (nskb == NULL)
4170 		goto out;
4171 
4172 	/* Synchronize the carrier state so we don't report a state
4173 	 * that we're not actually going to honour immediately; if
4174 	 * the driver just did a carrier off->on transition, we can
4175 	 * only TX if link watch work has run, but without this we'd
4176 	 * already report carrier on, even if it doesn't work yet.
4177 	 */
4178 	linkwatch_sync_dev(dev);
4179 
4180 	err = rtnl_fill_ifinfo(nskb, dev, net,
4181 			       RTM_NEWLINK, NETLINK_CB(skb).portid,
4182 			       nlh->nlmsg_seq, 0, 0, ext_filter_mask,
4183 			       0, NULL, 0, netnsid, GFP_KERNEL);
4184 	if (err < 0) {
4185 		/* -EMSGSIZE implies BUG in if_nlmsg_size */
4186 		WARN_ON(err == -EMSGSIZE);
4187 		kfree_skb(nskb);
4188 	} else
4189 		err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
4190 out:
4191 	if (netnsid >= 0)
4192 		put_net(tgt_net);
4193 
4194 	return err;
4195 }
4196 
rtnl_alt_ifname(int cmd,struct net_device * dev,struct nlattr * attr,bool * changed,struct netlink_ext_ack * extack)4197 static int rtnl_alt_ifname(int cmd, struct net_device *dev, struct nlattr *attr,
4198 			   bool *changed, struct netlink_ext_ack *extack)
4199 {
4200 	char *alt_ifname;
4201 	size_t size;
4202 	int err;
4203 
4204 	err = nla_validate(attr, attr->nla_len, IFLA_MAX, ifla_policy, extack);
4205 	if (err)
4206 		return err;
4207 
4208 	if (cmd == RTM_NEWLINKPROP) {
4209 		size = rtnl_prop_list_size(dev);
4210 		size += nla_total_size(ALTIFNAMSIZ);
4211 		if (size >= U16_MAX) {
4212 			NL_SET_ERR_MSG(extack,
4213 				       "effective property list too long");
4214 			return -EINVAL;
4215 		}
4216 	}
4217 
4218 	alt_ifname = nla_strdup(attr, GFP_KERNEL_ACCOUNT);
4219 	if (!alt_ifname)
4220 		return -ENOMEM;
4221 
4222 	if (cmd == RTM_NEWLINKPROP) {
4223 		err = netdev_name_node_alt_create(dev, alt_ifname);
4224 		if (!err)
4225 			alt_ifname = NULL;
4226 	} else if (cmd == RTM_DELLINKPROP) {
4227 		err = netdev_name_node_alt_destroy(dev, alt_ifname);
4228 	} else {
4229 		WARN_ON_ONCE(1);
4230 		err = -EINVAL;
4231 	}
4232 
4233 	kfree(alt_ifname);
4234 	if (!err)
4235 		*changed = true;
4236 	return err;
4237 }
4238 
rtnl_linkprop(int cmd,struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4239 static int rtnl_linkprop(int cmd, struct sk_buff *skb, struct nlmsghdr *nlh,
4240 			 struct netlink_ext_ack *extack)
4241 {
4242 	struct net *net = sock_net(skb->sk);
4243 	struct nlattr *tb[IFLA_MAX + 1];
4244 	struct net_device *dev;
4245 	struct ifinfomsg *ifm;
4246 	bool changed = false;
4247 	struct nlattr *attr;
4248 	int err, rem;
4249 
4250 	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, extack);
4251 	if (err)
4252 		return err;
4253 
4254 	err = rtnl_ensure_unique_netns(tb, extack, true);
4255 	if (err)
4256 		return err;
4257 
4258 	ifm = nlmsg_data(nlh);
4259 	if (ifm->ifi_index > 0)
4260 		dev = __dev_get_by_index(net, ifm->ifi_index);
4261 	else if (tb[IFLA_IFNAME] || tb[IFLA_ALT_IFNAME])
4262 		dev = rtnl_dev_get(net, tb);
4263 	else
4264 		return -EINVAL;
4265 
4266 	if (!dev)
4267 		return -ENODEV;
4268 
4269 	if (!tb[IFLA_PROP_LIST])
4270 		return 0;
4271 
4272 	nla_for_each_nested(attr, tb[IFLA_PROP_LIST], rem) {
4273 		switch (nla_type(attr)) {
4274 		case IFLA_ALT_IFNAME:
4275 			err = rtnl_alt_ifname(cmd, dev, attr, &changed, extack);
4276 			if (err)
4277 				return err;
4278 			break;
4279 		}
4280 	}
4281 
4282 	if (changed)
4283 		netdev_state_change(dev);
4284 	return 0;
4285 }
4286 
rtnl_newlinkprop(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4287 static int rtnl_newlinkprop(struct sk_buff *skb, struct nlmsghdr *nlh,
4288 			    struct netlink_ext_ack *extack)
4289 {
4290 	return rtnl_linkprop(RTM_NEWLINKPROP, skb, nlh, extack);
4291 }
4292 
rtnl_dellinkprop(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4293 static int rtnl_dellinkprop(struct sk_buff *skb, struct nlmsghdr *nlh,
4294 			    struct netlink_ext_ack *extack)
4295 {
4296 	return rtnl_linkprop(RTM_DELLINKPROP, skb, nlh, extack);
4297 }
4298 
rtnl_calcit(struct sk_buff * skb,struct nlmsghdr * nlh)4299 static noinline_for_stack u32 rtnl_calcit(struct sk_buff *skb,
4300 					  struct nlmsghdr *nlh)
4301 {
4302 	struct net *net = sock_net(skb->sk);
4303 	size_t min_ifinfo_dump_size = 0;
4304 	u32 ext_filter_mask = 0;
4305 	struct net_device *dev;
4306 	struct nlattr *nla;
4307 	int hdrlen, rem;
4308 
4309 	/* Same kernel<->userspace interface hack as in rtnl_dump_ifinfo. */
4310 	hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
4311 		 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
4312 
4313 	if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
4314 		return NLMSG_GOODSIZE;
4315 
4316 	nla_for_each_attr_type(nla, IFLA_EXT_MASK,
4317 			       nlmsg_attrdata(nlh, hdrlen),
4318 			       nlmsg_attrlen(nlh, hdrlen), rem) {
4319 		if (nla_len(nla) == sizeof(u32))
4320 			ext_filter_mask = nla_get_u32(nla);
4321 	}
4322 
4323 	if (!ext_filter_mask)
4324 		return NLMSG_GOODSIZE;
4325 	/*
4326 	 * traverse the list of net devices and compute the minimum
4327 	 * buffer size based upon the filter mask.
4328 	 */
4329 	rcu_read_lock();
4330 	for_each_netdev_rcu(net, dev) {
4331 		min_ifinfo_dump_size = max(min_ifinfo_dump_size,
4332 					   if_nlmsg_size(dev, ext_filter_mask));
4333 	}
4334 	rcu_read_unlock();
4335 
4336 	return nlmsg_total_size(min_ifinfo_dump_size);
4337 }
4338 
rtnl_dump_all(struct sk_buff * skb,struct netlink_callback * cb)4339 static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
4340 {
4341 	int idx;
4342 	int s_idx = cb->family;
4343 	int type = cb->nlh->nlmsg_type - RTM_BASE;
4344 	int ret = 0;
4345 
4346 	if (s_idx == 0)
4347 		s_idx = 1;
4348 
4349 	for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
4350 		struct rtnl_link __rcu **tab;
4351 		struct rtnl_link *link;
4352 		rtnl_dumpit_func dumpit;
4353 
4354 		if (idx < s_idx || idx == PF_PACKET)
4355 			continue;
4356 
4357 		if (type < 0 || type >= RTM_NR_MSGTYPES)
4358 			continue;
4359 
4360 		tab = rcu_dereference_rtnl(rtnl_msg_handlers[idx]);
4361 		if (!tab)
4362 			continue;
4363 
4364 		link = rcu_dereference_rtnl(tab[type]);
4365 		if (!link)
4366 			continue;
4367 
4368 		dumpit = link->dumpit;
4369 		if (!dumpit)
4370 			continue;
4371 
4372 		if (idx > s_idx) {
4373 			memset(&cb->args[0], 0, sizeof(cb->args));
4374 			cb->prev_seq = 0;
4375 			cb->seq = 0;
4376 		}
4377 		ret = dumpit(skb, cb);
4378 		if (ret)
4379 			break;
4380 	}
4381 	cb->family = idx;
4382 
4383 	return skb->len ? : ret;
4384 }
4385 
rtmsg_ifinfo_build_skb(int type,struct net_device * dev,unsigned int change,u32 event,gfp_t flags,int * new_nsid,int new_ifindex,u32 portid,const struct nlmsghdr * nlh)4386 struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev,
4387 				       unsigned int change,
4388 				       u32 event, gfp_t flags, int *new_nsid,
4389 				       int new_ifindex, u32 portid,
4390 				       const struct nlmsghdr *nlh)
4391 {
4392 	struct net *net = dev_net(dev);
4393 	struct sk_buff *skb;
4394 	int err = -ENOBUFS;
4395 	u32 seq = 0;
4396 
4397 	skb = nlmsg_new(if_nlmsg_size(dev, 0), flags);
4398 	if (skb == NULL)
4399 		goto errout;
4400 
4401 	if (nlmsg_report(nlh))
4402 		seq = nlmsg_seq(nlh);
4403 	else
4404 		portid = 0;
4405 
4406 	err = rtnl_fill_ifinfo(skb, dev, dev_net(dev),
4407 			       type, portid, seq, change, 0, 0, event,
4408 			       new_nsid, new_ifindex, -1, flags);
4409 	if (err < 0) {
4410 		/* -EMSGSIZE implies BUG in if_nlmsg_size() */
4411 		WARN_ON(err == -EMSGSIZE);
4412 		kfree_skb(skb);
4413 		goto errout;
4414 	}
4415 	return skb;
4416 errout:
4417 	rtnl_set_sk_err(net, RTNLGRP_LINK, err);
4418 	return NULL;
4419 }
4420 
rtmsg_ifinfo_send(struct sk_buff * skb,struct net_device * dev,gfp_t flags,u32 portid,const struct nlmsghdr * nlh)4421 void rtmsg_ifinfo_send(struct sk_buff *skb, struct net_device *dev, gfp_t flags,
4422 		       u32 portid, const struct nlmsghdr *nlh)
4423 {
4424 	struct net *net = dev_net(dev);
4425 
4426 	rtnl_notify(skb, net, portid, RTNLGRP_LINK, nlh, flags);
4427 }
4428 
rtmsg_ifinfo_event(int type,struct net_device * dev,unsigned int change,u32 event,gfp_t flags,int * new_nsid,int new_ifindex,u32 portid,const struct nlmsghdr * nlh)4429 static void rtmsg_ifinfo_event(int type, struct net_device *dev,
4430 			       unsigned int change, u32 event,
4431 			       gfp_t flags, int *new_nsid, int new_ifindex,
4432 			       u32 portid, const struct nlmsghdr *nlh)
4433 {
4434 	struct sk_buff *skb;
4435 
4436 	if (dev->reg_state != NETREG_REGISTERED)
4437 		return;
4438 
4439 	skb = rtmsg_ifinfo_build_skb(type, dev, change, event, flags, new_nsid,
4440 				     new_ifindex, portid, nlh);
4441 	if (skb)
4442 		rtmsg_ifinfo_send(skb, dev, flags, portid, nlh);
4443 }
4444 
rtmsg_ifinfo(int type,struct net_device * dev,unsigned int change,gfp_t flags,u32 portid,const struct nlmsghdr * nlh)4445 void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change,
4446 		  gfp_t flags, u32 portid, const struct nlmsghdr *nlh)
4447 {
4448 	rtmsg_ifinfo_event(type, dev, change, rtnl_get_event(0), flags,
4449 			   NULL, 0, portid, nlh);
4450 }
4451 
rtmsg_ifinfo_newnet(int type,struct net_device * dev,unsigned int change,gfp_t flags,int * new_nsid,int new_ifindex)4452 void rtmsg_ifinfo_newnet(int type, struct net_device *dev, unsigned int change,
4453 			 gfp_t flags, int *new_nsid, int new_ifindex)
4454 {
4455 	rtmsg_ifinfo_event(type, dev, change, rtnl_get_event(0), flags,
4456 			   new_nsid, new_ifindex, 0, NULL);
4457 }
4458 
nlmsg_populate_fdb_fill(struct sk_buff * skb,struct net_device * dev,u8 * addr,u16 vid,u32 pid,u32 seq,int type,unsigned int flags,int nlflags,u16 ndm_state)4459 static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
4460 				   struct net_device *dev,
4461 				   u8 *addr, u16 vid, u32 pid, u32 seq,
4462 				   int type, unsigned int flags,
4463 				   int nlflags, u16 ndm_state)
4464 {
4465 	struct nlmsghdr *nlh;
4466 	struct ndmsg *ndm;
4467 
4468 	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags);
4469 	if (!nlh)
4470 		return -EMSGSIZE;
4471 
4472 	ndm = nlmsg_data(nlh);
4473 	ndm->ndm_family  = AF_BRIDGE;
4474 	ndm->ndm_pad1	 = 0;
4475 	ndm->ndm_pad2    = 0;
4476 	ndm->ndm_flags	 = flags;
4477 	ndm->ndm_type	 = 0;
4478 	ndm->ndm_ifindex = dev->ifindex;
4479 	ndm->ndm_state   = ndm_state;
4480 
4481 	if (nla_put(skb, NDA_LLADDR, dev->addr_len, addr))
4482 		goto nla_put_failure;
4483 	if (vid)
4484 		if (nla_put(skb, NDA_VLAN, sizeof(u16), &vid))
4485 			goto nla_put_failure;
4486 
4487 	nlmsg_end(skb, nlh);
4488 	return 0;
4489 
4490 nla_put_failure:
4491 	nlmsg_cancel(skb, nlh);
4492 	return -EMSGSIZE;
4493 }
4494 
rtnl_fdb_nlmsg_size(const struct net_device * dev)4495 static inline size_t rtnl_fdb_nlmsg_size(const struct net_device *dev)
4496 {
4497 	return NLMSG_ALIGN(sizeof(struct ndmsg)) +
4498 	       nla_total_size(dev->addr_len) +	/* NDA_LLADDR */
4499 	       nla_total_size(sizeof(u16)) +	/* NDA_VLAN */
4500 	       0;
4501 }
4502 
rtnl_fdb_notify(struct net_device * dev,u8 * addr,u16 vid,int type,u16 ndm_state)4503 static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, u16 vid, int type,
4504 			    u16 ndm_state)
4505 {
4506 	struct net *net = dev_net(dev);
4507 	struct sk_buff *skb;
4508 	int err = -ENOBUFS;
4509 
4510 	skb = nlmsg_new(rtnl_fdb_nlmsg_size(dev), GFP_ATOMIC);
4511 	if (!skb)
4512 		goto errout;
4513 
4514 	err = nlmsg_populate_fdb_fill(skb, dev, addr, vid,
4515 				      0, 0, type, NTF_SELF, 0, ndm_state);
4516 	if (err < 0) {
4517 		kfree_skb(skb);
4518 		goto errout;
4519 	}
4520 
4521 	rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
4522 	return;
4523 errout:
4524 	rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
4525 }
4526 
4527 /*
4528  * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
4529  */
ndo_dflt_fdb_add(struct ndmsg * ndm,struct nlattr * tb[],struct net_device * dev,const unsigned char * addr,u16 vid,u16 flags)4530 int ndo_dflt_fdb_add(struct ndmsg *ndm,
4531 		     struct nlattr *tb[],
4532 		     struct net_device *dev,
4533 		     const unsigned char *addr, u16 vid,
4534 		     u16 flags)
4535 {
4536 	int err = -EINVAL;
4537 
4538 	/* If aging addresses are supported device will need to
4539 	 * implement its own handler for this.
4540 	 */
4541 	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
4542 		netdev_info(dev, "default FDB implementation only supports local addresses\n");
4543 		return err;
4544 	}
4545 
4546 	if (tb[NDA_FLAGS_EXT]) {
4547 		netdev_info(dev, "invalid flags given to default FDB implementation\n");
4548 		return err;
4549 	}
4550 
4551 	if (vid) {
4552 		netdev_info(dev, "vlans aren't supported yet for dev_uc|mc_add()\n");
4553 		return err;
4554 	}
4555 
4556 	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
4557 		err = dev_uc_add_excl(dev, addr);
4558 	else if (is_multicast_ether_addr(addr))
4559 		err = dev_mc_add_excl(dev, addr);
4560 
4561 	/* Only return duplicate errors if NLM_F_EXCL is set */
4562 	if (err == -EEXIST && !(flags & NLM_F_EXCL))
4563 		err = 0;
4564 
4565 	return err;
4566 }
4567 EXPORT_SYMBOL(ndo_dflt_fdb_add);
4568 
fdb_vid_parse(struct nlattr * vlan_attr,u16 * p_vid,struct netlink_ext_ack * extack)4569 static int fdb_vid_parse(struct nlattr *vlan_attr, u16 *p_vid,
4570 			 struct netlink_ext_ack *extack)
4571 {
4572 	u16 vid = 0;
4573 
4574 	if (vlan_attr) {
4575 		if (nla_len(vlan_attr) != sizeof(u16)) {
4576 			NL_SET_ERR_MSG(extack, "invalid vlan attribute size");
4577 			return -EINVAL;
4578 		}
4579 
4580 		vid = nla_get_u16(vlan_attr);
4581 
4582 		if (!vid || vid >= VLAN_VID_MASK) {
4583 			NL_SET_ERR_MSG(extack, "invalid vlan id");
4584 			return -EINVAL;
4585 		}
4586 	}
4587 	*p_vid = vid;
4588 	return 0;
4589 }
4590 
rtnl_fdb_add(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4591 static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
4592 			struct netlink_ext_ack *extack)
4593 {
4594 	struct net *net = sock_net(skb->sk);
4595 	struct ndmsg *ndm;
4596 	struct nlattr *tb[NDA_MAX+1];
4597 	struct net_device *dev;
4598 	u8 *addr;
4599 	u16 vid;
4600 	int err;
4601 
4602 	err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX, NULL,
4603 				     extack);
4604 	if (err < 0)
4605 		return err;
4606 
4607 	ndm = nlmsg_data(nlh);
4608 	if (ndm->ndm_ifindex == 0) {
4609 		NL_SET_ERR_MSG(extack, "invalid ifindex");
4610 		return -EINVAL;
4611 	}
4612 
4613 	dev = __dev_get_by_index(net, ndm->ndm_ifindex);
4614 	if (dev == NULL) {
4615 		NL_SET_ERR_MSG(extack, "unknown ifindex");
4616 		return -ENODEV;
4617 	}
4618 
4619 	if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
4620 		NL_SET_ERR_MSG(extack, "invalid address");
4621 		return -EINVAL;
4622 	}
4623 
4624 	if (dev->type != ARPHRD_ETHER) {
4625 		NL_SET_ERR_MSG(extack, "FDB add only supported for Ethernet devices");
4626 		return -EINVAL;
4627 	}
4628 
4629 	addr = nla_data(tb[NDA_LLADDR]);
4630 
4631 	err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
4632 	if (err)
4633 		return err;
4634 
4635 	err = -EOPNOTSUPP;
4636 
4637 	/* Support fdb on master device the net/bridge default case */
4638 	if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
4639 	    netif_is_bridge_port(dev)) {
4640 		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
4641 		const struct net_device_ops *ops = br_dev->netdev_ops;
4642 		bool notified = false;
4643 
4644 		err = ops->ndo_fdb_add(ndm, tb, dev, addr, vid,
4645 				       nlh->nlmsg_flags, &notified, extack);
4646 		if (err)
4647 			goto out;
4648 		else
4649 			ndm->ndm_flags &= ~NTF_MASTER;
4650 	}
4651 
4652 	/* Embedded bridge, macvlan, and any other device support */
4653 	if ((ndm->ndm_flags & NTF_SELF)) {
4654 		bool notified = false;
4655 
4656 		if (dev->netdev_ops->ndo_fdb_add)
4657 			err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
4658 							   vid,
4659 							   nlh->nlmsg_flags,
4660 							   &notified, extack);
4661 		else
4662 			err = ndo_dflt_fdb_add(ndm, tb, dev, addr, vid,
4663 					       nlh->nlmsg_flags);
4664 
4665 		if (!err && !notified) {
4666 			rtnl_fdb_notify(dev, addr, vid, RTM_NEWNEIGH,
4667 					ndm->ndm_state);
4668 			ndm->ndm_flags &= ~NTF_SELF;
4669 		}
4670 	}
4671 out:
4672 	return err;
4673 }
4674 
4675 /*
4676  * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
4677  */
ndo_dflt_fdb_del(struct ndmsg * ndm,struct nlattr * tb[],struct net_device * dev,const unsigned char * addr,u16 vid)4678 int ndo_dflt_fdb_del(struct ndmsg *ndm,
4679 		     struct nlattr *tb[],
4680 		     struct net_device *dev,
4681 		     const unsigned char *addr, u16 vid)
4682 {
4683 	int err = -EINVAL;
4684 
4685 	/* If aging addresses are supported device will need to
4686 	 * implement its own handler for this.
4687 	 */
4688 	if (!(ndm->ndm_state & NUD_PERMANENT)) {
4689 		netdev_info(dev, "default FDB implementation only supports local addresses\n");
4690 		return err;
4691 	}
4692 
4693 	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
4694 		err = dev_uc_del(dev, addr);
4695 	else if (is_multicast_ether_addr(addr))
4696 		err = dev_mc_del(dev, addr);
4697 
4698 	return err;
4699 }
4700 EXPORT_SYMBOL(ndo_dflt_fdb_del);
4701 
rtnl_fdb_del(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)4702 static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
4703 			struct netlink_ext_ack *extack)
4704 {
4705 	bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK);
4706 	struct net *net = sock_net(skb->sk);
4707 	const struct net_device_ops *ops;
4708 	struct ndmsg *ndm;
4709 	struct nlattr *tb[NDA_MAX+1];
4710 	struct net_device *dev;
4711 	__u8 *addr = NULL;
4712 	int err;
4713 	u16 vid;
4714 
4715 	if (!netlink_capable(skb, CAP_NET_ADMIN))
4716 		return -EPERM;
4717 
4718 	if (!del_bulk) {
4719 		err = nlmsg_parse_deprecated(nlh, sizeof(*ndm), tb, NDA_MAX,
4720 					     NULL, extack);
4721 	} else {
4722 		/* For bulk delete, the drivers will parse the message with
4723 		 * policy.
4724 		 */
4725 		err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
4726 	}
4727 	if (err < 0)
4728 		return err;
4729 
4730 	ndm = nlmsg_data(nlh);
4731 	if (ndm->ndm_ifindex == 0) {
4732 		NL_SET_ERR_MSG(extack, "invalid ifindex");
4733 		return -EINVAL;
4734 	}
4735 
4736 	dev = __dev_get_by_index(net, ndm->ndm_ifindex);
4737 	if (dev == NULL) {
4738 		NL_SET_ERR_MSG(extack, "unknown ifindex");
4739 		return -ENODEV;
4740 	}
4741 
4742 	if (!del_bulk) {
4743 		if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
4744 			NL_SET_ERR_MSG(extack, "invalid address");
4745 			return -EINVAL;
4746 		}
4747 		addr = nla_data(tb[NDA_LLADDR]);
4748 
4749 		err = fdb_vid_parse(tb[NDA_VLAN], &vid, extack);
4750 		if (err)
4751 			return err;
4752 	}
4753 
4754 	if (dev->type != ARPHRD_ETHER) {
4755 		NL_SET_ERR_MSG(extack, "FDB delete only supported for Ethernet devices");
4756 		return -EINVAL;
4757 	}
4758 
4759 	err = -EOPNOTSUPP;
4760 
4761 	/* Support fdb on master device the net/bridge default case */
4762 	if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
4763 	    netif_is_bridge_port(dev)) {
4764 		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
4765 		bool notified = false;
4766 
4767 		ops = br_dev->netdev_ops;
4768 		if (!del_bulk) {
4769 			if (ops->ndo_fdb_del)
4770 				err = ops->ndo_fdb_del(ndm, tb, dev, addr, vid,
4771 						       &notified, extack);
4772 		} else {
4773 			if (ops->ndo_fdb_del_bulk)
4774 				err = ops->ndo_fdb_del_bulk(nlh, dev, extack);
4775 		}
4776 
4777 		if (err)
4778 			goto out;
4779 		else
4780 			ndm->ndm_flags &= ~NTF_MASTER;
4781 	}
4782 
4783 	/* Embedded bridge, macvlan, and any other device support */
4784 	if (ndm->ndm_flags & NTF_SELF) {
4785 		bool notified = false;
4786 
4787 		ops = dev->netdev_ops;
4788 		if (!del_bulk) {
4789 			if (ops->ndo_fdb_del)
4790 				err = ops->ndo_fdb_del(ndm, tb, dev, addr, vid,
4791 						       &notified, extack);
4792 			else
4793 				err = ndo_dflt_fdb_del(ndm, tb, dev, addr, vid);
4794 		} else {
4795 			/* in case err was cleared by NTF_MASTER call */
4796 			err = -EOPNOTSUPP;
4797 			if (ops->ndo_fdb_del_bulk)
4798 				err = ops->ndo_fdb_del_bulk(nlh, dev, extack);
4799 		}
4800 
4801 		if (!err) {
4802 			if (!del_bulk && !notified)
4803 				rtnl_fdb_notify(dev, addr, vid, RTM_DELNEIGH,
4804 						ndm->ndm_state);
4805 			ndm->ndm_flags &= ~NTF_SELF;
4806 		}
4807 	}
4808 out:
4809 	return err;
4810 }
4811 
nlmsg_populate_fdb(struct sk_buff * skb,struct netlink_callback * cb,struct net_device * dev,int * idx,struct netdev_hw_addr_list * list)4812 static int nlmsg_populate_fdb(struct sk_buff *skb,
4813 			      struct netlink_callback *cb,
4814 			      struct net_device *dev,
4815 			      int *idx,
4816 			      struct netdev_hw_addr_list *list)
4817 {
4818 	struct ndo_fdb_dump_context *ctx = (void *)cb->ctx;
4819 	struct netdev_hw_addr *ha;
4820 	u32 portid, seq;
4821 	int err;
4822 
4823 	portid = NETLINK_CB(cb->skb).portid;
4824 	seq = cb->nlh->nlmsg_seq;
4825 
4826 	list_for_each_entry(ha, &list->list, list) {
4827 		if (*idx < ctx->fdb_idx)
4828 			goto skip;
4829 
4830 		err = nlmsg_populate_fdb_fill(skb, dev, ha->addr, 0,
4831 					      portid, seq,
4832 					      RTM_NEWNEIGH, NTF_SELF,
4833 					      NLM_F_MULTI, NUD_PERMANENT);
4834 		if (err < 0)
4835 			return err;
4836 skip:
4837 		*idx += 1;
4838 	}
4839 	return 0;
4840 }
4841 
4842 /**
4843  * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
4844  * @skb: socket buffer to store message in
4845  * @cb: netlink callback
4846  * @dev: netdevice
4847  * @filter_dev: ignored
4848  * @idx: the number of FDB table entries dumped is added to *@idx
4849  *
4850  * Default netdevice operation to dump the existing unicast address list.
4851  * Returns number of addresses from list put in skb.
4852  */
ndo_dflt_fdb_dump(struct sk_buff * skb,struct netlink_callback * cb,struct net_device * dev,struct net_device * filter_dev,int * idx)4853 int ndo_dflt_fdb_dump(struct sk_buff *skb,
4854 		      struct netlink_callback *cb,
4855 		      struct net_device *dev,
4856 		      struct net_device *filter_dev,
4857 		      int *idx)
4858 {
4859 	int err;
4860 
4861 	if (dev->type != ARPHRD_ETHER)
4862 		return -EINVAL;
4863 
4864 	netif_addr_lock_bh(dev);
4865 	err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->uc);
4866 	if (err)
4867 		goto out;
4868 	err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->mc);
4869 out:
4870 	netif_addr_unlock_bh(dev);
4871 	return err;
4872 }
4873 EXPORT_SYMBOL(ndo_dflt_fdb_dump);
4874 
valid_fdb_dump_strict(const struct nlmsghdr * nlh,int * br_idx,int * brport_idx,struct netlink_ext_ack * extack)4875 static int valid_fdb_dump_strict(const struct nlmsghdr *nlh,
4876 				 int *br_idx, int *brport_idx,
4877 				 struct netlink_ext_ack *extack)
4878 {
4879 	struct nlattr *tb[NDA_MAX + 1];
4880 	struct ndmsg *ndm;
4881 	int err, i;
4882 
4883 	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) {
4884 		NL_SET_ERR_MSG(extack, "Invalid header for fdb dump request");
4885 		return -EINVAL;
4886 	}
4887 
4888 	ndm = nlmsg_data(nlh);
4889 	if (ndm->ndm_pad1  || ndm->ndm_pad2  || ndm->ndm_state ||
4890 	    ndm->ndm_flags || ndm->ndm_type) {
4891 		NL_SET_ERR_MSG(extack, "Invalid values in header for fdb dump request");
4892 		return -EINVAL;
4893 	}
4894 
4895 	err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb,
4896 					    NDA_MAX, NULL, extack);
4897 	if (err < 0)
4898 		return err;
4899 
4900 	*brport_idx = ndm->ndm_ifindex;
4901 	for (i = 0; i <= NDA_MAX; ++i) {
4902 		if (!tb[i])
4903 			continue;
4904 
4905 		switch (i) {
4906 		case NDA_IFINDEX:
4907 			if (nla_len(tb[i]) != sizeof(u32)) {
4908 				NL_SET_ERR_MSG(extack, "Invalid IFINDEX attribute in fdb dump request");
4909 				return -EINVAL;
4910 			}
4911 			*brport_idx = nla_get_u32(tb[NDA_IFINDEX]);
4912 			break;
4913 		case NDA_MASTER:
4914 			if (nla_len(tb[i]) != sizeof(u32)) {
4915 				NL_SET_ERR_MSG(extack, "Invalid MASTER attribute in fdb dump request");
4916 				return -EINVAL;
4917 			}
4918 			*br_idx = nla_get_u32(tb[NDA_MASTER]);
4919 			break;
4920 		default:
4921 			NL_SET_ERR_MSG(extack, "Unsupported attribute in fdb dump request");
4922 			return -EINVAL;
4923 		}
4924 	}
4925 
4926 	return 0;
4927 }
4928 
valid_fdb_dump_legacy(const struct nlmsghdr * nlh,int * br_idx,int * brport_idx,struct netlink_ext_ack * extack)4929 static int valid_fdb_dump_legacy(const struct nlmsghdr *nlh,
4930 				 int *br_idx, int *brport_idx,
4931 				 struct netlink_ext_ack *extack)
4932 {
4933 	struct nlattr *tb[IFLA_MAX+1];
4934 	int err;
4935 
4936 	/* A hack to preserve kernel<->userspace interface.
4937 	 * Before Linux v4.12 this code accepted ndmsg since iproute2 v3.3.0.
4938 	 * However, ndmsg is shorter than ifinfomsg thus nlmsg_parse() bails.
4939 	 * So, check for ndmsg with an optional u32 attribute (not used here).
4940 	 * Fortunately these sizes don't conflict with the size of ifinfomsg
4941 	 * with an optional attribute.
4942 	 */
4943 	if (nlmsg_len(nlh) != sizeof(struct ndmsg) &&
4944 	    (nlmsg_len(nlh) != sizeof(struct ndmsg) +
4945 	     nla_attr_size(sizeof(u32)))) {
4946 		struct ifinfomsg *ifm;
4947 
4948 		err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg),
4949 					     tb, IFLA_MAX, ifla_policy,
4950 					     extack);
4951 		if (err < 0) {
4952 			return -EINVAL;
4953 		} else if (err == 0) {
4954 			if (tb[IFLA_MASTER])
4955 				*br_idx = nla_get_u32(tb[IFLA_MASTER]);
4956 		}
4957 
4958 		ifm = nlmsg_data(nlh);
4959 		*brport_idx = ifm->ifi_index;
4960 	}
4961 	return 0;
4962 }
4963 
rtnl_fdb_dump(struct sk_buff * skb,struct netlink_callback * cb)4964 static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
4965 {
4966 	const struct net_device_ops *ops = NULL, *cops = NULL;
4967 	struct ndo_fdb_dump_context *ctx = (void *)cb->ctx;
4968 	struct net_device *dev, *br_dev = NULL;
4969 	struct net *net = sock_net(skb->sk);
4970 	int brport_idx = 0;
4971 	int br_idx = 0;
4972 	int fidx = 0;
4973 	int err;
4974 
4975 	NL_ASSERT_CTX_FITS(struct ndo_fdb_dump_context);
4976 
4977 	if (cb->strict_check)
4978 		err = valid_fdb_dump_strict(cb->nlh, &br_idx, &brport_idx,
4979 					    cb->extack);
4980 	else
4981 		err = valid_fdb_dump_legacy(cb->nlh, &br_idx, &brport_idx,
4982 					    cb->extack);
4983 	if (err < 0)
4984 		return err;
4985 
4986 	if (br_idx) {
4987 		br_dev = __dev_get_by_index(net, br_idx);
4988 		if (!br_dev)
4989 			return -ENODEV;
4990 
4991 		ops = br_dev->netdev_ops;
4992 	}
4993 
4994 	for_each_netdev_dump(net, dev, ctx->ifindex) {
4995 		if (brport_idx && (dev->ifindex != brport_idx))
4996 			continue;
4997 
4998 		if (!br_idx) { /* user did not specify a specific bridge */
4999 			if (netif_is_bridge_port(dev)) {
5000 				br_dev = netdev_master_upper_dev_get(dev);
5001 				cops = br_dev->netdev_ops;
5002 			}
5003 		} else {
5004 			if (dev != br_dev &&
5005 			    !netif_is_bridge_port(dev))
5006 				continue;
5007 
5008 			if (br_dev != netdev_master_upper_dev_get(dev) &&
5009 			    !netif_is_bridge_master(dev))
5010 				continue;
5011 			cops = ops;
5012 		}
5013 
5014 		if (netif_is_bridge_port(dev)) {
5015 			if (cops && cops->ndo_fdb_dump) {
5016 				err = cops->ndo_fdb_dump(skb, cb, br_dev, dev,
5017 							&fidx);
5018 				if (err == -EMSGSIZE)
5019 					break;
5020 			}
5021 		}
5022 
5023 		if (dev->netdev_ops->ndo_fdb_dump)
5024 			err = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, NULL,
5025 							    &fidx);
5026 		else
5027 			err = ndo_dflt_fdb_dump(skb, cb, dev, NULL, &fidx);
5028 		if (err == -EMSGSIZE)
5029 			break;
5030 
5031 		cops = NULL;
5032 
5033 		/* reset fdb offset to 0 for rest of the interfaces */
5034 		ctx->fdb_idx = 0;
5035 		fidx = 0;
5036 	}
5037 
5038 	ctx->fdb_idx = fidx;
5039 
5040 	return skb->len;
5041 }
5042 
valid_fdb_get_strict(const struct nlmsghdr * nlh,struct nlattr ** tb,u8 * ndm_flags,int * br_idx,int * brport_idx,u8 ** addr,u16 * vid,struct netlink_ext_ack * extack)5043 static int valid_fdb_get_strict(const struct nlmsghdr *nlh,
5044 				struct nlattr **tb, u8 *ndm_flags,
5045 				int *br_idx, int *brport_idx, u8 **addr,
5046 				u16 *vid, struct netlink_ext_ack *extack)
5047 {
5048 	struct ndmsg *ndm;
5049 	int err, i;
5050 
5051 	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) {
5052 		NL_SET_ERR_MSG(extack, "Invalid header for fdb get request");
5053 		return -EINVAL;
5054 	}
5055 
5056 	ndm = nlmsg_data(nlh);
5057 	if (ndm->ndm_pad1  || ndm->ndm_pad2  || ndm->ndm_state ||
5058 	    ndm->ndm_type) {
5059 		NL_SET_ERR_MSG(extack, "Invalid values in header for fdb get request");
5060 		return -EINVAL;
5061 	}
5062 
5063 	if (ndm->ndm_flags & ~(NTF_MASTER | NTF_SELF)) {
5064 		NL_SET_ERR_MSG(extack, "Invalid flags in header for fdb get request");
5065 		return -EINVAL;
5066 	}
5067 
5068 	err = nlmsg_parse_deprecated_strict(nlh, sizeof(struct ndmsg), tb,
5069 					    NDA_MAX, nda_policy, extack);
5070 	if (err < 0)
5071 		return err;
5072 
5073 	*ndm_flags = ndm->ndm_flags;
5074 	*brport_idx = ndm->ndm_ifindex;
5075 	for (i = 0; i <= NDA_MAX; ++i) {
5076 		if (!tb[i])
5077 			continue;
5078 
5079 		switch (i) {
5080 		case NDA_MASTER:
5081 			*br_idx = nla_get_u32(tb[i]);
5082 			break;
5083 		case NDA_LLADDR:
5084 			if (nla_len(tb[i]) != ETH_ALEN) {
5085 				NL_SET_ERR_MSG(extack, "Invalid address in fdb get request");
5086 				return -EINVAL;
5087 			}
5088 			*addr = nla_data(tb[i]);
5089 			break;
5090 		case NDA_VLAN:
5091 			err = fdb_vid_parse(tb[i], vid, extack);
5092 			if (err)
5093 				return err;
5094 			break;
5095 		case NDA_VNI:
5096 			break;
5097 		default:
5098 			NL_SET_ERR_MSG(extack, "Unsupported attribute in fdb get request");
5099 			return -EINVAL;
5100 		}
5101 	}
5102 
5103 	return 0;
5104 }
5105 
rtnl_fdb_get(struct sk_buff * in_skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)5106 static int rtnl_fdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
5107 			struct netlink_ext_ack *extack)
5108 {
5109 	struct net_device *dev = NULL, *br_dev = NULL;
5110 	const struct net_device_ops *ops = NULL;
5111 	struct net *net = sock_net(in_skb->sk);
5112 	struct nlattr *tb[NDA_MAX + 1];
5113 	struct sk_buff *skb;
5114 	int brport_idx = 0;
5115 	u8 ndm_flags = 0;
5116 	int br_idx = 0;
5117 	u8 *addr = NULL;
5118 	u16 vid = 0;
5119 	int err;
5120 
5121 	err = valid_fdb_get_strict(nlh, tb, &ndm_flags, &br_idx,
5122 				   &brport_idx, &addr, &vid, extack);
5123 	if (err < 0)
5124 		return err;
5125 
5126 	if (!addr) {
5127 		NL_SET_ERR_MSG(extack, "Missing lookup address for fdb get request");
5128 		return -EINVAL;
5129 	}
5130 
5131 	if (brport_idx) {
5132 		dev = __dev_get_by_index(net, brport_idx);
5133 		if (!dev) {
5134 			NL_SET_ERR_MSG(extack, "Unknown device ifindex");
5135 			return -ENODEV;
5136 		}
5137 	}
5138 
5139 	if (br_idx) {
5140 		if (dev) {
5141 			NL_SET_ERR_MSG(extack, "Master and device are mutually exclusive");
5142 			return -EINVAL;
5143 		}
5144 
5145 		br_dev = __dev_get_by_index(net, br_idx);
5146 		if (!br_dev) {
5147 			NL_SET_ERR_MSG(extack, "Invalid master ifindex");
5148 			return -EINVAL;
5149 		}
5150 		ops = br_dev->netdev_ops;
5151 	}
5152 
5153 	if (dev) {
5154 		if (!ndm_flags || (ndm_flags & NTF_MASTER)) {
5155 			if (!netif_is_bridge_port(dev)) {
5156 				NL_SET_ERR_MSG(extack, "Device is not a bridge port");
5157 				return -EINVAL;
5158 			}
5159 			br_dev = netdev_master_upper_dev_get(dev);
5160 			if (!br_dev) {
5161 				NL_SET_ERR_MSG(extack, "Master of device not found");
5162 				return -EINVAL;
5163 			}
5164 			ops = br_dev->netdev_ops;
5165 		} else {
5166 			if (!(ndm_flags & NTF_SELF)) {
5167 				NL_SET_ERR_MSG(extack, "Missing NTF_SELF");
5168 				return -EINVAL;
5169 			}
5170 			ops = dev->netdev_ops;
5171 		}
5172 	}
5173 
5174 	if (!br_dev && !dev) {
5175 		NL_SET_ERR_MSG(extack, "No device specified");
5176 		return -ENODEV;
5177 	}
5178 
5179 	if (!ops || !ops->ndo_fdb_get) {
5180 		NL_SET_ERR_MSG(extack, "Fdb get operation not supported by device");
5181 		return -EOPNOTSUPP;
5182 	}
5183 
5184 	skb = nlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
5185 	if (!skb)
5186 		return -ENOBUFS;
5187 
5188 	if (br_dev)
5189 		dev = br_dev;
5190 	err = ops->ndo_fdb_get(skb, tb, dev, addr, vid,
5191 			       NETLINK_CB(in_skb).portid,
5192 			       nlh->nlmsg_seq, extack);
5193 	if (err)
5194 		goto out;
5195 
5196 	return rtnl_unicast(skb, net, NETLINK_CB(in_skb).portid);
5197 out:
5198 	kfree_skb(skb);
5199 	return err;
5200 }
5201 
brport_nla_put_flag(struct sk_buff * skb,u32 flags,u32 mask,unsigned int attrnum,unsigned int flag)5202 static int brport_nla_put_flag(struct sk_buff *skb, u32 flags, u32 mask,
5203 			       unsigned int attrnum, unsigned int flag)
5204 {
5205 	if (mask & flag)
5206 		return nla_put_u8(skb, attrnum, !!(flags & flag));
5207 	return 0;
5208 }
5209 
ndo_dflt_bridge_getlink(struct sk_buff * skb,u32 pid,u32 seq,struct net_device * dev,u16 mode,u32 flags,u32 mask,int nlflags,u32 filter_mask,int (* vlan_fill)(struct sk_buff * skb,struct net_device * dev,u32 filter_mask))5210 int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
5211 			    struct net_device *dev, u16 mode,
5212 			    u32 flags, u32 mask, int nlflags,
5213 			    u32 filter_mask,
5214 			    int (*vlan_fill)(struct sk_buff *skb,
5215 					     struct net_device *dev,
5216 					     u32 filter_mask))
5217 {
5218 	struct nlmsghdr *nlh;
5219 	struct ifinfomsg *ifm;
5220 	struct nlattr *br_afspec;
5221 	struct nlattr *protinfo;
5222 	u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
5223 	struct net_device *br_dev = netdev_master_upper_dev_get(dev);
5224 	int err = 0;
5225 
5226 	nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags);
5227 	if (nlh == NULL)
5228 		return -EMSGSIZE;
5229 
5230 	ifm = nlmsg_data(nlh);
5231 	ifm->ifi_family = AF_BRIDGE;
5232 	ifm->__ifi_pad = 0;
5233 	ifm->ifi_type = dev->type;
5234 	ifm->ifi_index = dev->ifindex;
5235 	ifm->ifi_flags = dev_get_flags(dev);
5236 	ifm->ifi_change = 0;
5237 
5238 
5239 	if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
5240 	    nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
5241 	    nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
5242 	    (br_dev &&
5243 	     nla_put_u32(skb, IFLA_MASTER, br_dev->ifindex)) ||
5244 	    (dev->addr_len &&
5245 	     nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
5246 	    (dev->ifindex != dev_get_iflink(dev) &&
5247 	     nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))))
5248 		goto nla_put_failure;
5249 
5250 	br_afspec = nla_nest_start_noflag(skb, IFLA_AF_SPEC);
5251 	if (!br_afspec)
5252 		goto nla_put_failure;
5253 
5254 	if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF)) {
5255 		nla_nest_cancel(skb, br_afspec);
5256 		goto nla_put_failure;
5257 	}
5258 
5259 	if (mode != BRIDGE_MODE_UNDEF) {
5260 		if (nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
5261 			nla_nest_cancel(skb, br_afspec);
5262 			goto nla_put_failure;
5263 		}
5264 	}
5265 	if (vlan_fill) {
5266 		err = vlan_fill(skb, dev, filter_mask);
5267 		if (err) {
5268 			nla_nest_cancel(skb, br_afspec);
5269 			goto nla_put_failure;
5270 		}
5271 	}
5272 	nla_nest_end(skb, br_afspec);
5273 
5274 	protinfo = nla_nest_start(skb, IFLA_PROTINFO);
5275 	if (!protinfo)
5276 		goto nla_put_failure;
5277 
5278 	if (brport_nla_put_flag(skb, flags, mask,
5279 				IFLA_BRPORT_MODE, BR_HAIRPIN_MODE) ||
5280 	    brport_nla_put_flag(skb, flags, mask,
5281 				IFLA_BRPORT_GUARD, BR_BPDU_GUARD) ||
5282 	    brport_nla_put_flag(skb, flags, mask,
5283 				IFLA_BRPORT_FAST_LEAVE,
5284 				BR_MULTICAST_FAST_LEAVE) ||
5285 	    brport_nla_put_flag(skb, flags, mask,
5286 				IFLA_BRPORT_PROTECT, BR_ROOT_BLOCK) ||
5287 	    brport_nla_put_flag(skb, flags, mask,
5288 				IFLA_BRPORT_LEARNING, BR_LEARNING) ||
5289 	    brport_nla_put_flag(skb, flags, mask,
5290 				IFLA_BRPORT_LEARNING_SYNC, BR_LEARNING_SYNC) ||
5291 	    brport_nla_put_flag(skb, flags, mask,
5292 				IFLA_BRPORT_UNICAST_FLOOD, BR_FLOOD) ||
5293 	    brport_nla_put_flag(skb, flags, mask,
5294 				IFLA_BRPORT_PROXYARP, BR_PROXYARP) ||
5295 	    brport_nla_put_flag(skb, flags, mask,
5296 				IFLA_BRPORT_MCAST_FLOOD, BR_MCAST_FLOOD) ||
5297 	    brport_nla_put_flag(skb, flags, mask,
5298 				IFLA_BRPORT_BCAST_FLOOD, BR_BCAST_FLOOD)) {
5299 		nla_nest_cancel(skb, protinfo);
5300 		goto nla_put_failure;
5301 	}
5302 
5303 	nla_nest_end(skb, protinfo);
5304 
5305 	nlmsg_end(skb, nlh);
5306 	return 0;
5307 nla_put_failure:
5308 	nlmsg_cancel(skb, nlh);
5309 	return err ? err : -EMSGSIZE;
5310 }
5311 EXPORT_SYMBOL_GPL(ndo_dflt_bridge_getlink);
5312 
valid_bridge_getlink_req(const struct nlmsghdr * nlh,bool strict_check,u32 * filter_mask,struct netlink_ext_ack * extack)5313 static int valid_bridge_getlink_req(const struct nlmsghdr *nlh,
5314 				    bool strict_check, u32 *filter_mask,
5315 				    struct netlink_ext_ack *extack)
5316 {
5317 	struct nlattr *tb[IFLA_MAX+1];
5318 	int err, i;
5319 
5320 	if (strict_check) {
5321 		struct ifinfomsg *ifm;
5322 
5323 		if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifm))) {
5324 			NL_SET_ERR_MSG(extack, "Invalid header for bridge link dump");
5325 			return -EINVAL;
5326 		}
5327 
5328 		ifm = nlmsg_data(nlh);
5329 		if (ifm->__ifi_pad || ifm->ifi_type || ifm->ifi_flags ||
5330 		    ifm->ifi_change || ifm->ifi_index) {
5331 			NL_SET_ERR_MSG(extack, "Invalid values in header for bridge link dump request");
5332 			return -EINVAL;
5333 		}
5334 
5335 		err = nlmsg_parse_deprecated_strict(nlh,
5336 						    sizeof(struct ifinfomsg),
5337 						    tb, IFLA_MAX, ifla_policy,
5338 						    extack);
5339 	} else {
5340 		err = nlmsg_parse_deprecated(nlh, sizeof(struct ifinfomsg),
5341 					     tb, IFLA_MAX, ifla_policy,
5342 					     extack);
5343 	}
5344 	if (err < 0)
5345 		return err;
5346 
5347 	/* new attributes should only be added with strict checking */
5348 	for (i = 0; i <= IFLA_MAX; ++i) {
5349 		if (!tb[i])
5350 			continue;
5351 
5352 		switch (i) {
5353 		case IFLA_EXT_MASK:
5354 			*filter_mask = nla_get_u32(tb[i]);
5355 			break;
5356 		default:
5357 			if (strict_check) {
5358 				NL_SET_ERR_MSG(extack, "Unsupported attribute in bridge link dump request");
5359 				return -EINVAL;
5360 			}
5361 		}
5362 	}
5363 
5364 	return 0;
5365 }
5366 
rtnl_bridge_getlink(struct sk_buff * skb,struct netlink_callback * cb)5367 static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
5368 {
5369 	const struct nlmsghdr *nlh = cb->nlh;
5370 	struct net *net = sock_net(skb->sk);
5371 	struct net_device *dev;
5372 	int idx = 0;
5373 	u32 portid = NETLINK_CB(cb->skb).portid;
5374 	u32 seq = nlh->nlmsg_seq;
5375 	u32 filter_mask = 0;
5376 	int err;
5377 
5378 	err = valid_bridge_getlink_req(nlh, cb->strict_check, &filter_mask,
5379 				       cb->extack);
5380 	if (err < 0 && cb->strict_check)
5381 		return err;
5382 
5383 	rcu_read_lock();
5384 	for_each_netdev_rcu(net, dev) {
5385 		const struct net_device_ops *ops = dev->netdev_ops;
5386 		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
5387 
5388 		if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
5389 			if (idx >= cb->args[0]) {
5390 				err = br_dev->netdev_ops->ndo_bridge_getlink(
5391 						skb, portid, seq, dev,
5392 						filter_mask, NLM_F_MULTI);
5393 				if (err < 0 && err != -EOPNOTSUPP) {
5394 					if (likely(skb->len))
5395 						break;
5396 
5397 					goto out_err;
5398 				}
5399 			}
5400 			idx++;
5401 		}
5402 
5403 		if (ops->ndo_bridge_getlink) {
5404 			if (idx >= cb->args[0]) {
5405 				err = ops->ndo_bridge_getlink(skb, portid,
5406 							      seq, dev,
5407 							      filter_mask,
5408 							      NLM_F_MULTI);
5409 				if (err < 0 && err != -EOPNOTSUPP) {
5410 					if (likely(skb->len))
5411 						break;
5412 
5413 					goto out_err;
5414 				}
5415 			}
5416 			idx++;
5417 		}
5418 	}
5419 	err = skb->len;
5420 out_err:
5421 	rcu_read_unlock();
5422 	cb->args[0] = idx;
5423 
5424 	return err;
5425 }
5426 
bridge_nlmsg_size(void)5427 static inline size_t bridge_nlmsg_size(void)
5428 {
5429 	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
5430 		+ nla_total_size(IFNAMSIZ)	/* IFLA_IFNAME */
5431 		+ nla_total_size(MAX_ADDR_LEN)	/* IFLA_ADDRESS */
5432 		+ nla_total_size(sizeof(u32))	/* IFLA_MASTER */
5433 		+ nla_total_size(sizeof(u32))	/* IFLA_MTU */
5434 		+ nla_total_size(sizeof(u32))	/* IFLA_LINK */
5435 		+ nla_total_size(sizeof(u32))	/* IFLA_OPERSTATE */
5436 		+ nla_total_size(sizeof(u8))	/* IFLA_PROTINFO */
5437 		+ nla_total_size(sizeof(struct nlattr))	/* IFLA_AF_SPEC */
5438 		+ nla_total_size(sizeof(u16))	/* IFLA_BRIDGE_FLAGS */
5439 		+ nla_total_size(sizeof(u16));	/* IFLA_BRIDGE_MODE */
5440 }
5441 
rtnl_bridge_notify(struct net_device * dev)5442 static int rtnl_bridge_notify(struct net_device *dev)
5443 {
5444 	struct net *net = dev_net(dev);
5445 	struct sk_buff *skb;
5446 	int err = -EOPNOTSUPP;
5447 
5448 	if (!dev->netdev_ops->ndo_bridge_getlink)
5449 		return 0;
5450 
5451 	skb = nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC);
5452 	if (!skb) {
5453 		err = -ENOMEM;
5454 		goto errout;
5455 	}
5456 
5457 	err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0, 0);
5458 	if (err < 0)
5459 		goto errout;
5460 
5461 	/* Notification info is only filled for bridge ports, not the bridge
5462 	 * device itself. Therefore, a zero notification length is valid and
5463 	 * should not result in an error.
5464 	 */
5465 	if (!skb->len)
5466 		goto errout;
5467 
5468 	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
5469 	return 0;
5470 errout:
5471 	WARN_ON(err == -EMSGSIZE);
5472 	kfree_skb(skb);
5473 	if (err)
5474 		rtnl_set_sk_err(net, RTNLGRP_LINK, err);
5475 	return err;
5476 }
5477 
rtnl_bridge_setlink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)5478 static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
5479 			       struct netlink_ext_ack *extack)
5480 {
5481 	struct net *net = sock_net(skb->sk);
5482 	struct ifinfomsg *ifm;
5483 	struct net_device *dev;
5484 	struct nlattr *br_spec, *attr, *br_flags_attr = NULL;
5485 	int rem, err = -EOPNOTSUPP;
5486 	u16 flags = 0;
5487 
5488 	if (nlmsg_len(nlh) < sizeof(*ifm))
5489 		return -EINVAL;
5490 
5491 	ifm = nlmsg_data(nlh);
5492 	if (ifm->ifi_family != AF_BRIDGE)
5493 		return -EPFNOSUPPORT;
5494 
5495 	dev = __dev_get_by_index(net, ifm->ifi_index);
5496 	if (!dev) {
5497 		NL_SET_ERR_MSG(extack, "unknown ifindex");
5498 		return -ENODEV;
5499 	}
5500 
5501 	br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
5502 	if (br_spec) {
5503 		nla_for_each_nested(attr, br_spec, rem) {
5504 			if (nla_type(attr) == IFLA_BRIDGE_FLAGS && !br_flags_attr) {
5505 				if (nla_len(attr) < sizeof(flags))
5506 					return -EINVAL;
5507 
5508 				br_flags_attr = attr;
5509 				flags = nla_get_u16(attr);
5510 			}
5511 
5512 			if (nla_type(attr) == IFLA_BRIDGE_MODE) {
5513 				if (nla_len(attr) < sizeof(u16))
5514 					return -EINVAL;
5515 			}
5516 		}
5517 	}
5518 
5519 	if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
5520 		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
5521 
5522 		if (!br_dev || !br_dev->netdev_ops->ndo_bridge_setlink) {
5523 			err = -EOPNOTSUPP;
5524 			goto out;
5525 		}
5526 
5527 		err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags,
5528 							     extack);
5529 		if (err)
5530 			goto out;
5531 
5532 		flags &= ~BRIDGE_FLAGS_MASTER;
5533 	}
5534 
5535 	if ((flags & BRIDGE_FLAGS_SELF)) {
5536 		if (!dev->netdev_ops->ndo_bridge_setlink)
5537 			err = -EOPNOTSUPP;
5538 		else
5539 			err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh,
5540 								  flags,
5541 								  extack);
5542 		if (!err) {
5543 			flags &= ~BRIDGE_FLAGS_SELF;
5544 
5545 			/* Generate event to notify upper layer of bridge
5546 			 * change
5547 			 */
5548 			err = rtnl_bridge_notify(dev);
5549 		}
5550 	}
5551 
5552 	if (br_flags_attr)
5553 		memcpy(nla_data(br_flags_attr), &flags, sizeof(flags));
5554 out:
5555 	return err;
5556 }
5557 
rtnl_bridge_dellink(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)5558 static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh,
5559 			       struct netlink_ext_ack *extack)
5560 {
5561 	struct net *net = sock_net(skb->sk);
5562 	struct ifinfomsg *ifm;
5563 	struct net_device *dev;
5564 	struct nlattr *br_spec, *attr = NULL;
5565 	int rem, err = -EOPNOTSUPP;
5566 	u16 flags = 0;
5567 	bool have_flags = false;
5568 
5569 	if (nlmsg_len(nlh) < sizeof(*ifm))
5570 		return -EINVAL;
5571 
5572 	ifm = nlmsg_data(nlh);
5573 	if (ifm->ifi_family != AF_BRIDGE)
5574 		return -EPFNOSUPPORT;
5575 
5576 	dev = __dev_get_by_index(net, ifm->ifi_index);
5577 	if (!dev) {
5578 		NL_SET_ERR_MSG(extack, "unknown ifindex");
5579 		return -ENODEV;
5580 	}
5581 
5582 	br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
5583 	if (br_spec) {
5584 		nla_for_each_nested_type(attr, IFLA_BRIDGE_FLAGS, br_spec,
5585 					 rem) {
5586 			if (nla_len(attr) < sizeof(flags))
5587 				return -EINVAL;
5588 
5589 			have_flags = true;
5590 			flags = nla_get_u16(attr);
5591 			break;
5592 		}
5593 	}
5594 
5595 	if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
5596 		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
5597 
5598 		if (!br_dev || !br_dev->netdev_ops->ndo_bridge_dellink) {
5599 			err = -EOPNOTSUPP;
5600 			goto out;
5601 		}
5602 
5603 		err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags);
5604 		if (err)
5605 			goto out;
5606 
5607 		flags &= ~BRIDGE_FLAGS_MASTER;
5608 	}
5609 
5610 	if ((flags & BRIDGE_FLAGS_SELF)) {
5611 		if (!dev->netdev_ops->ndo_bridge_dellink)
5612 			err = -EOPNOTSUPP;
5613 		else
5614 			err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh,
5615 								  flags);
5616 
5617 		if (!err) {
5618 			flags &= ~BRIDGE_FLAGS_SELF;
5619 
5620 			/* Generate event to notify upper layer of bridge
5621 			 * change
5622 			 */
5623 			err = rtnl_bridge_notify(dev);
5624 		}
5625 	}
5626 
5627 	if (have_flags)
5628 		memcpy(nla_data(attr), &flags, sizeof(flags));
5629 out:
5630 	return err;
5631 }
5632 
stats_attr_valid(unsigned int mask,int attrid,int idxattr)5633 static bool stats_attr_valid(unsigned int mask, int attrid, int idxattr)
5634 {
5635 	return (mask & IFLA_STATS_FILTER_BIT(attrid)) &&
5636 	       (!idxattr || idxattr == attrid);
5637 }
5638 
5639 static bool
rtnl_offload_xstats_have_ndo(const struct net_device * dev,int attr_id)5640 rtnl_offload_xstats_have_ndo(const struct net_device *dev, int attr_id)
5641 {
5642 	return dev->netdev_ops &&
5643 	       dev->netdev_ops->ndo_has_offload_stats &&
5644 	       dev->netdev_ops->ndo_get_offload_stats &&
5645 	       dev->netdev_ops->ndo_has_offload_stats(dev, attr_id);
5646 }
5647 
5648 static unsigned int
rtnl_offload_xstats_get_size_ndo(const struct net_device * dev,int attr_id)5649 rtnl_offload_xstats_get_size_ndo(const struct net_device *dev, int attr_id)
5650 {
5651 	return rtnl_offload_xstats_have_ndo(dev, attr_id) ?
5652 	       sizeof(struct rtnl_link_stats64) : 0;
5653 }
5654 
5655 static int
rtnl_offload_xstats_fill_ndo(struct net_device * dev,int attr_id,struct sk_buff * skb)5656 rtnl_offload_xstats_fill_ndo(struct net_device *dev, int attr_id,
5657 			     struct sk_buff *skb)
5658 {
5659 	unsigned int size = rtnl_offload_xstats_get_size_ndo(dev, attr_id);
5660 	struct nlattr *attr = NULL;
5661 	void *attr_data;
5662 	int err;
5663 
5664 	if (!size)
5665 		return -ENODATA;
5666 
5667 	attr = nla_reserve_64bit(skb, attr_id, size,
5668 				 IFLA_OFFLOAD_XSTATS_UNSPEC);
5669 	if (!attr)
5670 		return -EMSGSIZE;
5671 
5672 	attr_data = nla_data(attr);
5673 	memset(attr_data, 0, size);
5674 
5675 	err = dev->netdev_ops->ndo_get_offload_stats(attr_id, dev, attr_data);
5676 	if (err)
5677 		return err;
5678 
5679 	return 0;
5680 }
5681 
5682 static unsigned int
rtnl_offload_xstats_get_size_stats(const struct net_device * dev,enum netdev_offload_xstats_type type)5683 rtnl_offload_xstats_get_size_stats(const struct net_device *dev,
5684 				   enum netdev_offload_xstats_type type)
5685 {
5686 	bool enabled = netdev_offload_xstats_enabled(dev, type);
5687 
5688 	return enabled ? sizeof(struct rtnl_hw_stats64) : 0;
5689 }
5690 
5691 struct rtnl_offload_xstats_request_used {
5692 	bool request;
5693 	bool used;
5694 };
5695 
5696 static int
rtnl_offload_xstats_get_stats(struct net_device * dev,enum netdev_offload_xstats_type type,struct rtnl_offload_xstats_request_used * ru,struct rtnl_hw_stats64 * stats,struct netlink_ext_ack * extack)5697 rtnl_offload_xstats_get_stats(struct net_device *dev,
5698 			      enum netdev_offload_xstats_type type,
5699 			      struct rtnl_offload_xstats_request_used *ru,
5700 			      struct rtnl_hw_stats64 *stats,
5701 			      struct netlink_ext_ack *extack)
5702 {
5703 	bool request;
5704 	bool used;
5705 	int err;
5706 
5707 	request = netdev_offload_xstats_enabled(dev, type);
5708 	if (!request) {
5709 		used = false;
5710 		goto out;
5711 	}
5712 
5713 	err = netdev_offload_xstats_get(dev, type, stats, &used, extack);
5714 	if (err)
5715 		return err;
5716 
5717 out:
5718 	if (ru) {
5719 		ru->request = request;
5720 		ru->used = used;
5721 	}
5722 	return 0;
5723 }
5724 
5725 static int
rtnl_offload_xstats_fill_hw_s_info_one(struct sk_buff * skb,int attr_id,struct rtnl_offload_xstats_request_used * ru)5726 rtnl_offload_xstats_fill_hw_s_info_one(struct sk_buff *skb, int attr_id,
5727 				       struct rtnl_offload_xstats_request_used *ru)
5728 {
5729 	struct nlattr *nest;
5730 
5731 	nest = nla_nest_start(skb, attr_id);
5732 	if (!nest)
5733 		return -EMSGSIZE;
5734 
5735 	if (nla_put_u8(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST, ru->request))
5736 		goto nla_put_failure;
5737 
5738 	if (nla_put_u8(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED, ru->used))
5739 		goto nla_put_failure;
5740 
5741 	nla_nest_end(skb, nest);
5742 	return 0;
5743 
5744 nla_put_failure:
5745 	nla_nest_cancel(skb, nest);
5746 	return -EMSGSIZE;
5747 }
5748 
5749 static int
rtnl_offload_xstats_fill_hw_s_info(struct sk_buff * skb,struct net_device * dev,struct netlink_ext_ack * extack)5750 rtnl_offload_xstats_fill_hw_s_info(struct sk_buff *skb, struct net_device *dev,
5751 				   struct netlink_ext_ack *extack)
5752 {
5753 	enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
5754 	struct rtnl_offload_xstats_request_used ru_l3;
5755 	struct nlattr *nest;
5756 	int err;
5757 
5758 	err = rtnl_offload_xstats_get_stats(dev, t_l3, &ru_l3, NULL, extack);
5759 	if (err)
5760 		return err;
5761 
5762 	nest = nla_nest_start(skb, IFLA_OFFLOAD_XSTATS_HW_S_INFO);
5763 	if (!nest)
5764 		return -EMSGSIZE;
5765 
5766 	if (rtnl_offload_xstats_fill_hw_s_info_one(skb,
5767 						   IFLA_OFFLOAD_XSTATS_L3_STATS,
5768 						   &ru_l3))
5769 		goto nla_put_failure;
5770 
5771 	nla_nest_end(skb, nest);
5772 	return 0;
5773 
5774 nla_put_failure:
5775 	nla_nest_cancel(skb, nest);
5776 	return -EMSGSIZE;
5777 }
5778 
rtnl_offload_xstats_fill(struct sk_buff * skb,struct net_device * dev,int * prividx,u32 off_filter_mask,struct netlink_ext_ack * extack)5779 static int rtnl_offload_xstats_fill(struct sk_buff *skb, struct net_device *dev,
5780 				    int *prividx, u32 off_filter_mask,
5781 				    struct netlink_ext_ack *extack)
5782 {
5783 	enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
5784 	int attr_id_hw_s_info = IFLA_OFFLOAD_XSTATS_HW_S_INFO;
5785 	int attr_id_l3_stats = IFLA_OFFLOAD_XSTATS_L3_STATS;
5786 	int attr_id_cpu_hit = IFLA_OFFLOAD_XSTATS_CPU_HIT;
5787 	bool have_data = false;
5788 	int err;
5789 
5790 	if (*prividx <= attr_id_cpu_hit &&
5791 	    (off_filter_mask &
5792 	     IFLA_STATS_FILTER_BIT(attr_id_cpu_hit))) {
5793 		err = rtnl_offload_xstats_fill_ndo(dev, attr_id_cpu_hit, skb);
5794 		if (!err) {
5795 			have_data = true;
5796 		} else if (err != -ENODATA) {
5797 			*prividx = attr_id_cpu_hit;
5798 			return err;
5799 		}
5800 	}
5801 
5802 	if (*prividx <= attr_id_hw_s_info &&
5803 	    (off_filter_mask & IFLA_STATS_FILTER_BIT(attr_id_hw_s_info))) {
5804 		*prividx = attr_id_hw_s_info;
5805 
5806 		err = rtnl_offload_xstats_fill_hw_s_info(skb, dev, extack);
5807 		if (err)
5808 			return err;
5809 
5810 		have_data = true;
5811 		*prividx = 0;
5812 	}
5813 
5814 	if (*prividx <= attr_id_l3_stats &&
5815 	    (off_filter_mask & IFLA_STATS_FILTER_BIT(attr_id_l3_stats))) {
5816 		unsigned int size_l3;
5817 		struct nlattr *attr;
5818 
5819 		*prividx = attr_id_l3_stats;
5820 
5821 		size_l3 = rtnl_offload_xstats_get_size_stats(dev, t_l3);
5822 		if (!size_l3)
5823 			goto skip_l3_stats;
5824 		attr = nla_reserve_64bit(skb, attr_id_l3_stats, size_l3,
5825 					 IFLA_OFFLOAD_XSTATS_UNSPEC);
5826 		if (!attr)
5827 			return -EMSGSIZE;
5828 
5829 		err = rtnl_offload_xstats_get_stats(dev, t_l3, NULL,
5830 						    nla_data(attr), extack);
5831 		if (err)
5832 			return err;
5833 
5834 		have_data = true;
5835 skip_l3_stats:
5836 		*prividx = 0;
5837 	}
5838 
5839 	if (!have_data)
5840 		return -ENODATA;
5841 
5842 	*prividx = 0;
5843 	return 0;
5844 }
5845 
5846 static unsigned int
rtnl_offload_xstats_get_size_hw_s_info_one(const struct net_device * dev,enum netdev_offload_xstats_type type)5847 rtnl_offload_xstats_get_size_hw_s_info_one(const struct net_device *dev,
5848 					   enum netdev_offload_xstats_type type)
5849 {
5850 	return nla_total_size(0) +
5851 		/* IFLA_OFFLOAD_XSTATS_HW_S_INFO_REQUEST */
5852 		nla_total_size(sizeof(u8)) +
5853 		/* IFLA_OFFLOAD_XSTATS_HW_S_INFO_USED */
5854 		nla_total_size(sizeof(u8)) +
5855 		0;
5856 }
5857 
5858 static unsigned int
rtnl_offload_xstats_get_size_hw_s_info(const struct net_device * dev)5859 rtnl_offload_xstats_get_size_hw_s_info(const struct net_device *dev)
5860 {
5861 	enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
5862 
5863 	return nla_total_size(0) +
5864 		/* IFLA_OFFLOAD_XSTATS_L3_STATS */
5865 		rtnl_offload_xstats_get_size_hw_s_info_one(dev, t_l3) +
5866 		0;
5867 }
5868 
rtnl_offload_xstats_get_size(const struct net_device * dev,u32 off_filter_mask)5869 static int rtnl_offload_xstats_get_size(const struct net_device *dev,
5870 					u32 off_filter_mask)
5871 {
5872 	enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
5873 	int attr_id_cpu_hit = IFLA_OFFLOAD_XSTATS_CPU_HIT;
5874 	int nla_size = 0;
5875 	int size;
5876 
5877 	if (off_filter_mask &
5878 	    IFLA_STATS_FILTER_BIT(attr_id_cpu_hit)) {
5879 		size = rtnl_offload_xstats_get_size_ndo(dev, attr_id_cpu_hit);
5880 		nla_size += nla_total_size_64bit(size);
5881 	}
5882 
5883 	if (off_filter_mask &
5884 	    IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO))
5885 		nla_size += rtnl_offload_xstats_get_size_hw_s_info(dev);
5886 
5887 	if (off_filter_mask &
5888 	    IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_L3_STATS)) {
5889 		size = rtnl_offload_xstats_get_size_stats(dev, t_l3);
5890 		nla_size += nla_total_size_64bit(size);
5891 	}
5892 
5893 	if (nla_size != 0)
5894 		nla_size += nla_total_size(0);
5895 
5896 	return nla_size;
5897 }
5898 
5899 struct rtnl_stats_dump_filters {
5900 	/* mask[0] filters outer attributes. Then individual nests have their
5901 	 * filtering mask at the index of the nested attribute.
5902 	 */
5903 	u32 mask[IFLA_STATS_MAX + 1];
5904 };
5905 
rtnl_fill_statsinfo(struct sk_buff * skb,struct net_device * dev,int type,u32 pid,u32 seq,u32 change,unsigned int flags,const struct rtnl_stats_dump_filters * filters,int * idxattr,int * prividx,struct netlink_ext_ack * extack)5906 static int rtnl_fill_statsinfo(struct sk_buff *skb, struct net_device *dev,
5907 			       int type, u32 pid, u32 seq, u32 change,
5908 			       unsigned int flags,
5909 			       const struct rtnl_stats_dump_filters *filters,
5910 			       int *idxattr, int *prividx,
5911 			       struct netlink_ext_ack *extack)
5912 {
5913 	unsigned int filter_mask = filters->mask[0];
5914 	struct if_stats_msg *ifsm;
5915 	struct nlmsghdr *nlh;
5916 	struct nlattr *attr;
5917 	int s_prividx = *prividx;
5918 	int err;
5919 
5920 	ASSERT_RTNL();
5921 
5922 	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags);
5923 	if (!nlh)
5924 		return -EMSGSIZE;
5925 
5926 	ifsm = nlmsg_data(nlh);
5927 	ifsm->family = PF_UNSPEC;
5928 	ifsm->pad1 = 0;
5929 	ifsm->pad2 = 0;
5930 	ifsm->ifindex = dev->ifindex;
5931 	ifsm->filter_mask = filter_mask;
5932 
5933 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, *idxattr)) {
5934 		struct rtnl_link_stats64 *sp;
5935 
5936 		attr = nla_reserve_64bit(skb, IFLA_STATS_LINK_64,
5937 					 sizeof(struct rtnl_link_stats64),
5938 					 IFLA_STATS_UNSPEC);
5939 		if (!attr) {
5940 			err = -EMSGSIZE;
5941 			goto nla_put_failure;
5942 		}
5943 
5944 		sp = nla_data(attr);
5945 		dev_get_stats(dev, sp);
5946 	}
5947 
5948 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, *idxattr)) {
5949 		const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
5950 
5951 		if (ops && ops->fill_linkxstats) {
5952 			*idxattr = IFLA_STATS_LINK_XSTATS;
5953 			attr = nla_nest_start_noflag(skb,
5954 						     IFLA_STATS_LINK_XSTATS);
5955 			if (!attr) {
5956 				err = -EMSGSIZE;
5957 				goto nla_put_failure;
5958 			}
5959 
5960 			err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
5961 			nla_nest_end(skb, attr);
5962 			if (err)
5963 				goto nla_put_failure;
5964 			*idxattr = 0;
5965 		}
5966 	}
5967 
5968 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE,
5969 			     *idxattr)) {
5970 		const struct rtnl_link_ops *ops = NULL;
5971 		const struct net_device *master;
5972 
5973 		master = netdev_master_upper_dev_get(dev);
5974 		if (master)
5975 			ops = master->rtnl_link_ops;
5976 		if (ops && ops->fill_linkxstats) {
5977 			*idxattr = IFLA_STATS_LINK_XSTATS_SLAVE;
5978 			attr = nla_nest_start_noflag(skb,
5979 						     IFLA_STATS_LINK_XSTATS_SLAVE);
5980 			if (!attr) {
5981 				err = -EMSGSIZE;
5982 				goto nla_put_failure;
5983 			}
5984 
5985 			err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
5986 			nla_nest_end(skb, attr);
5987 			if (err)
5988 				goto nla_put_failure;
5989 			*idxattr = 0;
5990 		}
5991 	}
5992 
5993 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS,
5994 			     *idxattr)) {
5995 		u32 off_filter_mask;
5996 
5997 		off_filter_mask = filters->mask[IFLA_STATS_LINK_OFFLOAD_XSTATS];
5998 		*idxattr = IFLA_STATS_LINK_OFFLOAD_XSTATS;
5999 		attr = nla_nest_start_noflag(skb,
6000 					     IFLA_STATS_LINK_OFFLOAD_XSTATS);
6001 		if (!attr) {
6002 			err = -EMSGSIZE;
6003 			goto nla_put_failure;
6004 		}
6005 
6006 		err = rtnl_offload_xstats_fill(skb, dev, prividx,
6007 					       off_filter_mask, extack);
6008 		if (err == -ENODATA)
6009 			nla_nest_cancel(skb, attr);
6010 		else
6011 			nla_nest_end(skb, attr);
6012 
6013 		if (err && err != -ENODATA)
6014 			goto nla_put_failure;
6015 		*idxattr = 0;
6016 	}
6017 
6018 	if (stats_attr_valid(filter_mask, IFLA_STATS_AF_SPEC, *idxattr)) {
6019 		struct rtnl_af_ops *af_ops;
6020 
6021 		*idxattr = IFLA_STATS_AF_SPEC;
6022 		attr = nla_nest_start_noflag(skb, IFLA_STATS_AF_SPEC);
6023 		if (!attr) {
6024 			err = -EMSGSIZE;
6025 			goto nla_put_failure;
6026 		}
6027 
6028 		rcu_read_lock();
6029 		list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
6030 			if (af_ops->fill_stats_af) {
6031 				struct nlattr *af;
6032 
6033 				af = nla_nest_start_noflag(skb,
6034 							   af_ops->family);
6035 				if (!af) {
6036 					rcu_read_unlock();
6037 					err = -EMSGSIZE;
6038 					goto nla_put_failure;
6039 				}
6040 				err = af_ops->fill_stats_af(skb, dev);
6041 
6042 				if (err == -ENODATA) {
6043 					nla_nest_cancel(skb, af);
6044 				} else if (err < 0) {
6045 					rcu_read_unlock();
6046 					goto nla_put_failure;
6047 				}
6048 
6049 				nla_nest_end(skb, af);
6050 			}
6051 		}
6052 		rcu_read_unlock();
6053 
6054 		nla_nest_end(skb, attr);
6055 
6056 		*idxattr = 0;
6057 	}
6058 
6059 	nlmsg_end(skb, nlh);
6060 
6061 	return 0;
6062 
6063 nla_put_failure:
6064 	/* not a multi message or no progress mean a real error */
6065 	if (!(flags & NLM_F_MULTI) || s_prividx == *prividx)
6066 		nlmsg_cancel(skb, nlh);
6067 	else
6068 		nlmsg_end(skb, nlh);
6069 
6070 	return err;
6071 }
6072 
if_nlmsg_stats_size(const struct net_device * dev,const struct rtnl_stats_dump_filters * filters)6073 static size_t if_nlmsg_stats_size(const struct net_device *dev,
6074 				  const struct rtnl_stats_dump_filters *filters)
6075 {
6076 	size_t size = NLMSG_ALIGN(sizeof(struct if_stats_msg));
6077 	unsigned int filter_mask = filters->mask[0];
6078 
6079 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, 0))
6080 		size += nla_total_size_64bit(sizeof(struct rtnl_link_stats64));
6081 
6082 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, 0)) {
6083 		const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
6084 		int attr = IFLA_STATS_LINK_XSTATS;
6085 
6086 		if (ops && ops->get_linkxstats_size) {
6087 			size += nla_total_size(ops->get_linkxstats_size(dev,
6088 									attr));
6089 			/* for IFLA_STATS_LINK_XSTATS */
6090 			size += nla_total_size(0);
6091 		}
6092 	}
6093 
6094 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE, 0)) {
6095 		struct net_device *_dev = (struct net_device *)dev;
6096 		const struct rtnl_link_ops *ops = NULL;
6097 		const struct net_device *master;
6098 
6099 		/* netdev_master_upper_dev_get can't take const */
6100 		master = netdev_master_upper_dev_get(_dev);
6101 		if (master)
6102 			ops = master->rtnl_link_ops;
6103 		if (ops && ops->get_linkxstats_size) {
6104 			int attr = IFLA_STATS_LINK_XSTATS_SLAVE;
6105 
6106 			size += nla_total_size(ops->get_linkxstats_size(dev,
6107 									attr));
6108 			/* for IFLA_STATS_LINK_XSTATS_SLAVE */
6109 			size += nla_total_size(0);
6110 		}
6111 	}
6112 
6113 	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS, 0)) {
6114 		u32 off_filter_mask;
6115 
6116 		off_filter_mask = filters->mask[IFLA_STATS_LINK_OFFLOAD_XSTATS];
6117 		size += rtnl_offload_xstats_get_size(dev, off_filter_mask);
6118 	}
6119 
6120 	if (stats_attr_valid(filter_mask, IFLA_STATS_AF_SPEC, 0)) {
6121 		struct rtnl_af_ops *af_ops;
6122 
6123 		/* for IFLA_STATS_AF_SPEC */
6124 		size += nla_total_size(0);
6125 
6126 		rcu_read_lock();
6127 		list_for_each_entry_rcu(af_ops, &rtnl_af_ops, list) {
6128 			if (af_ops->get_stats_af_size) {
6129 				size += nla_total_size(
6130 					af_ops->get_stats_af_size(dev));
6131 
6132 				/* for AF_* */
6133 				size += nla_total_size(0);
6134 			}
6135 		}
6136 		rcu_read_unlock();
6137 	}
6138 
6139 	return size;
6140 }
6141 
6142 #define RTNL_STATS_OFFLOAD_XSTATS_VALID ((1 << __IFLA_OFFLOAD_XSTATS_MAX) - 1)
6143 
6144 static const struct nla_policy
6145 rtnl_stats_get_policy_filters[IFLA_STATS_MAX + 1] = {
6146 	[IFLA_STATS_LINK_OFFLOAD_XSTATS] =
6147 		    NLA_POLICY_MASK(NLA_U32, RTNL_STATS_OFFLOAD_XSTATS_VALID),
6148 };
6149 
6150 static const struct nla_policy
6151 rtnl_stats_get_policy[IFLA_STATS_GETSET_MAX + 1] = {
6152 	[IFLA_STATS_GET_FILTERS] =
6153 		    NLA_POLICY_NESTED(rtnl_stats_get_policy_filters),
6154 };
6155 
6156 static const struct nla_policy
6157 ifla_stats_set_policy[IFLA_STATS_GETSET_MAX + 1] = {
6158 	[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS] = NLA_POLICY_MAX(NLA_U8, 1),
6159 };
6160 
rtnl_stats_get_parse_filters(struct nlattr * ifla_filters,struct rtnl_stats_dump_filters * filters,struct netlink_ext_ack * extack)6161 static int rtnl_stats_get_parse_filters(struct nlattr *ifla_filters,
6162 					struct rtnl_stats_dump_filters *filters,
6163 					struct netlink_ext_ack *extack)
6164 {
6165 	struct nlattr *tb[IFLA_STATS_MAX + 1];
6166 	int err;
6167 	int at;
6168 
6169 	err = nla_parse_nested(tb, IFLA_STATS_MAX, ifla_filters,
6170 			       rtnl_stats_get_policy_filters, extack);
6171 	if (err < 0)
6172 		return err;
6173 
6174 	for (at = 1; at <= IFLA_STATS_MAX; at++) {
6175 		if (tb[at]) {
6176 			if (!(filters->mask[0] & IFLA_STATS_FILTER_BIT(at))) {
6177 				NL_SET_ERR_MSG(extack, "Filtered attribute not enabled in filter_mask");
6178 				return -EINVAL;
6179 			}
6180 			filters->mask[at] = nla_get_u32(tb[at]);
6181 		}
6182 	}
6183 
6184 	return 0;
6185 }
6186 
rtnl_stats_get_parse(const struct nlmsghdr * nlh,u32 filter_mask,struct rtnl_stats_dump_filters * filters,struct netlink_ext_ack * extack)6187 static int rtnl_stats_get_parse(const struct nlmsghdr *nlh,
6188 				u32 filter_mask,
6189 				struct rtnl_stats_dump_filters *filters,
6190 				struct netlink_ext_ack *extack)
6191 {
6192 	struct nlattr *tb[IFLA_STATS_GETSET_MAX + 1];
6193 	int err;
6194 	int i;
6195 
6196 	filters->mask[0] = filter_mask;
6197 	for (i = 1; i < ARRAY_SIZE(filters->mask); i++)
6198 		filters->mask[i] = -1U;
6199 
6200 	err = nlmsg_parse(nlh, sizeof(struct if_stats_msg), tb,
6201 			  IFLA_STATS_GETSET_MAX, rtnl_stats_get_policy, extack);
6202 	if (err < 0)
6203 		return err;
6204 
6205 	if (tb[IFLA_STATS_GET_FILTERS]) {
6206 		err = rtnl_stats_get_parse_filters(tb[IFLA_STATS_GET_FILTERS],
6207 						   filters, extack);
6208 		if (err)
6209 			return err;
6210 	}
6211 
6212 	return 0;
6213 }
6214 
rtnl_valid_stats_req(const struct nlmsghdr * nlh,bool strict_check,bool is_dump,struct netlink_ext_ack * extack)6215 static int rtnl_valid_stats_req(const struct nlmsghdr *nlh, bool strict_check,
6216 				bool is_dump, struct netlink_ext_ack *extack)
6217 {
6218 	struct if_stats_msg *ifsm;
6219 
6220 	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ifsm))) {
6221 		NL_SET_ERR_MSG(extack, "Invalid header for stats dump");
6222 		return -EINVAL;
6223 	}
6224 
6225 	if (!strict_check)
6226 		return 0;
6227 
6228 	ifsm = nlmsg_data(nlh);
6229 
6230 	/* only requests using strict checks can pass data to influence
6231 	 * the dump. The legacy exception is filter_mask.
6232 	 */
6233 	if (ifsm->pad1 || ifsm->pad2 || (is_dump && ifsm->ifindex)) {
6234 		NL_SET_ERR_MSG(extack, "Invalid values in header for stats dump request");
6235 		return -EINVAL;
6236 	}
6237 	if (ifsm->filter_mask >= IFLA_STATS_FILTER_BIT(IFLA_STATS_MAX + 1)) {
6238 		NL_SET_ERR_MSG(extack, "Invalid stats requested through filter mask");
6239 		return -EINVAL;
6240 	}
6241 
6242 	return 0;
6243 }
6244 
rtnl_stats_get(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6245 static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh,
6246 			  struct netlink_ext_ack *extack)
6247 {
6248 	struct rtnl_stats_dump_filters filters;
6249 	struct net *net = sock_net(skb->sk);
6250 	struct net_device *dev = NULL;
6251 	int idxattr = 0, prividx = 0;
6252 	struct if_stats_msg *ifsm;
6253 	struct sk_buff *nskb;
6254 	int err;
6255 
6256 	err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb),
6257 				   false, extack);
6258 	if (err)
6259 		return err;
6260 
6261 	ifsm = nlmsg_data(nlh);
6262 	if (ifsm->ifindex > 0)
6263 		dev = __dev_get_by_index(net, ifsm->ifindex);
6264 	else
6265 		return -EINVAL;
6266 
6267 	if (!dev)
6268 		return -ENODEV;
6269 
6270 	if (!ifsm->filter_mask) {
6271 		NL_SET_ERR_MSG(extack, "Filter mask must be set for stats get");
6272 		return -EINVAL;
6273 	}
6274 
6275 	err = rtnl_stats_get_parse(nlh, ifsm->filter_mask, &filters, extack);
6276 	if (err)
6277 		return err;
6278 
6279 	nskb = nlmsg_new(if_nlmsg_stats_size(dev, &filters), GFP_KERNEL);
6280 	if (!nskb)
6281 		return -ENOBUFS;
6282 
6283 	err = rtnl_fill_statsinfo(nskb, dev, RTM_NEWSTATS,
6284 				  NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0,
6285 				  0, &filters, &idxattr, &prividx, extack);
6286 	if (err < 0) {
6287 		/* -EMSGSIZE implies BUG in if_nlmsg_stats_size */
6288 		WARN_ON(err == -EMSGSIZE);
6289 		kfree_skb(nskb);
6290 	} else {
6291 		err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
6292 	}
6293 
6294 	return err;
6295 }
6296 
rtnl_stats_dump(struct sk_buff * skb,struct netlink_callback * cb)6297 static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
6298 {
6299 	struct netlink_ext_ack *extack = cb->extack;
6300 	struct rtnl_stats_dump_filters filters;
6301 	struct net *net = sock_net(skb->sk);
6302 	unsigned int flags = NLM_F_MULTI;
6303 	struct if_stats_msg *ifsm;
6304 	struct {
6305 		unsigned long ifindex;
6306 		int idxattr;
6307 		int prividx;
6308 	} *ctx = (void *)cb->ctx;
6309 	struct net_device *dev;
6310 	int err;
6311 
6312 	cb->seq = net->dev_base_seq;
6313 
6314 	err = rtnl_valid_stats_req(cb->nlh, cb->strict_check, true, extack);
6315 	if (err)
6316 		return err;
6317 
6318 	ifsm = nlmsg_data(cb->nlh);
6319 	if (!ifsm->filter_mask) {
6320 		NL_SET_ERR_MSG(extack, "Filter mask must be set for stats dump");
6321 		return -EINVAL;
6322 	}
6323 
6324 	err = rtnl_stats_get_parse(cb->nlh, ifsm->filter_mask, &filters,
6325 				   extack);
6326 	if (err)
6327 		return err;
6328 
6329 	for_each_netdev_dump(net, dev, ctx->ifindex) {
6330 		err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS,
6331 					  NETLINK_CB(cb->skb).portid,
6332 					  cb->nlh->nlmsg_seq, 0,
6333 					  flags, &filters,
6334 					  &ctx->idxattr, &ctx->prividx,
6335 					  extack);
6336 		/* If we ran out of room on the first message,
6337 		 * we're in trouble.
6338 		 */
6339 		WARN_ON((err == -EMSGSIZE) && (skb->len == 0));
6340 
6341 		if (err < 0)
6342 			break;
6343 		ctx->prividx = 0;
6344 		ctx->idxattr = 0;
6345 		nl_dump_check_consistent(cb, nlmsg_hdr(skb));
6346 	}
6347 
6348 	return err;
6349 }
6350 
rtnl_offload_xstats_notify(struct net_device * dev)6351 void rtnl_offload_xstats_notify(struct net_device *dev)
6352 {
6353 	struct rtnl_stats_dump_filters response_filters = {};
6354 	struct net *net = dev_net(dev);
6355 	int idxattr = 0, prividx = 0;
6356 	struct sk_buff *skb;
6357 	int err = -ENOBUFS;
6358 
6359 	ASSERT_RTNL();
6360 
6361 	response_filters.mask[0] |=
6362 		IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS);
6363 	response_filters.mask[IFLA_STATS_LINK_OFFLOAD_XSTATS] |=
6364 		IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO);
6365 
6366 	skb = nlmsg_new(if_nlmsg_stats_size(dev, &response_filters),
6367 			GFP_KERNEL);
6368 	if (!skb)
6369 		goto errout;
6370 
6371 	err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS, 0, 0, 0, 0,
6372 				  &response_filters, &idxattr, &prividx, NULL);
6373 	if (err < 0) {
6374 		kfree_skb(skb);
6375 		goto errout;
6376 	}
6377 
6378 	rtnl_notify(skb, net, 0, RTNLGRP_STATS, NULL, GFP_KERNEL);
6379 	return;
6380 
6381 errout:
6382 	rtnl_set_sk_err(net, RTNLGRP_STATS, err);
6383 }
6384 EXPORT_SYMBOL(rtnl_offload_xstats_notify);
6385 
rtnl_stats_set(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6386 static int rtnl_stats_set(struct sk_buff *skb, struct nlmsghdr *nlh,
6387 			  struct netlink_ext_ack *extack)
6388 {
6389 	enum netdev_offload_xstats_type t_l3 = NETDEV_OFFLOAD_XSTATS_TYPE_L3;
6390 	struct rtnl_stats_dump_filters response_filters = {};
6391 	struct nlattr *tb[IFLA_STATS_GETSET_MAX + 1];
6392 	struct net *net = sock_net(skb->sk);
6393 	struct net_device *dev = NULL;
6394 	struct if_stats_msg *ifsm;
6395 	bool notify = false;
6396 	int err;
6397 
6398 	err = rtnl_valid_stats_req(nlh, netlink_strict_get_check(skb),
6399 				   false, extack);
6400 	if (err)
6401 		return err;
6402 
6403 	ifsm = nlmsg_data(nlh);
6404 	if (ifsm->family != AF_UNSPEC) {
6405 		NL_SET_ERR_MSG(extack, "Address family should be AF_UNSPEC");
6406 		return -EINVAL;
6407 	}
6408 
6409 	if (ifsm->ifindex > 0)
6410 		dev = __dev_get_by_index(net, ifsm->ifindex);
6411 	else
6412 		return -EINVAL;
6413 
6414 	if (!dev)
6415 		return -ENODEV;
6416 
6417 	if (ifsm->filter_mask) {
6418 		NL_SET_ERR_MSG(extack, "Filter mask must be 0 for stats set");
6419 		return -EINVAL;
6420 	}
6421 
6422 	err = nlmsg_parse(nlh, sizeof(*ifsm), tb, IFLA_STATS_GETSET_MAX,
6423 			  ifla_stats_set_policy, extack);
6424 	if (err < 0)
6425 		return err;
6426 
6427 	if (tb[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS]) {
6428 		u8 req = nla_get_u8(tb[IFLA_STATS_SET_OFFLOAD_XSTATS_L3_STATS]);
6429 
6430 		if (req)
6431 			err = netdev_offload_xstats_enable(dev, t_l3, extack);
6432 		else
6433 			err = netdev_offload_xstats_disable(dev, t_l3);
6434 
6435 		if (!err)
6436 			notify = true;
6437 		else if (err != -EALREADY)
6438 			return err;
6439 
6440 		response_filters.mask[0] |=
6441 			IFLA_STATS_FILTER_BIT(IFLA_STATS_LINK_OFFLOAD_XSTATS);
6442 		response_filters.mask[IFLA_STATS_LINK_OFFLOAD_XSTATS] |=
6443 			IFLA_STATS_FILTER_BIT(IFLA_OFFLOAD_XSTATS_HW_S_INFO);
6444 	}
6445 
6446 	if (notify)
6447 		rtnl_offload_xstats_notify(dev);
6448 
6449 	return 0;
6450 }
6451 
rtnl_mdb_valid_dump_req(const struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6452 static int rtnl_mdb_valid_dump_req(const struct nlmsghdr *nlh,
6453 				   struct netlink_ext_ack *extack)
6454 {
6455 	struct br_port_msg *bpm;
6456 
6457 	if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*bpm))) {
6458 		NL_SET_ERR_MSG(extack, "Invalid header for mdb dump request");
6459 		return -EINVAL;
6460 	}
6461 
6462 	bpm = nlmsg_data(nlh);
6463 	if (bpm->ifindex) {
6464 		NL_SET_ERR_MSG(extack, "Filtering by device index is not supported for mdb dump request");
6465 		return -EINVAL;
6466 	}
6467 	if (nlmsg_attrlen(nlh, sizeof(*bpm))) {
6468 		NL_SET_ERR_MSG(extack, "Invalid data after header in mdb dump request");
6469 		return -EINVAL;
6470 	}
6471 
6472 	return 0;
6473 }
6474 
6475 struct rtnl_mdb_dump_ctx {
6476 	long idx;
6477 };
6478 
rtnl_mdb_dump(struct sk_buff * skb,struct netlink_callback * cb)6479 static int rtnl_mdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
6480 {
6481 	struct rtnl_mdb_dump_ctx *ctx = (void *)cb->ctx;
6482 	struct net *net = sock_net(skb->sk);
6483 	struct net_device *dev;
6484 	int idx, s_idx;
6485 	int err;
6486 
6487 	NL_ASSERT_CTX_FITS(struct rtnl_mdb_dump_ctx);
6488 
6489 	if (cb->strict_check) {
6490 		err = rtnl_mdb_valid_dump_req(cb->nlh, cb->extack);
6491 		if (err)
6492 			return err;
6493 	}
6494 
6495 	s_idx = ctx->idx;
6496 	idx = 0;
6497 
6498 	for_each_netdev(net, dev) {
6499 		if (idx < s_idx)
6500 			goto skip;
6501 		if (!dev->netdev_ops->ndo_mdb_dump)
6502 			goto skip;
6503 
6504 		err = dev->netdev_ops->ndo_mdb_dump(dev, skb, cb);
6505 		if (err == -EMSGSIZE)
6506 			goto out;
6507 		/* Moving on to next device, reset markers and sequence
6508 		 * counters since they are all maintained per-device.
6509 		 */
6510 		memset(cb->ctx, 0, sizeof(cb->ctx));
6511 		cb->prev_seq = 0;
6512 		cb->seq = 0;
6513 skip:
6514 		idx++;
6515 	}
6516 
6517 out:
6518 	ctx->idx = idx;
6519 	return skb->len;
6520 }
6521 
rtnl_validate_mdb_entry_get(const struct nlattr * attr,struct netlink_ext_ack * extack)6522 static int rtnl_validate_mdb_entry_get(const struct nlattr *attr,
6523 				       struct netlink_ext_ack *extack)
6524 {
6525 	struct br_mdb_entry *entry = nla_data(attr);
6526 
6527 	if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
6528 		NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
6529 		return -EINVAL;
6530 	}
6531 
6532 	if (entry->ifindex) {
6533 		NL_SET_ERR_MSG(extack, "Entry ifindex cannot be specified");
6534 		return -EINVAL;
6535 	}
6536 
6537 	if (entry->state) {
6538 		NL_SET_ERR_MSG(extack, "Entry state cannot be specified");
6539 		return -EINVAL;
6540 	}
6541 
6542 	if (entry->flags) {
6543 		NL_SET_ERR_MSG(extack, "Entry flags cannot be specified");
6544 		return -EINVAL;
6545 	}
6546 
6547 	if (entry->vid >= VLAN_VID_MASK) {
6548 		NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
6549 		return -EINVAL;
6550 	}
6551 
6552 	if (entry->addr.proto != htons(ETH_P_IP) &&
6553 	    entry->addr.proto != htons(ETH_P_IPV6) &&
6554 	    entry->addr.proto != 0) {
6555 		NL_SET_ERR_MSG(extack, "Unknown entry protocol");
6556 		return -EINVAL;
6557 	}
6558 
6559 	return 0;
6560 }
6561 
6562 static const struct nla_policy mdba_get_policy[MDBA_GET_ENTRY_MAX + 1] = {
6563 	[MDBA_GET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
6564 						  rtnl_validate_mdb_entry_get,
6565 						  sizeof(struct br_mdb_entry)),
6566 	[MDBA_GET_ENTRY_ATTRS] = { .type = NLA_NESTED },
6567 };
6568 
rtnl_mdb_get(struct sk_buff * in_skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6569 static int rtnl_mdb_get(struct sk_buff *in_skb, struct nlmsghdr *nlh,
6570 			struct netlink_ext_ack *extack)
6571 {
6572 	struct nlattr *tb[MDBA_GET_ENTRY_MAX + 1];
6573 	struct net *net = sock_net(in_skb->sk);
6574 	struct br_port_msg *bpm;
6575 	struct net_device *dev;
6576 	int err;
6577 
6578 	err = nlmsg_parse(nlh, sizeof(struct br_port_msg), tb,
6579 			  MDBA_GET_ENTRY_MAX, mdba_get_policy, extack);
6580 	if (err)
6581 		return err;
6582 
6583 	bpm = nlmsg_data(nlh);
6584 	if (!bpm->ifindex) {
6585 		NL_SET_ERR_MSG(extack, "Invalid ifindex");
6586 		return -EINVAL;
6587 	}
6588 
6589 	dev = __dev_get_by_index(net, bpm->ifindex);
6590 	if (!dev) {
6591 		NL_SET_ERR_MSG(extack, "Device doesn't exist");
6592 		return -ENODEV;
6593 	}
6594 
6595 	if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_GET_ENTRY)) {
6596 		NL_SET_ERR_MSG(extack, "Missing MDBA_GET_ENTRY attribute");
6597 		return -EINVAL;
6598 	}
6599 
6600 	if (!dev->netdev_ops->ndo_mdb_get) {
6601 		NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
6602 		return -EOPNOTSUPP;
6603 	}
6604 
6605 	return dev->netdev_ops->ndo_mdb_get(dev, tb, NETLINK_CB(in_skb).portid,
6606 					    nlh->nlmsg_seq, extack);
6607 }
6608 
rtnl_validate_mdb_entry(const struct nlattr * attr,struct netlink_ext_ack * extack)6609 static int rtnl_validate_mdb_entry(const struct nlattr *attr,
6610 				   struct netlink_ext_ack *extack)
6611 {
6612 	struct br_mdb_entry *entry = nla_data(attr);
6613 
6614 	if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
6615 		NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
6616 		return -EINVAL;
6617 	}
6618 
6619 	if (entry->ifindex == 0) {
6620 		NL_SET_ERR_MSG(extack, "Zero entry ifindex is not allowed");
6621 		return -EINVAL;
6622 	}
6623 
6624 	if (entry->addr.proto == htons(ETH_P_IP)) {
6625 		if (!ipv4_is_multicast(entry->addr.u.ip4) &&
6626 		    !ipv4_is_zeronet(entry->addr.u.ip4)) {
6627 			NL_SET_ERR_MSG(extack, "IPv4 entry group address is not multicast or 0.0.0.0");
6628 			return -EINVAL;
6629 		}
6630 		if (ipv4_is_local_multicast(entry->addr.u.ip4)) {
6631 			NL_SET_ERR_MSG(extack, "IPv4 entry group address is local multicast");
6632 			return -EINVAL;
6633 		}
6634 #if IS_ENABLED(CONFIG_IPV6)
6635 	} else if (entry->addr.proto == htons(ETH_P_IPV6)) {
6636 		if (ipv6_addr_is_ll_all_nodes(&entry->addr.u.ip6)) {
6637 			NL_SET_ERR_MSG(extack, "IPv6 entry group address is link-local all nodes");
6638 			return -EINVAL;
6639 		}
6640 #endif
6641 	} else if (entry->addr.proto == 0) {
6642 		/* L2 mdb */
6643 		if (!is_multicast_ether_addr(entry->addr.u.mac_addr)) {
6644 			NL_SET_ERR_MSG(extack, "L2 entry group is not multicast");
6645 			return -EINVAL;
6646 		}
6647 	} else {
6648 		NL_SET_ERR_MSG(extack, "Unknown entry protocol");
6649 		return -EINVAL;
6650 	}
6651 
6652 	if (entry->state != MDB_PERMANENT && entry->state != MDB_TEMPORARY) {
6653 		NL_SET_ERR_MSG(extack, "Unknown entry state");
6654 		return -EINVAL;
6655 	}
6656 	if (entry->vid >= VLAN_VID_MASK) {
6657 		NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
6658 		return -EINVAL;
6659 	}
6660 
6661 	return 0;
6662 }
6663 
6664 static const struct nla_policy mdba_policy[MDBA_SET_ENTRY_MAX + 1] = {
6665 	[MDBA_SET_ENTRY_UNSPEC] = { .strict_start_type = MDBA_SET_ENTRY_ATTRS + 1 },
6666 	[MDBA_SET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
6667 						  rtnl_validate_mdb_entry,
6668 						  sizeof(struct br_mdb_entry)),
6669 	[MDBA_SET_ENTRY_ATTRS] = { .type = NLA_NESTED },
6670 };
6671 
rtnl_mdb_add(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6672 static int rtnl_mdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
6673 			struct netlink_ext_ack *extack)
6674 {
6675 	struct nlattr *tb[MDBA_SET_ENTRY_MAX + 1];
6676 	struct net *net = sock_net(skb->sk);
6677 	struct br_port_msg *bpm;
6678 	struct net_device *dev;
6679 	int err;
6680 
6681 	err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb,
6682 				     MDBA_SET_ENTRY_MAX, mdba_policy, extack);
6683 	if (err)
6684 		return err;
6685 
6686 	bpm = nlmsg_data(nlh);
6687 	if (!bpm->ifindex) {
6688 		NL_SET_ERR_MSG(extack, "Invalid ifindex");
6689 		return -EINVAL;
6690 	}
6691 
6692 	dev = __dev_get_by_index(net, bpm->ifindex);
6693 	if (!dev) {
6694 		NL_SET_ERR_MSG(extack, "Device doesn't exist");
6695 		return -ENODEV;
6696 	}
6697 
6698 	if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_SET_ENTRY)) {
6699 		NL_SET_ERR_MSG(extack, "Missing MDBA_SET_ENTRY attribute");
6700 		return -EINVAL;
6701 	}
6702 
6703 	if (!dev->netdev_ops->ndo_mdb_add) {
6704 		NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
6705 		return -EOPNOTSUPP;
6706 	}
6707 
6708 	return dev->netdev_ops->ndo_mdb_add(dev, tb, nlh->nlmsg_flags, extack);
6709 }
6710 
rtnl_validate_mdb_entry_del_bulk(const struct nlattr * attr,struct netlink_ext_ack * extack)6711 static int rtnl_validate_mdb_entry_del_bulk(const struct nlattr *attr,
6712 					    struct netlink_ext_ack *extack)
6713 {
6714 	struct br_mdb_entry *entry = nla_data(attr);
6715 	struct br_mdb_entry zero_entry = {};
6716 
6717 	if (nla_len(attr) != sizeof(struct br_mdb_entry)) {
6718 		NL_SET_ERR_MSG_ATTR(extack, attr, "Invalid attribute length");
6719 		return -EINVAL;
6720 	}
6721 
6722 	if (entry->state != MDB_PERMANENT && entry->state != MDB_TEMPORARY) {
6723 		NL_SET_ERR_MSG(extack, "Unknown entry state");
6724 		return -EINVAL;
6725 	}
6726 
6727 	if (entry->flags) {
6728 		NL_SET_ERR_MSG(extack, "Entry flags cannot be set");
6729 		return -EINVAL;
6730 	}
6731 
6732 	if (entry->vid >= VLAN_N_VID - 1) {
6733 		NL_SET_ERR_MSG(extack, "Invalid entry VLAN id");
6734 		return -EINVAL;
6735 	}
6736 
6737 	if (memcmp(&entry->addr, &zero_entry.addr, sizeof(entry->addr))) {
6738 		NL_SET_ERR_MSG(extack, "Entry address cannot be set");
6739 		return -EINVAL;
6740 	}
6741 
6742 	return 0;
6743 }
6744 
6745 static const struct nla_policy mdba_del_bulk_policy[MDBA_SET_ENTRY_MAX + 1] = {
6746 	[MDBA_SET_ENTRY] = NLA_POLICY_VALIDATE_FN(NLA_BINARY,
6747 						  rtnl_validate_mdb_entry_del_bulk,
6748 						  sizeof(struct br_mdb_entry)),
6749 	[MDBA_SET_ENTRY_ATTRS] = { .type = NLA_NESTED },
6750 };
6751 
rtnl_mdb_del(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6752 static int rtnl_mdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
6753 			struct netlink_ext_ack *extack)
6754 {
6755 	bool del_bulk = !!(nlh->nlmsg_flags & NLM_F_BULK);
6756 	struct nlattr *tb[MDBA_SET_ENTRY_MAX + 1];
6757 	struct net *net = sock_net(skb->sk);
6758 	struct br_port_msg *bpm;
6759 	struct net_device *dev;
6760 	int err;
6761 
6762 	if (!del_bulk)
6763 		err = nlmsg_parse_deprecated(nlh, sizeof(*bpm), tb,
6764 					     MDBA_SET_ENTRY_MAX, mdba_policy,
6765 					     extack);
6766 	else
6767 		err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX,
6768 				  mdba_del_bulk_policy, extack);
6769 	if (err)
6770 		return err;
6771 
6772 	bpm = nlmsg_data(nlh);
6773 	if (!bpm->ifindex) {
6774 		NL_SET_ERR_MSG(extack, "Invalid ifindex");
6775 		return -EINVAL;
6776 	}
6777 
6778 	dev = __dev_get_by_index(net, bpm->ifindex);
6779 	if (!dev) {
6780 		NL_SET_ERR_MSG(extack, "Device doesn't exist");
6781 		return -ENODEV;
6782 	}
6783 
6784 	if (NL_REQ_ATTR_CHECK(extack, NULL, tb, MDBA_SET_ENTRY)) {
6785 		NL_SET_ERR_MSG(extack, "Missing MDBA_SET_ENTRY attribute");
6786 		return -EINVAL;
6787 	}
6788 
6789 	if (del_bulk) {
6790 		if (!dev->netdev_ops->ndo_mdb_del_bulk) {
6791 			NL_SET_ERR_MSG(extack, "Device does not support MDB bulk deletion");
6792 			return -EOPNOTSUPP;
6793 		}
6794 		return dev->netdev_ops->ndo_mdb_del_bulk(dev, tb, extack);
6795 	}
6796 
6797 	if (!dev->netdev_ops->ndo_mdb_del) {
6798 		NL_SET_ERR_MSG(extack, "Device does not support MDB operations");
6799 		return -EOPNOTSUPP;
6800 	}
6801 
6802 	return dev->netdev_ops->ndo_mdb_del(dev, tb, extack);
6803 }
6804 
6805 /* Process one rtnetlink message. */
6806 
rtnl_dumpit(struct sk_buff * skb,struct netlink_callback * cb)6807 static int rtnl_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
6808 {
6809 	const bool needs_lock = !(cb->flags & RTNL_FLAG_DUMP_UNLOCKED);
6810 	rtnl_dumpit_func dumpit = cb->data;
6811 	int err;
6812 
6813 	/* Previous iteration have already finished, avoid calling->dumpit()
6814 	 * again, it may not expect to be called after it reached the end.
6815 	 */
6816 	if (!dumpit)
6817 		return 0;
6818 
6819 	if (needs_lock)
6820 		rtnl_lock();
6821 	err = dumpit(skb, cb);
6822 	if (needs_lock)
6823 		rtnl_unlock();
6824 
6825 	/* Old dump handlers used to send NLM_DONE as in a separate recvmsg().
6826 	 * Some applications which parse netlink manually depend on this.
6827 	 */
6828 	if (cb->flags & RTNL_FLAG_DUMP_SPLIT_NLM_DONE) {
6829 		if (err < 0 && err != -EMSGSIZE)
6830 			return err;
6831 		if (!err)
6832 			cb->data = NULL;
6833 
6834 		return skb->len;
6835 	}
6836 	return err;
6837 }
6838 
rtnetlink_dump_start(struct sock * ssk,struct sk_buff * skb,const struct nlmsghdr * nlh,struct netlink_dump_control * control)6839 static int rtnetlink_dump_start(struct sock *ssk, struct sk_buff *skb,
6840 				const struct nlmsghdr *nlh,
6841 				struct netlink_dump_control *control)
6842 {
6843 	if (control->flags & RTNL_FLAG_DUMP_SPLIT_NLM_DONE ||
6844 	    !(control->flags & RTNL_FLAG_DUMP_UNLOCKED)) {
6845 		WARN_ON(control->data);
6846 		control->data = control->dump;
6847 		control->dump = rtnl_dumpit;
6848 	}
6849 
6850 	return netlink_dump_start(ssk, skb, nlh, control);
6851 }
6852 
rtnetlink_rcv_msg(struct sk_buff * skb,struct nlmsghdr * nlh,struct netlink_ext_ack * extack)6853 static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
6854 			     struct netlink_ext_ack *extack)
6855 {
6856 	struct net *net = sock_net(skb->sk);
6857 	struct rtnl_link *link;
6858 	enum rtnl_kinds kind;
6859 	struct module *owner;
6860 	int err = -EOPNOTSUPP;
6861 	rtnl_doit_func doit;
6862 	unsigned int flags;
6863 	int family;
6864 	int type;
6865 
6866 	type = nlh->nlmsg_type;
6867 	if (type > RTM_MAX)
6868 		return -EOPNOTSUPP;
6869 
6870 	type -= RTM_BASE;
6871 
6872 	/* All the messages must have at least 1 byte length */
6873 	if (nlmsg_len(nlh) < sizeof(struct rtgenmsg))
6874 		return 0;
6875 
6876 	family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
6877 	kind = rtnl_msgtype_kind(type);
6878 
6879 	if (kind != RTNL_KIND_GET && !netlink_net_capable(skb, CAP_NET_ADMIN))
6880 		return -EPERM;
6881 
6882 	rcu_read_lock();
6883 	if (kind == RTNL_KIND_GET && (nlh->nlmsg_flags & NLM_F_DUMP)) {
6884 		struct sock *rtnl;
6885 		rtnl_dumpit_func dumpit;
6886 		u32 min_dump_alloc = 0;
6887 
6888 		link = rtnl_get_link(family, type);
6889 		if (!link || !link->dumpit) {
6890 			family = PF_UNSPEC;
6891 			link = rtnl_get_link(family, type);
6892 			if (!link || !link->dumpit)
6893 				goto err_unlock;
6894 		}
6895 		owner = link->owner;
6896 		dumpit = link->dumpit;
6897 		flags = link->flags;
6898 
6899 		if (type == RTM_GETLINK - RTM_BASE)
6900 			min_dump_alloc = rtnl_calcit(skb, nlh);
6901 
6902 		err = 0;
6903 		/* need to do this before rcu_read_unlock() */
6904 		if (!try_module_get(owner))
6905 			err = -EPROTONOSUPPORT;
6906 
6907 		rcu_read_unlock();
6908 
6909 		rtnl = net->rtnl;
6910 		if (err == 0) {
6911 			struct netlink_dump_control c = {
6912 				.dump		= dumpit,
6913 				.min_dump_alloc	= min_dump_alloc,
6914 				.module		= owner,
6915 				.flags		= flags,
6916 			};
6917 			err = rtnetlink_dump_start(rtnl, skb, nlh, &c);
6918 			/* netlink_dump_start() will keep a reference on
6919 			 * module if dump is still in progress.
6920 			 */
6921 			module_put(owner);
6922 		}
6923 		return err;
6924 	}
6925 
6926 	link = rtnl_get_link(family, type);
6927 	if (!link || !link->doit) {
6928 		family = PF_UNSPEC;
6929 		link = rtnl_get_link(PF_UNSPEC, type);
6930 		if (!link || !link->doit)
6931 			goto out_unlock;
6932 	}
6933 
6934 	owner = link->owner;
6935 	if (!try_module_get(owner)) {
6936 		err = -EPROTONOSUPPORT;
6937 		goto out_unlock;
6938 	}
6939 
6940 	flags = link->flags;
6941 	if (kind == RTNL_KIND_DEL && (nlh->nlmsg_flags & NLM_F_BULK) &&
6942 	    !(flags & RTNL_FLAG_BULK_DEL_SUPPORTED)) {
6943 		NL_SET_ERR_MSG(extack, "Bulk delete is not supported");
6944 		module_put(owner);
6945 		goto err_unlock;
6946 	}
6947 
6948 	if (flags & RTNL_FLAG_DOIT_UNLOCKED) {
6949 		doit = link->doit;
6950 		rcu_read_unlock();
6951 		if (doit)
6952 			err = doit(skb, nlh, extack);
6953 		module_put(owner);
6954 		return err;
6955 	}
6956 	rcu_read_unlock();
6957 
6958 	rtnl_lock();
6959 	link = rtnl_get_link(family, type);
6960 	if (link && link->doit)
6961 		err = link->doit(skb, nlh, extack);
6962 	rtnl_unlock();
6963 
6964 	module_put(owner);
6965 
6966 	return err;
6967 
6968 out_unlock:
6969 	rcu_read_unlock();
6970 	return err;
6971 
6972 err_unlock:
6973 	rcu_read_unlock();
6974 	return -EOPNOTSUPP;
6975 }
6976 
rtnetlink_rcv(struct sk_buff * skb)6977 static void rtnetlink_rcv(struct sk_buff *skb)
6978 {
6979 	netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
6980 }
6981 
rtnetlink_bind(struct net * net,int group)6982 static int rtnetlink_bind(struct net *net, int group)
6983 {
6984 	switch (group) {
6985 	case RTNLGRP_IPV4_MROUTE_R:
6986 	case RTNLGRP_IPV6_MROUTE_R:
6987 		if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
6988 			return -EPERM;
6989 		break;
6990 	}
6991 	return 0;
6992 }
6993 
rtnetlink_event(struct notifier_block * this,unsigned long event,void * ptr)6994 static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
6995 {
6996 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
6997 
6998 	switch (event) {
6999 	case NETDEV_REBOOT:
7000 	case NETDEV_CHANGEMTU:
7001 	case NETDEV_CHANGEADDR:
7002 	case NETDEV_CHANGENAME:
7003 	case NETDEV_FEAT_CHANGE:
7004 	case NETDEV_BONDING_FAILOVER:
7005 	case NETDEV_POST_TYPE_CHANGE:
7006 	case NETDEV_NOTIFY_PEERS:
7007 	case NETDEV_CHANGEUPPER:
7008 	case NETDEV_RESEND_IGMP:
7009 	case NETDEV_CHANGEINFODATA:
7010 	case NETDEV_CHANGELOWERSTATE:
7011 	case NETDEV_CHANGE_TX_QUEUE_LEN:
7012 		rtmsg_ifinfo_event(RTM_NEWLINK, dev, 0, rtnl_get_event(event),
7013 				   GFP_KERNEL, NULL, 0, 0, NULL);
7014 		break;
7015 	default:
7016 		break;
7017 	}
7018 	return NOTIFY_DONE;
7019 }
7020 
7021 static struct notifier_block rtnetlink_dev_notifier = {
7022 	.notifier_call	= rtnetlink_event,
7023 };
7024 
7025 
rtnetlink_net_init(struct net * net)7026 static int __net_init rtnetlink_net_init(struct net *net)
7027 {
7028 	struct sock *sk;
7029 	struct netlink_kernel_cfg cfg = {
7030 		.groups		= RTNLGRP_MAX,
7031 		.input		= rtnetlink_rcv,
7032 		.flags		= NL_CFG_F_NONROOT_RECV,
7033 		.bind		= rtnetlink_bind,
7034 	};
7035 
7036 	sk = netlink_kernel_create(net, NETLINK_ROUTE, &cfg);
7037 	if (!sk)
7038 		return -ENOMEM;
7039 	net->rtnl = sk;
7040 	return 0;
7041 }
7042 
rtnetlink_net_exit(struct net * net)7043 static void __net_exit rtnetlink_net_exit(struct net *net)
7044 {
7045 	netlink_kernel_release(net->rtnl);
7046 	net->rtnl = NULL;
7047 }
7048 
7049 static struct pernet_operations rtnetlink_net_ops = {
7050 	.init = rtnetlink_net_init,
7051 	.exit = rtnetlink_net_exit,
7052 };
7053 
7054 static const struct rtnl_msg_handler rtnetlink_rtnl_msg_handlers[] __initconst = {
7055 	{.msgtype = RTM_NEWLINK, .doit = rtnl_newlink,
7056 	 .flags = RTNL_FLAG_DOIT_PERNET},
7057 	{.msgtype = RTM_DELLINK, .doit = rtnl_dellink,
7058 	 .flags = RTNL_FLAG_DOIT_PERNET_WIP},
7059 	{.msgtype = RTM_GETLINK, .doit = rtnl_getlink,
7060 	 .dumpit = rtnl_dump_ifinfo, .flags = RTNL_FLAG_DUMP_SPLIT_NLM_DONE},
7061 	{.msgtype = RTM_SETLINK, .doit = rtnl_setlink,
7062 	 .flags = RTNL_FLAG_DOIT_PERNET_WIP},
7063 	{.msgtype = RTM_GETADDR, .dumpit = rtnl_dump_all},
7064 	{.msgtype = RTM_GETROUTE, .dumpit = rtnl_dump_all},
7065 	{.msgtype = RTM_GETNETCONF, .dumpit = rtnl_dump_all},
7066 	{.msgtype = RTM_GETSTATS, .doit = rtnl_stats_get,
7067 	 .dumpit = rtnl_stats_dump},
7068 	{.msgtype = RTM_SETSTATS, .doit = rtnl_stats_set},
7069 	{.msgtype = RTM_NEWLINKPROP, .doit = rtnl_newlinkprop},
7070 	{.msgtype = RTM_DELLINKPROP, .doit = rtnl_dellinkprop},
7071 	{.protocol = PF_BRIDGE, .msgtype = RTM_GETLINK,
7072 	 .dumpit = rtnl_bridge_getlink},
7073 	{.protocol = PF_BRIDGE, .msgtype = RTM_DELLINK,
7074 	 .doit = rtnl_bridge_dellink},
7075 	{.protocol = PF_BRIDGE, .msgtype = RTM_SETLINK,
7076 	 .doit = rtnl_bridge_setlink},
7077 	{.protocol = PF_BRIDGE, .msgtype = RTM_NEWNEIGH, .doit = rtnl_fdb_add},
7078 	{.protocol = PF_BRIDGE, .msgtype = RTM_DELNEIGH, .doit = rtnl_fdb_del,
7079 	 .flags = RTNL_FLAG_BULK_DEL_SUPPORTED},
7080 	{.protocol = PF_BRIDGE, .msgtype = RTM_GETNEIGH, .doit = rtnl_fdb_get,
7081 	 .dumpit = rtnl_fdb_dump},
7082 	{.protocol = PF_BRIDGE, .msgtype = RTM_NEWMDB, .doit = rtnl_mdb_add},
7083 	{.protocol = PF_BRIDGE, .msgtype = RTM_DELMDB, .doit = rtnl_mdb_del,
7084 	 .flags = RTNL_FLAG_BULK_DEL_SUPPORTED},
7085 	{.protocol = PF_BRIDGE, .msgtype = RTM_GETMDB, .doit = rtnl_mdb_get,
7086 	 .dumpit = rtnl_mdb_dump},
7087 };
7088 
rtnetlink_init(void)7089 void __init rtnetlink_init(void)
7090 {
7091 	if (register_pernet_subsys(&rtnetlink_net_ops))
7092 		panic("rtnetlink_init: cannot initialize rtnetlink\n");
7093 
7094 	register_netdevice_notifier(&rtnetlink_dev_notifier);
7095 
7096 	rtnl_register_many(rtnetlink_rtnl_msg_handlers);
7097 }
7098