The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=1edc3b6e56932e423d778df484ffca3bd2af9e97
commit 1edc3b6e56932e423d778df484ffca3bd2af9e97 Author: Baptiste Daroussin <[email protected]> AuthorDate: 2022-11-08 08:02:43 +0000 Commit: Baptiste Daroussin <[email protected]> CommitDate: 2022-11-08 11:46:58 +0000 netlink: unregister groups along with family Differential Revision: https://reviews.freebsd.org/D37308 Reviewed by: melifaro --- sys/netlink/netlink_generic.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sys/netlink/netlink_generic.c b/sys/netlink/netlink_generic.c index de45048ff519..267024dfee4b 100644 --- a/sys/netlink/netlink_generic.c +++ b/sys/netlink/netlink_generic.c @@ -133,6 +133,22 @@ free_family(struct genl_family *gf) free(gf->family_cmds, M_NETLINK); } +/* + * unregister groups of a given family + */ +static void +unregister_groups(const struct genl_family *gf) +{ + + for (int i = 0; i < MAX_GROUPS; i++) { + struct genl_group *gg = &groups[i]; + if (gg->group_family == gf && gg->group_name != NULL) { + gg->group_family = NULL; + gg->group_name = NULL; + } + } +} + /* * Can sleep, I guess */ @@ -148,6 +164,7 @@ genl_unregister_family(const char *family_name) if (gf != NULL) { found = true; + unregister_groups(gf); /* TODO: zero pointer first */ free_family(gf); bzero(gf, sizeof(*gf));
