mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
genetlink: make multicast groups const, prevent abuse
Register generic netlink multicast groups as an array with the family and give them contiguous group IDs. Then instead of passing the global group ID to the various functions that send messages, pass the ID relative to the family - for most families that's just 0 because the only have one group. This avoids the list_head and ID in each group, adding a new field for the mcast group ID offset to the family. At the same time, this allows us to prevent abusing groups again like the quota and dropmon code did, since we can now check that a family only uses a group it owns. Signed-off-by: Johannes Berg <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
68eb55031d
commit
2a94fe48f3
19 changed files with 377 additions and 433 deletions
|
|
@ -1606,15 +1606,17 @@ exit:
|
|||
EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_name);
|
||||
|
||||
#ifdef CONFIG_NET
|
||||
static const struct genl_multicast_group thermal_event_mcgrps[] = {
|
||||
{ .name = THERMAL_GENL_MCAST_GROUP_NAME, },
|
||||
};
|
||||
|
||||
static struct genl_family thermal_event_genl_family = {
|
||||
.id = GENL_ID_GENERATE,
|
||||
.name = THERMAL_GENL_FAMILY_NAME,
|
||||
.version = THERMAL_GENL_VERSION,
|
||||
.maxattr = THERMAL_GENL_ATTR_MAX,
|
||||
};
|
||||
|
||||
static struct genl_multicast_group thermal_event_mcgrp = {
|
||||
.name = THERMAL_GENL_MCAST_GROUP_NAME,
|
||||
.mcgrps = thermal_event_mcgrps,
|
||||
.n_mcgrps = ARRAY_SIZE(thermal_event_mcgrps),
|
||||
};
|
||||
|
||||
int thermal_generate_netlink_event(struct thermal_zone_device *tz,
|
||||
|
|
@ -1676,7 +1678,7 @@ int thermal_generate_netlink_event(struct thermal_zone_device *tz,
|
|||
}
|
||||
|
||||
result = genlmsg_multicast(&thermal_event_genl_family, skb, 0,
|
||||
thermal_event_mcgrp.id, GFP_ATOMIC);
|
||||
0, GFP_ATOMIC);
|
||||
if (result)
|
||||
dev_err(&tz->device, "Failed to send netlink event:%d", result);
|
||||
|
||||
|
|
@ -1686,17 +1688,7 @@ EXPORT_SYMBOL_GPL(thermal_generate_netlink_event);
|
|||
|
||||
static int genetlink_init(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
result = genl_register_family(&thermal_event_genl_family);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
result = genl_register_mc_group(&thermal_event_genl_family,
|
||||
&thermal_event_mcgrp);
|
||||
if (result)
|
||||
genl_unregister_family(&thermal_event_genl_family);
|
||||
return result;
|
||||
return genl_register_family(&thermal_event_genl_family);
|
||||
}
|
||||
|
||||
static void genetlink_exit(void)
|
||||
|
|
|
|||
Loading…
Reference in a new issue