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