net sysctl: Initialize the network sysctls sooner to avoid problems.
If the netfilter code is modified to use register_net_sysctl_table the kernel fails to boot because the per net sysctl infrasturce is not setup soon enough. So to avoid races call net_sysctl_init from sock_init(). Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Acked-by: Pavel Emelyanov <xemul@parallels.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
bc8a36942a
Коммит
2ca794e5e8
|
@ -283,6 +283,11 @@ struct ctl_path;
|
|||
struct ctl_table;
|
||||
struct ctl_table_header;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern int net_sysctl_init(void);
|
||||
#else
|
||||
static inline int net_sysctl_init(void) { return 0; }
|
||||
#endif
|
||||
extern struct ctl_table_header *register_net_sysctl_table(struct net *net,
|
||||
const struct ctl_path *path, struct ctl_table *table);
|
||||
extern struct ctl_table_header *register_net_sysctl_rotable(
|
||||
|
|
|
@ -2524,6 +2524,12 @@ EXPORT_SYMBOL(sock_unregister);
|
|||
static int __init sock_init(void)
|
||||
{
|
||||
int err;
|
||||
/*
|
||||
* Initialize the network sysctl infrastructure.
|
||||
*/
|
||||
err = net_sysctl_init();
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Initialize sock SLAB cache.
|
||||
|
|
|
@ -89,7 +89,7 @@ static struct pernet_operations sysctl_pernet_ops = {
|
|||
};
|
||||
|
||||
static struct ctl_table_header *net_header;
|
||||
static __init int net_sysctl_init(void)
|
||||
__init int net_sysctl_init(void)
|
||||
{
|
||||
static struct ctl_table empty[1];
|
||||
int ret = -ENOMEM;
|
||||
|
@ -109,7 +109,6 @@ static __init int net_sysctl_init(void)
|
|||
out:
|
||||
return ret;
|
||||
}
|
||||
subsys_initcall(net_sysctl_init);
|
||||
|
||||
struct ctl_table_header *register_net_sysctl_table(struct net *net,
|
||||
const struct ctl_path *path, struct ctl_table *table)
|
||||
|
|
Загрузка…
Ссылка в новой задаче