git: 1edc3b6e5693 - main - netlink: unregister groups along with family
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 08 Nov 2022 11:47:58 UTC
The branch main has been updated by bapt:
URL: https://cgit.FreeBSD.org/src/commit/?id=1edc3b6e56932e423d778df484ffca3bd2af9e97
commit 1edc3b6e56932e423d778df484ffca3bd2af9e97
Author: Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2022-11-08 08:02:43 +0000
Commit: Baptiste Daroussin <bapt@FreeBSD.org>
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));