Commit de4e83bd authored by Eric W. Biederman's avatar Eric W. Biederman

sysctl: Register the base sysctl table like any other sysctl table.

Simplify the code by treating the base sysctl table like any other
sysctl table and register it with register_sysctl_table.

To ensure this table is registered early enough to avoid problems
call sysctl_init from proc_sys_init.

Rename sysctl_net.c:sysctl_init() to net_sysctl_init() to avoid
name conflicts now that kernel/sysctl.c:sysctl_init() is no longer
static.
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 0ce8974d
...@@ -468,5 +468,6 @@ int __init proc_sys_init(void) ...@@ -468,5 +468,6 @@ int __init proc_sys_init(void)
proc_sys_root->proc_iops = &proc_sys_dir_operations; proc_sys_root->proc_iops = &proc_sys_dir_operations;
proc_sys_root->proc_fops = &proc_sys_dir_file_operations; proc_sys_root->proc_fops = &proc_sys_dir_file_operations;
proc_sys_root->nlink = 0; proc_sys_root->nlink = 0;
return 0;
return sysctl_init();
} }
...@@ -1095,6 +1095,7 @@ struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path, ...@@ -1095,6 +1095,7 @@ struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,
void unregister_sysctl_table(struct ctl_table_header * table); void unregister_sysctl_table(struct ctl_table_header * table);
int sysctl_check_table(struct nsproxy *namespaces, struct ctl_table *table); int sysctl_check_table(struct nsproxy *namespaces, struct ctl_table *table);
extern int sysctl_init(void);
#else /* CONFIG_SYSCTL */ #else /* CONFIG_SYSCTL */
static inline struct ctl_table_header *register_sysctl_table(struct ctl_table * table) static inline struct ctl_table_header *register_sysctl_table(struct ctl_table * table)
{ {
......
...@@ -192,7 +192,7 @@ static int sysrq_sysctl_handler(ctl_table *table, int write, ...@@ -192,7 +192,7 @@ static int sysrq_sysctl_handler(ctl_table *table, int write,
#endif #endif
static struct ctl_table root_table[]; static struct ctl_table root_table[1];
static struct ctl_table_root sysctl_table_root; static struct ctl_table_root sysctl_table_root;
static struct ctl_table_header root_table_header = { static struct ctl_table_header root_table_header = {
{{.count = 1, {{.count = 1,
...@@ -222,7 +222,7 @@ int sysctl_legacy_va_layout; ...@@ -222,7 +222,7 @@ int sysctl_legacy_va_layout;
/* The default sysctl tables: */ /* The default sysctl tables: */
static struct ctl_table root_table[] = { static struct ctl_table sysctl_base_table[] = {
{ {
.procname = "kernel", .procname = "kernel",
.mode = 0555, .mode = 0555,
...@@ -1747,17 +1747,12 @@ static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table) ...@@ -1747,17 +1747,12 @@ static void sysctl_set_parent(struct ctl_table *parent, struct ctl_table *table)
} }
} }
static __init int sysctl_init(void) int __init sysctl_init(void)
{ {
sysctl_set_parent(NULL, root_table); register_sysctl_table(sysctl_base_table);
#ifdef CONFIG_SYSCTL_SYSCALL_CHECK
sysctl_check_table(current->nsproxy, root_table);
#endif
return 0; return 0;
} }
core_initcall(sysctl_init);
static struct ctl_table *is_branch_in(struct ctl_table *branch, static struct ctl_table *is_branch_in(struct ctl_table *branch,
struct ctl_table *table) struct ctl_table *table)
{ {
......
...@@ -90,7 +90,7 @@ static struct pernet_operations sysctl_pernet_ops = { ...@@ -90,7 +90,7 @@ static struct pernet_operations sysctl_pernet_ops = {
.exit = sysctl_net_exit, .exit = sysctl_net_exit,
}; };
static __init int sysctl_init(void) static __init int net_sysctl_init(void)
{ {
int ret; int ret;
ret = register_pernet_subsys(&sysctl_pernet_ops); ret = register_pernet_subsys(&sysctl_pernet_ops);
...@@ -102,7 +102,7 @@ static __init int sysctl_init(void) ...@@ -102,7 +102,7 @@ static __init int sysctl_init(void)
out: out:
return ret; return ret;
} }
subsys_initcall(sysctl_init); subsys_initcall(net_sysctl_init);
struct ctl_table_header *register_net_sysctl_table(struct net *net, struct ctl_table_header *register_net_sysctl_table(struct net *net,
const struct ctl_path *path, struct ctl_table *table) const struct ctl_path *path, struct ctl_table *table)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment