Skip to content

Commit d912dec

Browse files
Florian Westphalummakynes
authored andcommitted
netfilter: conntrack: merge acct and helper sysctl table with main one
Needless copy&paste, just handle all in one. Next patch will handle acct and timestamp, which have similar functions. Intentionally leaves cruft behind, will be cleaned up in a followup patch. The obsolete sysctl pointers in netns_ct struct are left in place and removed in a single change, as changes to netns trigger rebuild of almost all files. Signed-off-by: Florian Westphal <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 4a65798 commit d912dec

File tree

3 files changed

+22
-128
lines changed

3 files changed

+22
-128
lines changed

net/netfilter/nf_conntrack_acct.c

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -25,83 +25,20 @@ static bool nf_ct_acct __read_mostly;
2525
module_param_named(acct, nf_ct_acct, bool, 0644);
2626
MODULE_PARM_DESC(acct, "Enable connection tracking flow accounting.");
2727

28-
#ifdef CONFIG_SYSCTL
29-
static struct ctl_table acct_sysctl_table[] = {
30-
{
31-
.procname = "nf_conntrack_acct",
32-
.data = &init_net.ct.sysctl_acct,
33-
.maxlen = sizeof(unsigned int),
34-
.mode = 0644,
35-
.proc_handler = proc_dointvec,
36-
},
37-
{}
38-
};
39-
#endif /* CONFIG_SYSCTL */
40-
4128
static const struct nf_ct_ext_type acct_extend = {
4229
.len = sizeof(struct nf_conn_acct),
4330
.align = __alignof__(struct nf_conn_acct),
4431
.id = NF_CT_EXT_ACCT,
4532
};
4633

47-
#ifdef CONFIG_SYSCTL
48-
static int nf_conntrack_acct_init_sysctl(struct net *net)
49-
{
50-
struct ctl_table *table;
51-
52-
table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table),
53-
GFP_KERNEL);
54-
if (!table)
55-
goto out;
56-
57-
table[0].data = &net->ct.sysctl_acct;
58-
59-
/* Don't export sysctls to unprivileged users */
60-
if (net->user_ns != &init_user_ns)
61-
table[0].procname = NULL;
62-
63-
net->ct.acct_sysctl_header = register_net_sysctl(net, "net/netfilter",
64-
table);
65-
if (!net->ct.acct_sysctl_header) {
66-
pr_err("can't register to sysctl\n");
67-
goto out_register;
68-
}
69-
return 0;
70-
71-
out_register:
72-
kfree(table);
73-
out:
74-
return -ENOMEM;
75-
}
76-
77-
static void nf_conntrack_acct_fini_sysctl(struct net *net)
78-
{
79-
struct ctl_table *table;
80-
81-
table = net->ct.acct_sysctl_header->ctl_table_arg;
82-
unregister_net_sysctl_table(net->ct.acct_sysctl_header);
83-
kfree(table);
84-
}
85-
#else
86-
static int nf_conntrack_acct_init_sysctl(struct net *net)
87-
{
88-
return 0;
89-
}
90-
91-
static void nf_conntrack_acct_fini_sysctl(struct net *net)
92-
{
93-
}
94-
#endif
95-
9634
int nf_conntrack_acct_pernet_init(struct net *net)
9735
{
9836
net->ct.sysctl_acct = nf_ct_acct;
99-
return nf_conntrack_acct_init_sysctl(net);
37+
return 0;
10038
}
10139

10240
void nf_conntrack_acct_pernet_fini(struct net *net)
10341
{
104-
nf_conntrack_acct_fini_sysctl(net);
10542
}
10643

10744
int nf_conntrack_acct_init(void)

net/netfilter/nf_conntrack_helper.c

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -42,67 +42,6 @@ module_param_named(nf_conntrack_helper, nf_ct_auto_assign_helper, bool, 0644);
4242
MODULE_PARM_DESC(nf_conntrack_helper,
4343
"Enable automatic conntrack helper assignment (default 0)");
4444

