Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b963ea89 authored by David S. Miller's avatar David S. Miller
Browse files

netlink: Make NETLINK_USERSOCK work again.



Once we started enforcing the a nl_table[] entry exist for
a protocol, NETLINK_USERSOCK stopped working.  Add a dummy
table entry so that it works again.

Reported-by: default avatarThomas Voegtle <tv@lio96.de>
Tested-by: default avatarThomas Voegtle <tv@lio96.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 628e300c
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -2102,6 +2102,26 @@ static void __net_exit netlink_net_exit(struct net *net)
#endif
}

static void __init netlink_add_usersock_entry(void)
{
	unsigned long *listeners;
	int groups = 32;

	listeners = kzalloc(NLGRPSZ(groups) + sizeof(struct listeners_rcu_head),
			    GFP_KERNEL);
	if (!listeners)
		panic("netlink_add_usersock_entry: Cannot allocate listneres\n");

	netlink_table_grab();

	nl_table[NETLINK_USERSOCK].groups = groups;
	nl_table[NETLINK_USERSOCK].listeners = listeners;
	nl_table[NETLINK_USERSOCK].module = THIS_MODULE;
	nl_table[NETLINK_USERSOCK].registered = 1;

	netlink_table_ungrab();
}

static struct pernet_operations __net_initdata netlink_net_ops = {
	.init = netlink_net_init,
	.exit = netlink_net_exit,
@@ -2150,6 +2170,8 @@ static int __init netlink_proto_init(void)
		hash->rehash_time = jiffies;
	}

	netlink_add_usersock_entry();

	sock_register(&netlink_family_ops);
	register_pernet_subsys(&netlink_net_ops);
	/* The netlink device handler may be needed early. */