diff options
author | Johannes Berg <johannes.berg@intel.com> | 2016-10-24 08:40:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-10-27 16:16:09 -0400 |
commit | 56989f6d8568c21257dcec0f5e644d5570ba3281 (patch) | |
tree | 60a6b44865e68e25dbc8bcc38d0000e12106f2d8 /net/openvswitch/datapath.c | |
parent | 2ae0f17df1cd52aafd1ab0415ea1f1dd56dc0e2a (diff) |
genetlink: mark families as __ro_after_init
Now genl_register_family() is the only thing (other than the
users themselves, perhaps, but I didn't find any doing that)
writing to the family struct.
In all families that I found, genl_register_family() is only
called from __init functions (some indirectly, in which case
I've add __init annotations to clarifly things), so all can
actually be marked __ro_after_init.
This protects the data structure from accidental corruption.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch/datapath.c')
-rw-r--r-- | net/openvswitch/datapath.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index ad6a111a0014..fa8760176b7d 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c | |||
@@ -670,7 +670,7 @@ static const struct genl_ops dp_packet_genl_ops[] = { | |||
670 | } | 670 | } |
671 | }; | 671 | }; |
672 | 672 | ||
673 | static struct genl_family dp_packet_genl_family = { | 673 | static struct genl_family dp_packet_genl_family __ro_after_init = { |
674 | .hdrsize = sizeof(struct ovs_header), | 674 | .hdrsize = sizeof(struct ovs_header), |
675 | .name = OVS_PACKET_FAMILY, | 675 | .name = OVS_PACKET_FAMILY, |
676 | .version = OVS_PACKET_VERSION, | 676 | .version = OVS_PACKET_VERSION, |
@@ -1435,7 +1435,7 @@ static const struct genl_ops dp_flow_genl_ops[] = { | |||
1435 | }, | 1435 | }, |
1436 | }; | 1436 | }; |
1437 | 1437 | ||
1438 | static struct genl_family dp_flow_genl_family = { | 1438 | static struct genl_family dp_flow_genl_family __ro_after_init = { |
1439 | .hdrsize = sizeof(struct ovs_header), | 1439 | .hdrsize = sizeof(struct ovs_header), |
1440 | .name = OVS_FLOW_FAMILY, | 1440 | .name = OVS_FLOW_FAMILY, |
1441 | .version = OVS_FLOW_VERSION, | 1441 | .version = OVS_FLOW_VERSION, |
@@ -1821,7 +1821,7 @@ static const struct genl_ops dp_datapath_genl_ops[] = { | |||
1821 | }, | 1821 | }, |
1822 | }; | 1822 | }; |
1823 | 1823 | ||
1824 | static struct genl_family dp_datapath_genl_family = { | 1824 | static struct genl_family dp_datapath_genl_family __ro_after_init = { |
1825 | .hdrsize = sizeof(struct ovs_header), | 1825 | .hdrsize = sizeof(struct ovs_header), |
1826 | .name = OVS_DATAPATH_FAMILY, | 1826 | .name = OVS_DATAPATH_FAMILY, |
1827 | .version = OVS_DATAPATH_VERSION, | 1827 | .version = OVS_DATAPATH_VERSION, |
@@ -2243,7 +2243,7 @@ static const struct genl_ops dp_vport_genl_ops[] = { | |||
2243 | }, | 2243 | }, |
2244 | }; | 2244 | }; |
2245 | 2245 | ||
2246 | struct genl_family dp_vport_genl_family = { | 2246 | struct genl_family dp_vport_genl_family __ro_after_init = { |
2247 | .hdrsize = sizeof(struct ovs_header), | 2247 | .hdrsize = sizeof(struct ovs_header), |
2248 | .name = OVS_VPORT_FAMILY, | 2248 | .name = OVS_VPORT_FAMILY, |
2249 | .version = OVS_VPORT_VERSION, | 2249 | .version = OVS_VPORT_VERSION, |
@@ -2272,7 +2272,7 @@ static void dp_unregister_genl(int n_families) | |||
2272 | genl_unregister_family(dp_genl_families[i]); | 2272 | genl_unregister_family(dp_genl_families[i]); |
2273 | } | 2273 | } |
2274 | 2274 | ||
2275 | static int dp_register_genl(void) | 2275 | static int __init dp_register_genl(void) |
2276 | { | 2276 | { |
2277 | int err; | 2277 | int err; |
2278 | int i; | 2278 | int i; |