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