45-
#ifdef CONFIG_SYSCTL
46-
static struct ctl_table helper_sysctl_table[] = {
47-
{
48-
.procname = "nf_conntrack_helper",
49-
.data = &init_net.ct.sysctl_auto_assign_helper,
50-
.maxlen = sizeof(unsigned int),
51-
.mode = 0644,
52-
.proc_handler = proc_dointvec,
53-
},
54-
{}
55-
};
56-
57-
static int nf_conntrack_helper_init_sysctl(struct net *net)
58-
{
59-
struct ctl_table *table;
60-
61-
table = kmemdup(helper_sysctl_table, sizeof(helper_sysctl_table),
62-
GFP_KERNEL);
63-
if (!table)
64-
goto out;
65-
66-
table[0].data = &net->ct.sysctl_auto_assign_helper;
67-
68-
/* Don't export sysctls to unprivileged users */
69-
if (net->user_ns != &init_user_ns)
70-
table[0].procname = NULL;
71-
72-
net->ct.helper_sysctl_header =
73-
register_net_sysctl(net, "net/netfilter", table);
74-
75-
if (!net->ct.helper_sysctl_header) {
76-
pr_err("nf_conntrack_helper: can't register to sysctl.\n");
77-
goto out_register;
78-
}
79-
return 0;
80-
81-
out_register:
82-
kfree(table);
83-
out:
84-
return -ENOMEM;
85-
}
86-
87-
static void nf_conntrack_helper_fini_sysctl(struct net *net)
88-
{
89-
struct ctl_table *table;
90-
91-
table = net->ct.helper_sysctl_header->ctl_table_arg;
92-
unregister_net_sysctl_table(net->ct.helper_sysctl_header);
93-
kfree(table);
94-
}
95-
#else
96-
static int nf_conntrack_helper_init_sysctl(struct net *net)
97-
{
98-
return 0;
99-
}
100-
101-
static void nf_conntrack_helper_fini_sysctl(struct net *net)
102-
{
103-
}
104-
#endif /* CONFIG_SYSCTL */
105-
10645
/* Stupid hash, but collision free for the default registrations of the
10746
* helpers currently in the kernel. */
10847
static unsigned int helper_hash(const struct nf_conntrack_tuple *tuple)
@@ -537,12 +476,11 @@ int nf_conntrack_helper_pernet_init(struct net *net)
537476
{
538477
net->ct.auto_assign_helper_warned = false;
539478
net->ct.sysctl_auto_assign_helper = nf_ct_auto_assign_helper;
540-
return nf_conntrack_helper_init_sysctl(net);
479+
return 0;
541480
}
542481

543482
void nf_conntrack_helper_pernet_fini(struct net *net)
544483
{
545-
nf_conntrack_helper_fini_sysctl(net);
546484
}
547485

548486
int nf_conntrack_helper_init(void)

net/netfilter/nf_conntrack_standalone.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,8 @@ enum nf_ct_sysctl_index {
539539
NF_SYSCTL_CT_CHECKSUM,
540540
NF_SYSCTL_CT_LOG_INVALID,
541541
NF_SYSCTL_CT_EXPECT_MAX,
542+
NF_SYSCTL_CT_ACCT,
543+
NF_SYSCTL_CT_HELPER,
542544
};
543545

544546
static struct ctl_table nf_ct_sysctl_table[] = {
@@ -586,6 +588,20 @@ static struct ctl_table nf_ct_sysctl_table[] = {
586588
.mode = 0644,
587589
.proc_handler = proc_dointvec,
588590
},
591+
[NF_SYSCTL_CT_ACCT] = {
592+
.procname = "nf_conntrack_acct",
593+
.data = &init_net.ct.sysctl_acct,
594+
.maxlen = sizeof(unsigned int),
595+
.mode = 0644,
596+
.proc_handler = proc_dointvec,
597+
},
598+
[NF_SYSCTL_CT_HELPER] = {
599+
.procname = "nf_conntrack_helper",
600+
.data = &init_net.ct.sysctl_auto_assign_helper,
601+
.maxlen = sizeof(unsigned int),
602+
.mode = 0644,
603+
.proc_handler = proc_dointvec,
604+
},
589605
{ }
590606
};
591607

@@ -614,8 +630,11 @@ static int nf_conntrack_standalone_init_sysctl(struct net *net)
614630
table[NF_SYSCTL_CT_LOG_INVALID].data = &net->ct.sysctl_log_invalid;
615631

616632
/* Don't export sysctls to unprivileged users */
617-
if (net->user_ns != &init_user_ns)
633+
if (net->user_ns != &init_user_ns) {
618634
table[NF_SYSCTL_CT_MAX].procname = NULL;
635+
table[NF_SYSCTL_CT_ACCT].procname = NULL;
636+
table[NF_SYSCTL_CT_HELPER].procname = NULL;
637+
}
619638

620639
if (!net_eq(&init_net, net))
621640
table[NF_SYSCTL_CT_BUCKETS].mode = 0444;

0 commit comments

Comments
 (0)