[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230809105006.1198165-9-j.granados@samsung.com>
Date: Wed, 9 Aug 2023 12:50:00 +0200
From: Joel Granados <joel.granados@...il.com>
To: mcgrof@...nel.org
Cc: rds-devel@....oracle.com, "David S. Miller" <davem@...emloft.net>,
Florian Westphal <fw@...len.de>, willy@...radead.org,
Jan Karcher <jaka@...ux.ibm.com>,
Wen Gu <guwen@...ux.alibaba.com>,
Simon Horman <horms@...ge.net.au>,
Tony Lu <tonylu@...ux.alibaba.com>, linux-wpan@...r.kernel.org,
Matthieu Baerts <matthieu.baerts@...sares.net>,
Christian Borntraeger <borntraeger@...ux.ibm.com>,
mptcp@...ts.linux.dev, Heiko Carstens <hca@...ux.ibm.com>,
Stefan Schmidt <stefan@...enfreihafen.org>,
Will Deacon <will@...nel.org>, Julian Anastasov <ja@....bg>,
netfilter-devel@...r.kernel.org, Joerg Reuter <jreuter@...na.de>,
linux-kernel@...r.kernel.org,
Alexander Gordeev <agordeev@...ux.ibm.com>,
linux-sctp@...r.kernel.org, Xin Long <lucien.xin@...il.com>,
Herbert Xu <herbert@...dor.apana.org.au>,
linux-hams@...r.kernel.org, Vasily Gorbik <gor@...ux.ibm.com>,
coreteam@...filter.org, Ralf Baechle <ralf@...ux-mips.org>,
Steffen Klassert <steffen.klassert@...unet.com>,
Pablo Neira Ayuso <pablo@...filter.org>,
keescook@...omium.org, Roopa Prabhu <roopa@...dia.com>,
David Ahern <dsahern@...nel.org>,
linux-arm-kernel@...ts.infradead.org,
Catalin Marinas <catalin.marinas@....com>,
Jozsef Kadlecsik <kadlec@...filter.org>,
Wenjia Zhang <wenjia@...ux.ibm.com>, josh@...htriplett.org,
linux-fsdevel@...r.kernel.org,
Alexander Aring <alex.aring@...il.com>,
Nikolay Aleksandrov <razor@...ckwall.org>,
netdev@...r.kernel.org,
Santosh Shilimkar <santosh.shilimkar@...cle.com>,
linux-s390@...r.kernel.org, Sven Schnelle <svens@...ux.ibm.com>,
"D. Wythe" <alibuda@...ux.alibaba.com>,
Eric Dumazet <edumazet@...gle.com>, lvs-devel@...r.kernel.org,
linux-rdma@...r.kernel.org, Paolo Abeni <pabeni@...hat.com>,
Iurii Zaikin <yzaikin@...gle.com>,
Marcelo Ricardo Leitner <marcelo.leitner@...il.com>,
bridge@...ts.linux-foundation.org,
Karsten Graul <kgraul@...ux.ibm.com>,
Mat Martineau <martineau@...nel.org>,
Miquel Raynal <miquel.raynal@...tlin.com>,
Jakub Kicinski <kuba@...nel.org>,
Joel Granados <j.granados@...sung.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Subject: [PATCH v3 08/14] sysctl: Add size to register_net_sysctl function
This commit adds size to the register_net_sysctl indirection function to
facilitate the removal of the sentinel elements (last empty markers)
from the ctl_table arrays. Though we don't actually remove any sentinels
in this commit, register_net_sysctl* now has the capability of
forwarding table_size for when that happens.
We create a new function register_net_sysctl_sz with an extra size
argument. A macro replaces the existing register_net_sysctl. The size in
the macro is SIZE_MAX instead of ARRAY_SIZE to avoid compilation errors
while we systematically migrate to register_net_sysctl_sz. Will change
to ARRAY_SIZE in subsequent commits.
Care is taken to add table_size to the stopping criteria in such a way
that when we remove the empty sentinel element, it will continue
stopping in the last element of the ctl_table array.
Signed-off-by: Joel Granados <j.granados@...sung.com>
Suggested-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
---
include/net/net_namespace.h | 10 ++++++----
net/sysctl_net.c | 22 +++++++++++++---------
2 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index 78beaa765c73..e4e5fe75a281 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -469,15 +469,17 @@ void unregister_pernet_device(struct pernet_operations *);
struct ctl_table;
+#define register_net_sysctl(net, path, table) \
+ register_net_sysctl_sz(net, path, table, SIZE_MAX)
#ifdef CONFIG_SYSCTL
int net_sysctl_init(void);
-struct ctl_table_header *register_net_sysctl(struct net *net, const char *path,
- struct ctl_table *table);
+struct ctl_table_header *register_net_sysctl_sz(struct net *net, const char *path,
+ struct ctl_table *table, size_t table_size);
void unregister_net_sysctl_table(struct ctl_table_header *header);
#else
static inline int net_sysctl_init(void) { return 0; }
-static inline struct ctl_table_header *register_net_sysctl(struct net *net,
- const char *path, struct ctl_table *table)
+static inline struct ctl_table_header *register_net_sysctl_sz(struct net *net,
+ const char *path, struct ctl_table *table, size_t table_size)
{
return NULL;
}
diff --git a/net/sysctl_net.c b/net/sysctl_net.c
index d9cbbb51b143..051ed5f6fc93 100644
--- a/net/sysctl_net.c
+++ b/net/sysctl_net.c
@@ -122,12 +122,13 @@ __init int net_sysctl_init(void)
* allocated.
*/
static void ensure_safe_net_sysctl(struct net *net, const char *path,
- struct ctl_table *table)
+ struct ctl_table *table, size_t table_size)
{
struct ctl_table *ent;
pr_debug("Registering net sysctl (net %p): %s\n", net, path);
- for (ent = table; ent->procname; ent++) {
+ ent = table;
+ for (size_t i = 0; i < table_size && ent->procname; ent++, i++) {
unsigned long addr;
const char *where;
@@ -160,21 +161,24 @@ static void ensure_safe_net_sysctl(struct net *net, const char *path,
}
}
-struct ctl_table_header *register_net_sysctl(struct net *net,
- const char *path, struct ctl_table *table)
+struct ctl_table_header *register_net_sysctl_sz(struct net *net,
+ const char *path,
+ struct ctl_table *table,
+ size_t table_size)
{
- int count = 0;
+ int count;
struct ctl_table *entry;
if (!net_eq(net, &init_net))
- ensure_safe_net_sysctl(net, path, table);
+ ensure_safe_net_sysctl(net, path, table, table_size);
- for (entry = table; entry->procname; entry++)
- count++;
+ entry = table;
+ for (count = 0 ; count < table_size && entry->procname; entry++, count++)
+ ;
return __register_sysctl_table(&net->sysctls, path, table, count);
}
-EXPORT_SYMBOL_GPL(register_net_sysctl);
+EXPORT_SYMBOL_GPL(register_net_sysctl_sz);
void unregister_net_sysctl_table(struct ctl_table_header *header)
{
--
2.30.2
Powered by blists - more mailing lists