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