1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * NETLINK Generic Netlink Family 4 * 5 * Authors: Jamal Hadi Salim 6 * Thomas Graf <tgraf@suug.ch> 7 * Johannes Berg <johannes@sipsolutions.net> 8 */ 9 10 #include <linux/module.h> 11 #include <linux/kernel.h> 12 #include <linux/slab.h> 13 #include <linux/errno.h> 14 #include <linux/types.h> 15 #include <linux/socket.h> 16 #include <linux/string_helpers.h> 17 #include <linux/skbuff.h> 18 #include <linux/mutex.h> 19 #include <linux/bitmap.h> 20 #include <linux/rwsem.h> 21 #include <linux/idr.h> 22 #include <net/sock.h> 23 #include <net/genetlink.h> 24 25 static DEFINE_MUTEX(genl_mutex); /* serialization of message processing */ 26 static DECLARE_RWSEM(cb_lock); 27 28 atomic_t genl_sk_destructing_cnt = ATOMIC_INIT(0); 29 DECLARE_WAIT_QUEUE_HEAD(genl_sk_destructing_waitq); 30 31 void genl_lock(void) 32 { 33 mutex_lock(&genl_mutex); 34 } 35 EXPORT_SYMBOL(genl_lock); 36 37 void genl_unlock(void) 38 { 39 mutex_unlock(&genl_mutex); 40 } 41 EXPORT_SYMBOL(genl_unlock); 42 43 static void genl_lock_all(void) 44 { 45 down_write(&cb_lock); 46 genl_lock(); 47 } 48 49 static void genl_unlock_all(void) 50 { 51 genl_unlock(); 52 up_write(&cb_lock); 53 } 54 55 static void genl_op_lock(const struct genl_family *family) 56 { 57 if (!family->parallel_ops) 58 genl_lock(); 59 } 60 61 static void genl_op_unlock(const struct genl_family *family) 62 { 63 if (!family->parallel_ops) 64 genl_unlock(); 65 } 66 67 static DEFINE_IDR(genl_fam_idr); 68 69 /* 70 * Bitmap of multicast groups that are currently in use. 71 * 72 * To avoid an allocation at boot of just one unsigned long, 73 * declare it global instead. 74 * Bit 0 is marked as already used since group 0 is invalid. 75 * Bit 1 is marked as already used since the drop-monitor code 76 * abuses the API and thinks it can statically use group 1. 77 * That group will typically conflict with other groups that 78 * any proper users use. 79 * Bit 16 is marked as used since it's used for generic netlink 80 * and the code no longer marks pre-reserved IDs as used. 81 * Bit 17 is marked as already used since the VFS quota code 82 * also abused this API and relied on family == group ID, we 83 * cater to that by giving it a static family and group ID. 84 * Bit 18 is marked as already used since the PMCRAID driver 85 * did the same thing as the VFS quota code (maybe copied?) 86 */ 87 static unsigned long mc_group_start = 0x3 | BIT(GENL_ID_CTRL) | 88 BIT(GENL_ID_VFS_DQUOT) | 89 BIT(GENL_ID_PMCRAID); 90 static unsigned long *mc_groups = &mc_group_start; 91 static unsigned long mc_groups_longs = 1; 92 93 /* We need the last attribute with non-zero ID therefore a 2-entry array */ 94 static struct nla_policy genl_policy_reject_all[] = { 95 { .type = NLA_REJECT }, 96 { .type = NLA_REJECT }, 97 }; 98 99 static int genl_ctrl_event(int event, const struct genl_family *family, 100 const struct genl_multicast_group *grp, 101 int grp_id); 102 103 static void 104 genl_op_fill_in_reject_policy(const struct genl_family *family, 105 struct genl_ops *op) 106 { 107 BUILD_BUG_ON(ARRAY_SIZE(genl_policy_reject_all) - 1 != 1); 108 109 if (op->policy || op->cmd < family->resv_start_op) 110 return; 111 112 op->policy = genl_policy_reject_all; 113 op->maxattr = 1; 114 } 115 116 static void 117 genl_op_fill_in_reject_policy_split(const struct genl_family *family, 118 struct genl_split_ops *op) 119 { 120 if (op->policy) 121 return; 122 123 op->policy = genl_policy_reject_all; 124 op->maxattr = 1; 125 } 126 127 static const struct genl_family *genl_family_find_byid(unsigned int id) 128 { 129 return idr_find(&genl_fam_idr, id); 130 } 131 132 static const struct genl_family *genl_family_find_byname(char *name) 133 { 134 const struct genl_family *family; 135 unsigned int id; 136 137 idr_for_each_entry(&genl_fam_idr, family, id) 138 if (strcmp(family->name, name) == 0) 139 return family; 140 141 return NULL; 142 } 143 144 struct genl_op_iter { 145 const struct genl_family *family; 146 struct genl_split_ops doit; 147 struct genl_split_ops dumpit; 148 int cmd_idx; 149 int entry_idx; 150 u32 cmd; 151 u8 flags; 152 }; 153 154 static void genl_op_from_full(const struct genl_family *family, 155 unsigned int i, struct genl_ops *op) 156 { 157 *op = family->ops[i]; 158 159 if (!op->maxattr) 160 op->maxattr = family->maxattr; 161 if (!op->policy) 162 op->policy = family->policy; 163 164 genl_op_fill_in_reject_policy(family, op); 165 } 166 167 static int genl_get_cmd_full(u32 cmd, const struct genl_family *family, 168 struct genl_ops *op) 169 { 170 int i; 171 172 for (i = 0; i < family->n_ops; i++) 173 if (family->ops[i].cmd == cmd) { 174 genl_op_from_full(family, i, op); 175 return 0; 176 } 177 178 return -ENOENT; 179 } 180 181 static void genl_op_from_small(const struct genl_family *family, 182 unsigned int i, struct genl_ops *op) 183 { 184 memset(op, 0, sizeof(*op)); 185 op->doit = family->small_ops[i].doit; 186 op->dumpit = family->small_ops[i].dumpit; 187 op->cmd = family->small_ops[i].cmd; 188 op->internal_flags = family->small_ops[i].internal_flags; 189 op->flags = family->small_ops[i].flags; 190 op->validate = family->small_ops[i].validate; 191 192 op->maxattr = family->maxattr; 193 op->policy = family->policy; 194 195 genl_op_fill_in_reject_policy(family, op); 196 } 197 198 static int genl_get_cmd_small(u32 cmd, const struct genl_family *family, 199 struct genl_ops *op) 200 { 201 int i; 202 203 for (i = 0; i < family->n_small_ops; i++) 204 if (family->small_ops[i].cmd == cmd) { 205 genl_op_from_small(family, i, op); 206 return 0; 207 } 208 209 return -ENOENT; 210 } 211 212 static void genl_op_from_split(struct genl_op_iter *iter) 213 { 214 const struct genl_family *family = iter->family; 215 int i, cnt = 0; 216 217 i = iter->entry_idx - family->n_ops - family->n_small_ops; 218 219 if (family->split_ops[i + cnt].flags & GENL_CMD_CAP_DO) { 220 iter->doit = family->split_ops[i + cnt]; 221 genl_op_fill_in_reject_policy_split(family, &iter->doit); 222 cnt++; 223 } else { 224 memset(&iter->doit, 0, sizeof(iter->doit)); 225 } 226 227 if (i + cnt < family->n_split_ops && 228 family->split_ops[i + cnt].flags & GENL_CMD_CAP_DUMP) { 229 iter->dumpit = family->split_ops[i + cnt]; 230 genl_op_fill_in_reject_policy_split(family, &iter->dumpit); 231 cnt++; 232 } else { 233 memset(&iter->dumpit, 0, sizeof(iter->dumpit)); 234 } 235 236 WARN_ON(!cnt); 237 iter->entry_idx += cnt; 238 } 239 240 static int 241 genl_get_cmd_split(u32 cmd, u8 flag, const struct genl_family *family, 242 struct genl_split_ops *op) 243 { 244 int i; 245 246 for (i = 0; i < family->n_split_ops; i++) 247 if (family->split_ops[i].cmd == cmd && 248 family->split_ops[i].flags & flag) { 249 *op = family->split_ops[i]; 250 return 0; 251 } 252 253 return -ENOENT; 254 } 255 256 static int 257 genl_cmd_full_to_split(struct genl_split_ops *op, 258 const struct genl_family *family, 259 const struct genl_ops *full, u8 flags) 260 { 261 if ((flags & GENL_CMD_CAP_DO && !full->doit) || 262 (flags & GENL_CMD_CAP_DUMP && !full->dumpit)) { 263 memset(op, 0, sizeof(*op)); 264 return -ENOENT; 265 } 266 267 if (flags & GENL_CMD_CAP_DUMP) { 268 op->start = full->start; 269 op->dumpit = full->dumpit; 270 op->done = full->done; 271 } else { 272 op->pre_doit = family->pre_doit; 273 op->doit = full->doit; 274 op->post_doit = family->post_doit; 275 } 276 277 if (flags & GENL_CMD_CAP_DUMP && 278 full->validate & GENL_DONT_VALIDATE_DUMP) { 279 op->policy = NULL; 280 op->maxattr = 0; 281 } else { 282 op->policy = full->policy; 283 op->maxattr = full->maxattr; 284 } 285 286 op->cmd = full->cmd; 287 op->internal_flags = full->internal_flags; 288 op->flags = full->flags; 289 op->validate = full->validate; 290 291 /* Make sure flags include the GENL_CMD_CAP_DO / GENL_CMD_CAP_DUMP */ 292 op->flags |= flags; 293 294 return 0; 295 } 296 297 /* Must make sure that op is initialized to 0 on failure */ 298 static int 299 genl_get_cmd(u32 cmd, u8 flags, const struct genl_family *family, 300 struct genl_split_ops *op) 301 { 302 struct genl_ops full; 303 int err; 304 305 err = genl_get_cmd_full(cmd, family, &full); 306 if (err == -ENOENT) 307 err = genl_get_cmd_small(cmd, family, &full); 308 /* Found one of legacy forms */ 309 if (err == 0) 310 return genl_cmd_full_to_split(op, family, &full, flags); 311 312 err = genl_get_cmd_split(cmd, flags, family, op); 313 if (err) 314 memset(op, 0, sizeof(*op)); 315 return err; 316 } 317 318 /* For policy dumping only, get ops of both do and dump. 319 * Fail if both are missing, genl_get_cmd() will zero-init in case of failure. 320 */ 321 static int 322 genl_get_cmd_both(u32 cmd, const struct genl_family *family, 323 struct genl_split_ops *doit, struct genl_split_ops *dumpit) 324 { 325 int err1, err2; 326 327 err1 = genl_get_cmd(cmd, GENL_CMD_CAP_DO, family, doit); 328 err2 = genl_get_cmd(cmd, GENL_CMD_CAP_DUMP, family, dumpit); 329 330 return err1 && err2 ? -ENOENT : 0; 331 } 332 333 static bool 334 genl_op_iter_init(const struct genl_family *family, struct genl_op_iter *iter) 335 { 336 iter->family = family; 337 iter->cmd_idx = 0; 338 iter->entry_idx = 0; 339 340 iter->flags = 0; 341 342 return iter->family->n_ops + 343 iter->family->n_small_ops + 344 iter->family->n_split_ops; 345 } 346 347 static bool genl_op_iter_next(struct genl_op_iter *iter) 348 { 349 const struct genl_family *family = iter->family; 350 bool legacy_op = true; 351 struct genl_ops op; 352 353 if (iter->entry_idx < family->n_ops) { 354 genl_op_from_full(family, iter->entry_idx, &op); 355 } else if (iter->entry_idx < family->n_ops + family->n_small_ops) { 356 genl_op_from_small(family, iter->entry_idx - family->n_ops, 357 &op); 358 } else if (iter->entry_idx < 359 family->n_ops + family->n_small_ops + family->n_split_ops) { 360 legacy_op = false; 361 /* updates entry_idx */ 362 genl_op_from_split(iter); 363 } else { 364 return false; 365 } 366 367 iter->cmd_idx++; 368 369 if (legacy_op) { 370 iter->entry_idx++; 371 372 genl_cmd_full_to_split(&iter->doit, family, 373 &op, GENL_CMD_CAP_DO); 374 genl_cmd_full_to_split(&iter->dumpit, family, 375 &op, GENL_CMD_CAP_DUMP); 376 } 377 378 iter->cmd = iter->doit.cmd | iter->dumpit.cmd; 379 iter->flags = iter->doit.flags | iter->dumpit.flags; 380 381 return true; 382 } 383 384 static void 385 genl_op_iter_copy(struct genl_op_iter *dst, struct genl_op_iter *src) 386 { 387 *dst = *src; 388 } 389 390 static unsigned int genl_op_iter_idx(struct genl_op_iter *iter) 391 { 392 return iter->cmd_idx; 393 } 394 395 static int genl_allocate_reserve_groups(int n_groups, int *first_id) 396 { 397 unsigned long *new_groups; 398 int start = 0; 399 int i; 400 int id; 401 bool fits; 402 403 do { 404 if (start == 0) 405 id = find_first_zero_bit(mc_groups, 406 mc_groups_longs * 407 BITS_PER_LONG); 408 else 409 id = find_next_zero_bit(mc_groups, 410 mc_groups_longs * BITS_PER_LONG, 411 start); 412 413 fits = true; 414 for (i = id; 415 i < min_t(int, id + n_groups, 416 mc_groups_longs * BITS_PER_LONG); 417 i++) { 418 if (test_bit(i, mc_groups)) { 419 start = i; 420 fits = false; 421 break; 422 } 423 } 424 425 if (id + n_groups > mc_groups_longs * BITS_PER_LONG) { 426 unsigned long new_longs = mc_groups_longs + 427 BITS_TO_LONGS(n_groups); 428 size_t nlen = new_longs * sizeof(unsigned long); 429 430 if (mc_groups == &mc_group_start) { 431 new_groups = kzalloc(nlen, GFP_KERNEL); 432 if (!new_groups) 433 return -ENOMEM; 434 mc_groups = new_groups; 435 *mc_groups = mc_group_start; 436 } else { 437 new_groups = krealloc(mc_groups, nlen, 438 GFP_KERNEL); 439 if (!new_groups) 440 return -ENOMEM; 441 mc_groups = new_groups; 442 for (i = 0; i < BITS_TO_LONGS(n_groups); i++) 443 mc_groups[mc_groups_longs + i] = 0; 444 } 445 mc_groups_longs = new_longs; 446 } 447 } while (!fits); 448 449 for (i = id; i < id + n_groups; i++) 450 set_bit(i, mc_groups); 451 *first_id = id; 452 return 0; 453 } 454 455 static struct genl_family genl_ctrl; 456 457 static int genl_validate_assign_mc_groups(struct genl_family *family) 458 { 459 int first_id; 460 int n_groups = family->n_mcgrps; 461 int err = 0, i; 462 bool groups_allocated = false; 463 464 if (!n_groups) 465 return 0; 466 467 for (i = 0; i < n_groups; i++) { 468 const struct genl_multicast_group *grp = &family->mcgrps[i]; 469 470 if (WARN_ON(grp->name[0] == '\0')) 471 return -EINVAL; 472 if (WARN_ON(!string_is_terminated(grp->name, GENL_NAMSIZ))) 473 return -EINVAL; 474 } 475 476 /* special-case our own group and hacks */ 477 if (family == &genl_ctrl) { 478 first_id = GENL_ID_CTRL; 479 BUG_ON(n_groups != 1); 480 } else if (strcmp(family->name, "NET_DM") == 0) { 481 first_id = 1; 482 BUG_ON(n_groups != 1); 483 } else if (family->id == GENL_ID_VFS_DQUOT) { 484 first_id = GENL_ID_VFS_DQUOT; 485 BUG_ON(n_groups != 1); 486 } else if (family->id == GENL_ID_PMCRAID) { 487 first_id = GENL_ID_PMCRAID; 488 BUG_ON(n_groups != 1); 489 } else { 490 groups_allocated = true; 491 err = genl_allocate_reserve_groups(n_groups, &first_id); 492 if (err) 493 return err; 494 } 495 496 family->mcgrp_offset = first_id; 497 498 /* if still initializing, can't and don't need to realloc bitmaps */ 499 if (!init_net.genl_sock) 500 return 0; 501 502 if (family->netnsok) { 503 struct net *net; 504 505 netlink_table_grab(); 506 rcu_read_lock(); 507 for_each_net_rcu(net) { 508 err = __netlink_change_ngroups(net->genl_sock, 509 mc_groups_longs * BITS_PER_LONG); 510 if (err) { 511 /* 512 * No need to roll back, can only fail if 513 * memory allocation fails and then the 514 * number of _possible_ groups has been 515 * increased on some sockets which is ok. 516 */ 517 break; 518 } 519 } 520 rcu_read_unlock(); 521 netlink_table_ungrab(); 522 } else { 523 err = netlink_change_ngroups(init_net.genl_sock, 524 mc_groups_longs * BITS_PER_LONG); 525 } 526 527 if (groups_allocated && err) { 528 for (i = 0; i < family->n_mcgrps; i++) 529 clear_bit(family->mcgrp_offset + i, mc_groups); 530 } 531 532 return err; 533 } 534 535 static void genl_unregister_mc_groups(const struct genl_family *family) 536 { 537 struct net *net; 538 int i; 539 540 netlink_table_grab(); 541 rcu_read_lock(); 542 for_each_net_rcu(net) { 543 for (i = 0; i < family->n_mcgrps; i++) 544 __netlink_clear_multicast_users( 545 net->genl_sock, family->mcgrp_offset + i); 546 } 547 rcu_read_unlock(); 548 netlink_table_ungrab(); 549 550 for (i = 0; i < family->n_mcgrps; i++) { 551 int grp_id = family->mcgrp_offset + i; 552 553 if (grp_id != 1) 554 clear_bit(grp_id, mc_groups); 555 genl_ctrl_event(CTRL_CMD_DELMCAST_GRP, family, 556 &family->mcgrps[i], grp_id); 557 } 558 } 559 560 static bool genl_split_op_check(const struct genl_split_ops *op) 561 { 562 if (WARN_ON(hweight8(op->flags & (GENL_CMD_CAP_DO | 563 GENL_CMD_CAP_DUMP)) != 1)) 564 return true; 565 return false; 566 } 567 568 static int genl_validate_ops(const struct genl_family *family) 569 { 570 struct genl_op_iter i, j; 571 unsigned int s; 572 573 if (WARN_ON(family->n_ops && !family->ops) || 574 WARN_ON(family->n_small_ops && !family->small_ops) || 575 WARN_ON(family->n_split_ops && !family->split_ops)) 576 return -EINVAL; 577 578 for (genl_op_iter_init(family, &i); genl_op_iter_next(&i); ) { 579 if (!(i.flags & (GENL_CMD_CAP_DO | GENL_CMD_CAP_DUMP))) 580 return -EINVAL; 581 582 if (WARN_ON(i.cmd >= family->resv_start_op && 583 (i.doit.validate || i.dumpit.validate))) 584 return -EINVAL; 585 586 genl_op_iter_copy(&j, &i); 587 while (genl_op_iter_next(&j)) { 588 if (i.cmd == j.cmd) 589 return -EINVAL; 590 } 591 } 592 593 if (family->n_split_ops) { 594 if (genl_split_op_check(&family->split_ops[0])) 595 return -EINVAL; 596 } 597 598 for (s = 1; s < family->n_split_ops; s++) { 599 const struct genl_split_ops *a, *b; 600 601 a = &family->split_ops[s - 1]; 602 b = &family->split_ops[s]; 603 604 if (genl_split_op_check(b)) 605 return -EINVAL; 606 607 /* Check sort order */ 608 if (a->cmd < b->cmd) { 609 continue; 610 } else if (a->cmd > b->cmd) { 611 WARN_ON(1); 612 return -EINVAL; 613 } 614 615 if (a->internal_flags != b->internal_flags || 616 ((a->flags ^ b->flags) & ~(GENL_CMD_CAP_DO | 617 GENL_CMD_CAP_DUMP))) { 618 WARN_ON(1); 619 return -EINVAL; 620 } 621 622 if ((a->flags & GENL_CMD_CAP_DO) && 623 (b->flags & GENL_CMD_CAP_DUMP)) 624 continue; 625 626 WARN_ON(1); 627 return -EINVAL; 628 } 629 630 return 0; 631 } 632 633 /** 634 * genl_register_family - register a generic netlink family 635 * @family: generic netlink family 636 * 637 * Registers the specified family after validating it first. Only one 638 * family may be registered with the same family name or identifier. 639 * 640 * The family's ops, multicast groups and module pointer must already 641 * be assigned. 642 * 643 * Return 0 on success or a negative error code. 644 */ 645 int genl_register_family(struct genl_family *family) 646 { 647 int err, i; 648 int start = GENL_START_ALLOC, end = GENL_MAX_ID; 649 650 err = genl_validate_ops(family); 651 if (err) 652 return err; 653 654 genl_lock_all(); 655 656 if (genl_family_find_byname(family->name)) { 657 err = -EEXIST; 658 goto errout_locked; 659 } 660 661 /* 662 * Sadly, a few cases need to be special-cased 663 * due to them having previously abused the API 664 * and having used their family ID also as their 665 * multicast group ID, so we use reserved IDs 666 * for both to be sure we can do that mapping. 667 */ 668 if (family == &genl_ctrl) { 669 /* and this needs to be special for initial family lookups */ 670 start = end = GENL_ID_CTRL; 671 } else if (strcmp(family->name, "pmcraid") == 0) { 672 start = end = GENL_ID_PMCRAID; 673 } else if (strcmp(family->name, "VFS_DQUOT") == 0) { 674 start = end = GENL_ID_VFS_DQUOT; 675 } 676 677 family->id = idr_alloc_cyclic(&genl_fam_idr, family, 678 start, end + 1, GFP_KERNEL); 679 if (family->id < 0) { 680 err = family->id; 681 goto errout_locked; 682 } 683 684 err = genl_validate_assign_mc_groups(family); 685 if (err) 686 goto errout_remove; 687 688 genl_unlock_all(); 689 690 /* send all events */ 691 genl_ctrl_event(CTRL_CMD_NEWFAMILY, family, NULL, 0); 692 for (i = 0; i < family->n_mcgrps; i++) 693 genl_ctrl_event(CTRL_CMD_NEWMCAST_GRP, family, 694 &family->mcgrps[i], family->mcgrp_offset + i); 695 696 return 0; 697 698 errout_remove: 699 idr_remove(&genl_fam_idr, family->id); 700 errout_locked: 701 genl_unlock_all(); 702 return err; 703 } 704 EXPORT_SYMBOL(genl_register_family); 705 706 /** 707 * genl_unregister_family - unregister generic netlink family 708 * @family: generic netlink family 709 * 710 * Unregisters the specified family. 711 * 712 * Returns 0 on success or a negative error code. 713 */ 714 int genl_unregister_family(const struct genl_family *family) 715 { 716 genl_lock_all(); 717 718 if (!genl_family_find_byid(family->id)) { 719 genl_unlock_all(); 720 return -ENOENT; 721 } 722 723 genl_unregister_mc_groups(family); 724 725 idr_remove(&genl_fam_idr, family->id); 726 727 up_write(&cb_lock); 728 wait_event(genl_sk_destructing_waitq, 729 atomic_read(&genl_sk_destructing_cnt) == 0); 730 genl_unlock(); 731 732 genl_ctrl_event(CTRL_CMD_DELFAMILY, family, NULL, 0); 733 734 return 0; 735 } 736 EXPORT_SYMBOL(genl_unregister_family); 737 738 /** 739 * genlmsg_put - Add generic netlink header to netlink message 740 * @skb: socket buffer holding the message 741 * @portid: netlink portid the message is addressed to 742 * @seq: sequence number (usually the one of the sender) 743 * @family: generic netlink family 744 * @flags: netlink message flags 745 * @cmd: generic netlink command 746 * 747 * Returns pointer to user specific header 748 */ 749 void *genlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, 750 const struct genl_family *family, int flags, u8 cmd) 751 { 752 struct nlmsghdr *nlh; 753 struct genlmsghdr *hdr; 754 755 nlh = nlmsg_put(skb, portid, seq, family->id, GENL_HDRLEN + 756 family->hdrsize, flags); 757 if (nlh == NULL) 758 return NULL; 759 760 hdr = nlmsg_data(nlh); 761 hdr->cmd = cmd; 762 hdr->version = family->version; 763 hdr->reserved = 0; 764 765 return (char *) hdr + GENL_HDRLEN; 766 } 767 EXPORT_SYMBOL(genlmsg_put); 768 769 static struct genl_dumpit_info *genl_dumpit_info_alloc(void) 770 { 771 return kmalloc(sizeof(struct genl_dumpit_info), GFP_KERNEL); 772 } 773 774 static void genl_dumpit_info_free(const struct genl_dumpit_info *info) 775 { 776 kfree(info); 777 } 778 779 static struct nlattr ** 780 genl_family_rcv_msg_attrs_parse(const struct genl_family *family, 781 struct nlmsghdr *nlh, 782 struct netlink_ext_ack *extack, 783 const struct genl_split_ops *ops, 784 int hdrlen, 785 enum genl_validate_flags no_strict_flag) 786 { 787 enum netlink_validation validate = ops->validate & no_strict_flag ? 788 NL_VALIDATE_LIBERAL : 789 NL_VALIDATE_STRICT; 790 struct nlattr **attrbuf; 791 int err; 792 793 if (!ops->maxattr) 794 return NULL; 795 796 attrbuf = kmalloc_array(ops->maxattr + 1, 797 sizeof(struct nlattr *), GFP_KERNEL); 798 if (!attrbuf) 799 return ERR_PTR(-ENOMEM); 800 801 err = __nlmsg_parse(nlh, hdrlen, attrbuf, ops->maxattr, ops->policy, 802 validate, extack); 803 if (err) { 804 kfree(attrbuf); 805 return ERR_PTR(err); 806 } 807 return attrbuf; 808 } 809 810 static void genl_family_rcv_msg_attrs_free(struct nlattr **attrbuf) 811 { 812 kfree(attrbuf); 813 } 814 815 struct genl_start_context { 816 const struct genl_family *family; 817 struct nlmsghdr *nlh; 818 struct netlink_ext_ack *extack; 819 const struct genl_split_ops *ops; 820 int hdrlen; 821 }; 822 823 static int genl_start(struct netlink_callback *cb) 824 { 825 struct genl_start_context *ctx = cb->data; 826 const struct genl_split_ops *ops; 827 struct genl_dumpit_info *info; 828 struct nlattr **attrs = NULL; 829 int rc = 0; 830 831 ops = ctx->ops; 832 if (!(ops->validate & GENL_DONT_VALIDATE_DUMP) && 833 ctx->nlh->nlmsg_len < nlmsg_msg_size(ctx->hdrlen)) 834 return -EINVAL; 835 836 attrs = genl_family_rcv_msg_attrs_parse(ctx->family, ctx->nlh, ctx->extack, 837 ops, ctx->hdrlen, 838 GENL_DONT_VALIDATE_DUMP_STRICT); 839 if (IS_ERR(attrs)) 840 return PTR_ERR(attrs); 841 842 info = genl_dumpit_info_alloc(); 843 if (!info) { 844 genl_family_rcv_msg_attrs_free(attrs); 845 return -ENOMEM; 846 } 847 info->op = *ops; 848 info->info.family = ctx->family; 849 info->info.snd_seq = cb->nlh->nlmsg_seq; 850 info->info.snd_portid = NETLINK_CB(cb->skb).portid; 851 info->info.nlhdr = cb->nlh; 852 info->info.genlhdr = nlmsg_data(cb->nlh); 853 info->info.attrs = attrs; 854 genl_info_net_set(&info->info, sock_net(cb->skb->sk)); 855 info->info.extack = cb->extack; 856 memset(&info->info.user_ptr, 0, sizeof(info->info.user_ptr)); 857 858 cb->data = info; 859 if (ops->start) { 860 genl_op_lock(ctx->family); 861 rc = ops->start(cb); 862 genl_op_unlock(ctx->family); 863 } 864 865 if (rc) { 866 genl_family_rcv_msg_attrs_free(info->info.attrs); 867 genl_dumpit_info_free(info); 868 cb->data = NULL; 869 } 870 return rc; 871 } 872 873 static int genl_dumpit(struct sk_buff *skb, struct netlink_callback *cb) 874 { 875 struct genl_dumpit_info *dump_info = cb->data; 876 const struct genl_split_ops *ops = &dump_info->op; 877 struct genl_info *info = &dump_info->info; 878 int rc; 879 880 info->extack = cb->extack; 881 882 genl_op_lock(info->family); 883 rc = ops->dumpit(skb, cb); 884 genl_op_unlock(info->family); 885 return rc; 886 } 887 888 static int genl_done(struct netlink_callback *cb) 889 { 890 struct genl_dumpit_info *dump_info = cb->data; 891 const struct genl_split_ops *ops = &dump_info->op; 892 struct genl_info *info = &dump_info->info; 893 int rc = 0; 894 895 info->extack = cb->extack; 896 897 if (ops->done) { 898 genl_op_lock(info->family); 899 rc = ops->done(cb); 900 genl_op_unlock(info->family); 901 } 902 genl_family_rcv_msg_attrs_free(info->attrs); 903 genl_dumpit_info_free(dump_info); 904 return rc; 905 } 906 907 static int genl_family_rcv_msg_dumpit(const struct genl_family *family, 908 struct sk_buff *skb, 909 struct nlmsghdr *nlh, 910 struct netlink_ext_ack *extack, 911 const struct genl_split_ops *ops, 912 int hdrlen, struct net *net) 913 { 914 struct genl_start_context ctx; 915 struct netlink_dump_control c = { 916 .module = family->module, 917 .data = &ctx, 918 .start = genl_start, 919 .dump = genl_dumpit, 920 .done = genl_done, 921 .extack = extack, 922 }; 923 int err; 924 925 ctx.family = family; 926 ctx.nlh = nlh; 927 ctx.extack = extack; 928 ctx.ops = ops; 929 ctx.hdrlen = hdrlen; 930 931 genl_op_unlock(family); 932 err = __netlink_dump_start(net->genl_sock, skb, nlh, &c); 933 genl_op_lock(family); 934 935 return err; 936 } 937 938 static int genl_family_rcv_msg_doit(const struct genl_family *family, 939 struct sk_buff *skb, 940 struct nlmsghdr *nlh, 941 struct netlink_ext_ack *extack, 942 const struct genl_split_ops *ops, 943 int hdrlen, struct net *net) 944 { 945 struct nlattr **attrbuf; 946 struct genl_info info; 947 int err; 948 949 attrbuf = genl_family_rcv_msg_attrs_parse(family, nlh, extack, 950 ops, hdrlen, 951 GENL_DONT_VALIDATE_STRICT); 952 if (IS_ERR(attrbuf)) 953 return PTR_ERR(attrbuf); 954 955 info.snd_seq = nlh->nlmsg_seq; 956 info.snd_portid = NETLINK_CB(skb).portid; 957 info.family = family; 958 info.nlhdr = nlh; 959 info.genlhdr = nlmsg_data(nlh); 960 info.attrs = attrbuf; 961 info.extack = extack; 962 genl_info_net_set(&info, net); 963 memset(&info.user_ptr, 0, sizeof(info.user_ptr)); 964 965 if (ops->pre_doit) { 966 err = ops->pre_doit(ops, skb, &info); 967 if (err) 968 goto out; 969 } 970 971 err = ops->doit(skb, &info); 972 973 if (ops->post_doit) 974 ops->post_doit(ops, skb, &info); 975 976 out: 977 genl_family_rcv_msg_attrs_free(attrbuf); 978 979 return err; 980 } 981 982 static int genl_header_check(const struct genl_family *family, 983 struct nlmsghdr *nlh, struct genlmsghdr *hdr, 984 struct netlink_ext_ack *extack) 985 { 986 u16 flags; 987 988 /* Only for commands added after we started validating */ 989 if (hdr->cmd < family->resv_start_op) 990 return 0; 991 992 if (hdr->reserved) { 993 NL_SET_ERR_MSG(extack, "genlmsghdr.reserved field is not 0"); 994 return -EINVAL; 995 } 996 997 /* Old netlink flags have pretty loose semantics, allow only the flags 998 * consumed by the core where we can enforce the meaning. 999 */ 1000 flags = nlh->nlmsg_flags; 1001 if ((flags & NLM_F_DUMP) == NLM_F_DUMP) /* DUMP is 2 bits */ 1002 flags &= ~NLM_F_DUMP; 1003 if (flags & ~(NLM_F_REQUEST | NLM_F_ACK | NLM_F_ECHO)) { 1004 NL_SET_ERR_MSG(extack, 1005 "ambiguous or reserved bits set in nlmsg_flags"); 1006 return -EINVAL; 1007 } 1008 1009 return 0; 1010 } 1011 1012 static int genl_family_rcv_msg(const struct genl_family *family, 1013 struct sk_buff *skb, 1014 struct nlmsghdr *nlh, 1015 struct netlink_ext_ack *extack) 1016 { 1017 struct net *net = sock_net(skb->sk); 1018 struct genlmsghdr *hdr = nlmsg_data(nlh); 1019 struct genl_split_ops op; 1020 int hdrlen; 1021 u8 flags; 1022 1023 /* this family doesn't exist in this netns */ 1024 if (!family->netnsok && !net_eq(net, &init_net)) 1025 return -ENOENT; 1026 1027 hdrlen = GENL_HDRLEN + family->hdrsize; 1028 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) 1029 return -EINVAL; 1030 1031 if (genl_header_check(family, nlh, hdr, extack)) 1032 return -EINVAL; 1033 1034 flags = (nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP ? 1035 GENL_CMD_CAP_DUMP : GENL_CMD_CAP_DO; 1036 if (genl_get_cmd(hdr->cmd, flags, family, &op)) 1037 return -EOPNOTSUPP; 1038 1039 if ((op.flags & GENL_ADMIN_PERM) && 1040 !netlink_capable(skb, CAP_NET_ADMIN)) 1041 return -EPERM; 1042 1043 if ((op.flags & GENL_UNS_ADMIN_PERM) && 1044 !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) 1045 return -EPERM; 1046 1047 if (flags & GENL_CMD_CAP_DUMP) 1048 return genl_family_rcv_msg_dumpit(family, skb, nlh, extack, 1049 &op, hdrlen, net); 1050 else 1051 return genl_family_rcv_msg_doit(family, skb, nlh, extack, 1052 &op, hdrlen, net); 1053 } 1054 1055 static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, 1056 struct netlink_ext_ack *extack) 1057 { 1058 const struct genl_family *family; 1059 int err; 1060 1061 family = genl_family_find_byid(nlh->nlmsg_type); 1062 if (family == NULL) 1063 return -ENOENT; 1064 1065 genl_op_lock(family); 1066 err = genl_family_rcv_msg(family, skb, nlh, extack); 1067 genl_op_unlock(family); 1068 1069 return err; 1070 } 1071 1072 static void genl_rcv(struct sk_buff *skb) 1073 { 1074 down_read(&cb_lock); 1075 netlink_rcv_skb(skb, &genl_rcv_msg); 1076 up_read(&cb_lock); 1077 } 1078 1079 /************************************************************************** 1080 * Controller 1081 **************************************************************************/ 1082 1083 static struct genl_family genl_ctrl; 1084 1085 static int ctrl_fill_info(const struct genl_family *family, u32 portid, u32 seq, 1086 u32 flags, struct sk_buff *skb, u8 cmd) 1087 { 1088 struct genl_op_iter i; 1089 void *hdr; 1090 1091 hdr = genlmsg_put(skb, portid, seq, &genl_ctrl, flags, cmd); 1092 if (hdr == NULL) 1093 return -1; 1094 1095 if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, family->name) || 1096 nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, family->id) || 1097 nla_put_u32(skb, CTRL_ATTR_VERSION, family->version) || 1098 nla_put_u32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize) || 1099 nla_put_u32(skb, CTRL_ATTR_MAXATTR, family->maxattr)) 1100 goto nla_put_failure; 1101 1102 if (genl_op_iter_init(family, &i)) { 1103 struct nlattr *nla_ops; 1104 1105 nla_ops = nla_nest_start_noflag(skb, CTRL_ATTR_OPS); 1106 if (nla_ops == NULL) 1107 goto nla_put_failure; 1108 1109 while (genl_op_iter_next(&i)) { 1110 struct nlattr *nest; 1111 u32 op_flags; 1112 1113 op_flags = i.flags; 1114 if (i.doit.policy || i.dumpit.policy) 1115 op_flags |= GENL_CMD_CAP_HASPOL; 1116 1117 nest = nla_nest_start_noflag(skb, genl_op_iter_idx(&i)); 1118 if (nest == NULL) 1119 goto nla_put_failure; 1120 1121 if (nla_put_u32(skb, CTRL_ATTR_OP_ID, i.cmd) || 1122 nla_put_u32(skb, CTRL_ATTR_OP_FLAGS, op_flags)) 1123 goto nla_put_failure; 1124 1125 nla_nest_end(skb, nest); 1126 } 1127 1128 nla_nest_end(skb, nla_ops); 1129 } 1130 1131 if (family->n_mcgrps) { 1132 struct nlattr *nla_grps; 1133 int i; 1134 1135 nla_grps = nla_nest_start_noflag(skb, CTRL_ATTR_MCAST_GROUPS); 1136 if (nla_grps == NULL) 1137 goto nla_put_failure; 1138 1139 for (i = 0; i < family->n_mcgrps; i++) { 1140 struct nlattr *nest; 1141 const struct genl_multicast_group *grp; 1142 1143 grp = &family->mcgrps[i]; 1144 1145 nest = nla_nest_start_noflag(skb, i + 1); 1146 if (nest == NULL) 1147 goto nla_put_failure; 1148 1149 if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, 1150 family->mcgrp_offset + i) || 1151 nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME, 1152 grp->name)) 1153 goto nla_put_failure; 1154 1155 nla_nest_end(skb, nest); 1156 } 1157 nla_nest_end(skb, nla_grps); 1158 } 1159 1160 genlmsg_end(skb, hdr); 1161 return 0; 1162 1163 nla_put_failure: 1164 genlmsg_cancel(skb, hdr); 1165 return -EMSGSIZE; 1166 } 1167 1168 static int ctrl_fill_mcgrp_info(const struct genl_family *family, 1169 const struct genl_multicast_group *grp, 1170 int grp_id, u32 portid, u32 seq, u32 flags, 1171 struct sk_buff *skb, u8 cmd) 1172 { 1173 void *hdr; 1174 struct nlattr *nla_grps; 1175 struct nlattr *nest; 1176 1177 hdr = genlmsg_put(skb, portid, seq, &genl_ctrl, flags, cmd); 1178 if (hdr == NULL) 1179 return -1; 1180 1181 if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, family->name) || 1182 nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, family->id)) 1183 goto nla_put_failure; 1184 1185 nla_grps = nla_nest_start_noflag(skb, CTRL_ATTR_MCAST_GROUPS); 1186 if (nla_grps == NULL) 1187 goto nla_put_failure; 1188 1189 nest = nla_nest_start_noflag(skb, 1); 1190 if (nest == NULL) 1191 goto nla_put_failure; 1192 1193 if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, grp_id) || 1194 nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME, 1195 grp->name)) 1196 goto nla_put_failure; 1197 1198 nla_nest_end(skb, nest); 1199 nla_nest_end(skb, nla_grps); 1200 1201 genlmsg_end(skb, hdr); 1202 return 0; 1203 1204 nla_put_failure: 1205 genlmsg_cancel(skb, hdr); 1206 return -EMSGSIZE; 1207 } 1208 1209 static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) 1210 { 1211 int n = 0; 1212 struct genl_family *rt; 1213 struct net *net = sock_net(skb->sk); 1214 int fams_to_skip = cb->args[0]; 1215 unsigned int id; 1216 1217 idr_for_each_entry(&genl_fam_idr, rt, id) { 1218 if (!rt->netnsok && !net_eq(net, &init_net)) 1219 continue; 1220 1221 if (n++ < fams_to_skip) 1222 continue; 1223 1224 if (ctrl_fill_info(rt, NETLINK_CB(cb->skb).portid, 1225 cb->nlh->nlmsg_seq, NLM_F_MULTI, 1226 skb, CTRL_CMD_NEWFAMILY) < 0) { 1227 n--; 1228 break; 1229 } 1230 } 1231 1232 cb->args[0] = n; 1233 return skb->len; 1234 } 1235 1236 static struct sk_buff *ctrl_build_family_msg(const struct genl_family *family, 1237 u32 portid, int seq, u8 cmd) 1238 { 1239 struct sk_buff *skb; 1240 int err; 1241 1242 skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); 1243 if (skb == NULL) 1244 return ERR_PTR(-ENOBUFS); 1245 1246 err = ctrl_fill_info(family, portid, seq, 0, skb, cmd); 1247 if (err < 0) { 1248 nlmsg_free(skb); 1249 return ERR_PTR(err); 1250 } 1251 1252 return skb; 1253 } 1254 1255 static struct sk_buff * 1256 ctrl_build_mcgrp_msg(const struct genl_family *family, 1257 const struct genl_multicast_group *grp, 1258 int grp_id, u32 portid, int seq, u8 cmd) 1259 { 1260 struct sk_buff *skb; 1261 int err; 1262 1263 skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); 1264 if (skb == NULL) 1265 return ERR_PTR(-ENOBUFS); 1266 1267 err = ctrl_fill_mcgrp_info(family, grp, grp_id, portid, 1268 seq, 0, skb, cmd); 1269 if (err < 0) { 1270 nlmsg_free(skb); 1271 return ERR_PTR(err); 1272 } 1273 1274 return skb; 1275 } 1276 1277 static const struct nla_policy ctrl_policy_family[] = { 1278 [CTRL_ATTR_FAMILY_ID] = { .type = NLA_U16 }, 1279 [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_NUL_STRING, 1280 .len = GENL_NAMSIZ - 1 }, 1281 }; 1282 1283 static int ctrl_getfamily(struct sk_buff *skb, struct genl_info *info) 1284 { 1285 struct sk_buff *msg; 1286 const struct genl_family *res = NULL; 1287 int err = -EINVAL; 1288 1289 if (info->attrs[CTRL_ATTR_FAMILY_ID]) { 1290 u16 id = nla_get_u16(info->attrs[CTRL_ATTR_FAMILY_ID]); 1291 res = genl_family_find_byid(id); 1292 err = -ENOENT; 1293 } 1294 1295 if (info->attrs[CTRL_ATTR_FAMILY_NAME]) { 1296 char *name; 1297 1298 name = nla_data(info->attrs[CTRL_ATTR_FAMILY_NAME]); 1299 res = genl_family_find_byname(name); 1300 #ifdef CONFIG_MODULES 1301 if (res == NULL) { 1302 genl_unlock(); 1303 up_read(&cb_lock); 1304 request_module("net-pf-%d-proto-%d-family-%s", 1305 PF_NETLINK, NETLINK_GENERIC, name); 1306 down_read(&cb_lock); 1307 genl_lock(); 1308 res = genl_family_find_byname(name); 1309 } 1310 #endif 1311 err = -ENOENT; 1312 } 1313 1314 if (res == NULL) 1315 return err; 1316 1317 if (!res->netnsok && !net_eq(genl_info_net(info), &init_net)) { 1318 /* family doesn't exist here */ 1319 return -ENOENT; 1320 } 1321 1322 msg = ctrl_build_family_msg(res, info->snd_portid, info->snd_seq, 1323 CTRL_CMD_NEWFAMILY); 1324 if (IS_ERR(msg)) 1325 return PTR_ERR(msg); 1326 1327 return genlmsg_reply(msg, info); 1328 } 1329 1330 static int genl_ctrl_event(int event, const struct genl_family *family, 1331 const struct genl_multicast_group *grp, 1332 int grp_id) 1333 { 1334 struct sk_buff *msg; 1335 1336 /* genl is still initialising */ 1337 if (!init_net.genl_sock) 1338 return 0; 1339 1340 switch (event) { 1341 case CTRL_CMD_NEWFAMILY: 1342 case CTRL_CMD_DELFAMILY: 1343 WARN_ON(grp); 1344 msg = ctrl_build_family_msg(family, 0, 0, event); 1345 break; 1346 case CTRL_CMD_NEWMCAST_GRP: 1347 case CTRL_CMD_DELMCAST_GRP: 1348 BUG_ON(!grp); 1349 msg = ctrl_build_mcgrp_msg(family, grp, grp_id, 0, 0, event); 1350 break; 1351 default: 1352 return -EINVAL; 1353 } 1354 1355 if (IS_ERR(msg)) 1356 return PTR_ERR(msg); 1357 1358 if (!family->netnsok) 1359 genlmsg_multicast_netns(&genl_ctrl, &init_net, msg, 0, 1360 0, GFP_KERNEL); 1361 else 1362 genlmsg_multicast_allns(&genl_ctrl, msg, 0, 0); 1363 1364 return 0; 1365 } 1366 1367 struct ctrl_dump_policy_ctx { 1368 struct netlink_policy_dump_state *state; 1369 const struct genl_family *rt; 1370 struct genl_op_iter *op_iter; 1371 u32 op; 1372 u16 fam_id; 1373 u8 dump_map:1, 1374 single_op:1; 1375 }; 1376 1377 static const struct nla_policy ctrl_policy_policy[] = { 1378 [CTRL_ATTR_FAMILY_ID] = { .type = NLA_U16 }, 1379 [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_NUL_STRING, 1380 .len = GENL_NAMSIZ - 1 }, 1381 [CTRL_ATTR_OP] = { .type = NLA_U32 }, 1382 }; 1383 1384 static int ctrl_dumppolicy_start(struct netlink_callback *cb) 1385 { 1386 const struct genl_dumpit_info *info = genl_dumpit_info(cb); 1387 struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx; 1388 struct nlattr **tb = info->info.attrs; 1389 const struct genl_family *rt; 1390 struct genl_op_iter i; 1391 int err; 1392 1393 BUILD_BUG_ON(sizeof(*ctx) > sizeof(cb->ctx)); 1394 1395 if (!tb[CTRL_ATTR_FAMILY_ID] && !tb[CTRL_ATTR_FAMILY_NAME]) 1396 return -EINVAL; 1397 1398 if (tb[CTRL_ATTR_FAMILY_ID]) { 1399 ctx->fam_id = nla_get_u16(tb[CTRL_ATTR_FAMILY_ID]); 1400 } else { 1401 rt = genl_family_find_byname( 1402 nla_data(tb[CTRL_ATTR_FAMILY_NAME])); 1403 if (!rt) 1404 return -ENOENT; 1405 ctx->fam_id = rt->id; 1406 } 1407 1408 rt = genl_family_find_byid(ctx->fam_id); 1409 if (!rt) 1410 return -ENOENT; 1411 1412 ctx->rt = rt; 1413 1414 if (tb[CTRL_ATTR_OP]) { 1415 struct genl_split_ops doit, dump; 1416 1417 ctx->single_op = true; 1418 ctx->op = nla_get_u32(tb[CTRL_ATTR_OP]); 1419 1420 err = genl_get_cmd_both(ctx->op, rt, &doit, &dump); 1421 if (err) { 1422 NL_SET_BAD_ATTR(cb->extack, tb[CTRL_ATTR_OP]); 1423 return err; 1424 } 1425 1426 if (doit.policy) { 1427 err = netlink_policy_dump_add_policy(&ctx->state, 1428 doit.policy, 1429 doit.maxattr); 1430 if (err) 1431 goto err_free_state; 1432 } 1433 if (dump.policy) { 1434 err = netlink_policy_dump_add_policy(&ctx->state, 1435 dump.policy, 1436 dump.maxattr); 1437 if (err) 1438 goto err_free_state; 1439 } 1440 1441 if (!ctx->state) 1442 return -ENODATA; 1443 1444 ctx->dump_map = 1; 1445 return 0; 1446 } 1447 1448 ctx->op_iter = kmalloc(sizeof(*ctx->op_iter), GFP_KERNEL); 1449 if (!ctx->op_iter) 1450 return -ENOMEM; 1451 1452 genl_op_iter_init(rt, ctx->op_iter); 1453 ctx->dump_map = genl_op_iter_next(ctx->op_iter); 1454 1455 for (genl_op_iter_init(rt, &i); genl_op_iter_next(&i); ) { 1456 if (i.doit.policy) { 1457 err = netlink_policy_dump_add_policy(&ctx->state, 1458 i.doit.policy, 1459 i.doit.maxattr); 1460 if (err) 1461 goto err_free_state; 1462 } 1463 if (i.dumpit.policy) { 1464 err = netlink_policy_dump_add_policy(&ctx->state, 1465 i.dumpit.policy, 1466 i.dumpit.maxattr); 1467 if (err) 1468 goto err_free_state; 1469 } 1470 } 1471 1472 if (!ctx->state) { 1473 err = -ENODATA; 1474 goto err_free_op_iter; 1475 } 1476 return 0; 1477 1478 err_free_state: 1479 netlink_policy_dump_free(ctx->state); 1480 err_free_op_iter: 1481 kfree(ctx->op_iter); 1482 return err; 1483 } 1484 1485 static void *ctrl_dumppolicy_prep(struct sk_buff *skb, 1486 struct netlink_callback *cb) 1487 { 1488 struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx; 1489 void *hdr; 1490 1491 hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, 1492 cb->nlh->nlmsg_seq, &genl_ctrl, 1493 NLM_F_MULTI, CTRL_CMD_GETPOLICY); 1494 if (!hdr) 1495 return NULL; 1496 1497 if (nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, ctx->fam_id)) 1498 return NULL; 1499 1500 return hdr; 1501 } 1502 1503 static int ctrl_dumppolicy_put_op(struct sk_buff *skb, 1504 struct netlink_callback *cb, 1505 struct genl_split_ops *doit, 1506 struct genl_split_ops *dumpit) 1507 { 1508 struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx; 1509 struct nlattr *nest_pol, *nest_op; 1510 void *hdr; 1511 int idx; 1512 1513 /* skip if we have nothing to show */ 1514 if (!doit->policy && !dumpit->policy) 1515 return 0; 1516 1517 hdr = ctrl_dumppolicy_prep(skb, cb); 1518 if (!hdr) 1519 return -ENOBUFS; 1520 1521 nest_pol = nla_nest_start(skb, CTRL_ATTR_OP_POLICY); 1522 if (!nest_pol) 1523 goto err; 1524 1525 nest_op = nla_nest_start(skb, doit->cmd); 1526 if (!nest_op) 1527 goto err; 1528 1529 if (doit->policy) { 1530 idx = netlink_policy_dump_get_policy_idx(ctx->state, 1531 doit->policy, 1532 doit->maxattr); 1533 1534 if (nla_put_u32(skb, CTRL_ATTR_POLICY_DO, idx)) 1535 goto err; 1536 } 1537 if (dumpit->policy) { 1538 idx = netlink_policy_dump_get_policy_idx(ctx->state, 1539 dumpit->policy, 1540 dumpit->maxattr); 1541 1542 if (nla_put_u32(skb, CTRL_ATTR_POLICY_DUMP, idx)) 1543 goto err; 1544 } 1545 1546 nla_nest_end(skb, nest_op); 1547 nla_nest_end(skb, nest_pol); 1548 genlmsg_end(skb, hdr); 1549 1550 return 0; 1551 err: 1552 genlmsg_cancel(skb, hdr); 1553 return -ENOBUFS; 1554 } 1555 1556 static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb) 1557 { 1558 struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx; 1559 void *hdr; 1560 1561 if (ctx->dump_map) { 1562 if (ctx->single_op) { 1563 struct genl_split_ops doit, dumpit; 1564 1565 if (WARN_ON(genl_get_cmd_both(ctx->op, ctx->rt, 1566 &doit, &dumpit))) 1567 return -ENOENT; 1568 1569 if (ctrl_dumppolicy_put_op(skb, cb, &doit, &dumpit)) 1570 return skb->len; 1571 1572 /* done with the per-op policy index list */ 1573 ctx->dump_map = 0; 1574 } 1575 1576 while (ctx->dump_map) { 1577 if (ctrl_dumppolicy_put_op(skb, cb, 1578 &ctx->op_iter->doit, 1579 &ctx->op_iter->dumpit)) 1580 return skb->len; 1581 1582 ctx->dump_map = genl_op_iter_next(ctx->op_iter); 1583 } 1584 } 1585 1586 while (netlink_policy_dump_loop(ctx->state)) { 1587 struct nlattr *nest; 1588 1589 hdr = ctrl_dumppolicy_prep(skb, cb); 1590 if (!hdr) 1591 goto nla_put_failure; 1592 1593 nest = nla_nest_start(skb, CTRL_ATTR_POLICY); 1594 if (!nest) 1595 goto nla_put_failure; 1596 1597 if (netlink_policy_dump_write(skb, ctx->state)) 1598 goto nla_put_failure; 1599 1600 nla_nest_end(skb, nest); 1601 1602 genlmsg_end(skb, hdr); 1603 } 1604 1605 return skb->len; 1606 1607 nla_put_failure: 1608 genlmsg_cancel(skb, hdr); 1609 return skb->len; 1610 } 1611 1612 static int ctrl_dumppolicy_done(struct netlink_callback *cb) 1613 { 1614 struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx; 1615 1616 kfree(ctx->op_iter); 1617 netlink_policy_dump_free(ctx->state); 1618 return 0; 1619 } 1620 1621 static const struct genl_split_ops genl_ctrl_ops[] = { 1622 { 1623 .cmd = CTRL_CMD_GETFAMILY, 1624 .validate = GENL_DONT_VALIDATE_STRICT, 1625 .policy = ctrl_policy_family, 1626 .maxattr = ARRAY_SIZE(ctrl_policy_family) - 1, 1627 .doit = ctrl_getfamily, 1628 .flags = GENL_CMD_CAP_DO, 1629 }, 1630 { 1631 .cmd = CTRL_CMD_GETFAMILY, 1632 .validate = GENL_DONT_VALIDATE_DUMP, 1633 .policy = ctrl_policy_family, 1634 .maxattr = ARRAY_SIZE(ctrl_policy_family) - 1, 1635 .dumpit = ctrl_dumpfamily, 1636 .flags = GENL_CMD_CAP_DUMP, 1637 }, 1638 { 1639 .cmd = CTRL_CMD_GETPOLICY, 1640 .policy = ctrl_policy_policy, 1641 .maxattr = ARRAY_SIZE(ctrl_policy_policy) - 1, 1642 .start = ctrl_dumppolicy_start, 1643 .dumpit = ctrl_dumppolicy, 1644 .done = ctrl_dumppolicy_done, 1645 .flags = GENL_CMD_CAP_DUMP, 1646 }, 1647 }; 1648 1649 static const struct genl_multicast_group genl_ctrl_groups[] = { 1650 { .name = "notify", }, 1651 }; 1652 1653 static struct genl_family genl_ctrl __ro_after_init = { 1654 .module = THIS_MODULE, 1655 .split_ops = genl_ctrl_ops, 1656 .n_split_ops = ARRAY_SIZE(genl_ctrl_ops), 1657 .resv_start_op = CTRL_CMD_GETPOLICY + 1, 1658 .mcgrps = genl_ctrl_groups, 1659 .n_mcgrps = ARRAY_SIZE(genl_ctrl_groups), 1660 .id = GENL_ID_CTRL, 1661 .name = "nlctrl", 1662 .version = 0x2, 1663 .netnsok = true, 1664 }; 1665 1666 static int genl_bind(struct net *net, int group) 1667 { 1668 const struct genl_family *family; 1669 unsigned int id; 1670 int ret = 0; 1671 1672 down_read(&cb_lock); 1673 1674 idr_for_each_entry(&genl_fam_idr, family, id) { 1675 const struct genl_multicast_group *grp; 1676 int i; 1677 1678 if (family->n_mcgrps == 0) 1679 continue; 1680 1681 i = group - family->mcgrp_offset; 1682 if (i < 0 || i >= family->n_mcgrps) 1683 continue; 1684 1685 grp = &family->mcgrps[i]; 1686 if ((grp->flags & GENL_UNS_ADMIN_PERM) && 1687 !ns_capable(net->user_ns, CAP_NET_ADMIN)) 1688 ret = -EPERM; 1689 if (grp->cap_sys_admin && 1690 !ns_capable(net->user_ns, CAP_SYS_ADMIN)) 1691 ret = -EPERM; 1692 1693 break; 1694 } 1695 1696 up_read(&cb_lock); 1697 return ret; 1698 } 1699 1700 static int __net_init genl_pernet_init(struct net *net) 1701 { 1702 struct netlink_kernel_cfg cfg = { 1703 .input = genl_rcv, 1704 .flags = NL_CFG_F_NONROOT_RECV, 1705 .bind = genl_bind, 1706 }; 1707 1708 /* we'll bump the group number right afterwards */ 1709 net->genl_sock = netlink_kernel_create(net, NETLINK_GENERIC, &cfg); 1710 1711 if (!net->genl_sock && net_eq(net, &init_net)) 1712 panic("GENL: Cannot initialize generic netlink\n"); 1713 1714 if (!net->genl_sock) 1715 return -ENOMEM; 1716 1717 return 0; 1718 } 1719 1720 static void __net_exit genl_pernet_exit(struct net *net) 1721 { 1722 netlink_kernel_release(net->genl_sock); 1723 net->genl_sock = NULL; 1724 } 1725 1726 static struct pernet_operations genl_pernet_ops = { 1727 .init = genl_pernet_init, 1728 .exit = genl_pernet_exit, 1729 }; 1730 1731 static int __init genl_init(void) 1732 { 1733 int err; 1734 1735 err = genl_register_family(&genl_ctrl); 1736 if (err < 0) 1737 goto problem; 1738 1739 err = register_pernet_subsys(&genl_pernet_ops); 1740 if (err) 1741 goto problem; 1742 1743 return 0; 1744 1745 problem: 1746 panic("GENL: Cannot register controller: %d\n", err); 1747 } 1748 1749 core_initcall(genl_init); 1750 1751 static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group) 1752 { 1753 struct sk_buff *tmp; 1754 struct net *net, *prev = NULL; 1755 bool delivered = false; 1756 int err; 1757 1758 rcu_read_lock(); 1759 for_each_net_rcu(net) { 1760 if (prev) { 1761 tmp = skb_clone(skb, GFP_ATOMIC); 1762 if (!tmp) { 1763 err = -ENOMEM; 1764 goto error; 1765 } 1766 err = nlmsg_multicast(prev->genl_sock, tmp, 1767 portid, group, GFP_ATOMIC); 1768 if (!err) 1769 delivered = true; 1770 else if (err != -ESRCH) 1771 goto error; 1772 } 1773 1774 prev = net; 1775 } 1776 err = nlmsg_multicast(prev->genl_sock, skb, portid, group, GFP_ATOMIC); 1777 1778 rcu_read_unlock(); 1779 1780 if (!err) 1781 delivered = true; 1782 else if (err != -ESRCH) 1783 return err; 1784 return delivered ? 0 : -ESRCH; 1785 error: 1786 rcu_read_unlock(); 1787 1788 kfree_skb(skb); 1789 return err; 1790 } 1791 1792 int genlmsg_multicast_allns(const struct genl_family *family, 1793 struct sk_buff *skb, u32 portid, 1794 unsigned int group) 1795 { 1796 if (WARN_ON_ONCE(group >= family->n_mcgrps)) 1797 return -EINVAL; 1798 1799 group = family->mcgrp_offset + group; 1800 return genlmsg_mcast(skb, portid, group); 1801 } 1802 EXPORT_SYMBOL(genlmsg_multicast_allns); 1803 1804 void genl_notify(const struct genl_family *family, struct sk_buff *skb, 1805 struct genl_info *info, u32 group, gfp_t flags) 1806 { 1807 struct net *net = genl_info_net(info); 1808 struct sock *sk = net->genl_sock; 1809 1810 if (WARN_ON_ONCE(group >= family->n_mcgrps)) 1811 return; 1812 1813 group = family->mcgrp_offset + group; 1814 nlmsg_notify(sk, skb, info->snd_portid, group, 1815 nlmsg_report(info->nlhdr), flags); 1816 } 1817 EXPORT_SYMBOL(genl_notify); 1818