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