Repository : ssh://git@open-mesh.org/batman-adv
On branches: ecsv/genl,master,next
commit c776b4a071d82f8ad0e35d1b9472758ecf69a75e Author: Johannes Berg johannes.berg@intel.com Date: Mon Oct 24 14:40:05 2016 +0200
batman-adv: 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 [sven@narfation.org: Add compat code] Signed-off-by: Sven Eckelmann sven@narfation.org
c776b4a071d82f8ad0e35d1b9472758ecf69a75e compat-include/linux/{export.h => cache.h} | 18 ++++++++++++------ net/batman-adv/netlink.c | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/compat-include/linux/export.h b/compat-include/linux/cache.h similarity index 67% copy from compat-include/linux/export.h copy to compat-include/linux/cache.h index c43b35b..93dff58 100644 --- a/compat-include/linux/export.h +++ b/compat-include/linux/cache.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2007-2016 B.A.T.M.A.N. contributors: +/* Copyright (C) 2007-2016 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * @@ -18,12 +18,18 @@ * of the Linux kernel. */
-#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_EXPORT_H_ -#define _NET_BATMAN_ADV_COMPAT_LINUX_EXPORT_H_ +#ifndef _NET_BATMAN_ADV_COMPAT_LINUX_CACHE_H +#define _NET_BATMAN_ADV_COMPAT_LINUX_CACHE_H
#include <linux/version.h> -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) -#include_next <linux/export.h> +#include_next <linux/cache.h> + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) + +#ifndef __ro_after_init +#define __ro_after_init #endif
-#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_EXPORT_H_ */ +#endif /* < KERNEL_VERSION(4, 6, 0) */ + +#endif /* _NET_BATMAN_ADV_COMPAT_LINUX_CACHE_H */ diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c index 5dfc5c4..5d38c77 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c @@ -603,7 +603,7 @@ static const struct genl_ops batadv_netlink_ops[] = {
};
-struct genl_family batadv_netlink_family = { +struct genl_family batadv_netlink_family __ro_after_init = { .hdrsize = 0, .name = BATADV_NL_NAME, .version = 1,