Commit d912dec124288553c734e25fef3ecfef92f894db

Authored by Florian Westphal
Committed by Pablo Neira Ayuso
1 parent 4a65798a94

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 <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

Showing 3 changed files with 22 additions and 128 deletions Side-by-side Diff

net/netfilter/nf_conntrack_acct.c
... ... @@ -25,83 +25,20 @@
25 25 module_param_named(acct, nf_ct_acct, bool, 0644);
26 26 MODULE_PARM_DESC(acct, "Enable connection tracking flow accounting.");
27 27  
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   -
41 28 static const struct nf_ct_ext_type acct_extend = {
42 29 .len = sizeof(struct nf_conn_acct),
43 30 .align = __alignof__(struct nf_conn_acct),
44 31 .id = NF_CT_EXT_ACCT,
45 32 };
46 33  
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   -
96 34 int nf_conntrack_acct_pernet_init(struct net *net)
97 35 {
98 36 net->ct.sysctl_acct = nf_ct_acct;
99   - return nf_conntrack_acct_init_sysctl(net);
  37 + return 0;
100 38 }
101 39  
102 40 void nf_conntrack_acct_pernet_fini(struct net *net)
103 41 {
104   - nf_conntrack_acct_fini_sysctl(net);
105 42 }
106 43  
107 44 int nf_conntrack_acct_init(void)
net/netfilter/nf_conntrack_helper.c
... ... @@ -42,67 +42,6 @@
42 42 MODULE_PARM_DESC(nf_conntrack_helper,
43 43 "Enable automatic conntrack helper assignment (default 0)");
44 44  
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   -
106 45 /* Stupid hash, but collision free for the default registrations of the
107 46 * helpers currently in the kernel. */
108 47 static unsigned int helper_hash(const struct nf_conntrack_tuple *tuple)
109 48  
... ... @@ -537,12 +476,11 @@
537 476 {
538 477 net->ct.auto_assign_helper_warned = false;
539 478 net->ct.sysctl_auto_assign_helper = nf_ct_auto_assign_helper;
540   - return nf_conntrack_helper_init_sysctl(net);
  479 + return 0;
541 480 }
542 481  
543 482 void nf_conntrack_helper_pernet_fini(struct net *net)
544 483 {
545   - nf_conntrack_helper_fini_sysctl(net);
546 484 }
547 485  
548 486 int nf_conntrack_helper_init(void)
net/netfilter/nf_conntrack_standalone.c
... ... @@ -539,6 +539,8 @@
539 539 NF_SYSCTL_CT_CHECKSUM,
540 540 NF_SYSCTL_CT_LOG_INVALID,
541 541 NF_SYSCTL_CT_EXPECT_MAX,
  542 + NF_SYSCTL_CT_ACCT,
  543 + NF_SYSCTL_CT_HELPER,
542 544 };
543 545  
544 546 static struct ctl_table nf_ct_sysctl_table[] = {
... ... @@ -586,6 +588,20 @@
586 588 .mode = 0644,
587 589 .proc_handler = proc_dointvec,
588 590 },
  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 + },
589 605 { }
590 606 };
591 607  
592 608  
... ... @@ -614,8 +630,11 @@
614 630 table[NF_SYSCTL_CT_LOG_INVALID].data = &net->ct.sysctl_log_invalid;
615 631  
616 632 /* Don't export sysctls to unprivileged users */
617   - if (net->user_ns != &init_user_ns)
  633 + if (net->user_ns != &init_user_ns) {
618 634 table[NF_SYSCTL_CT_MAX].procname = NULL;
  635 + table[NF_SYSCTL_CT_ACCT].procname = NULL;
  636 + table[NF_SYSCTL_CT_HELPER].procname = NULL;
  637 + }
619 638  
620 639 if (!net_eq(&init_net, net))
621 640 table[NF_SYSCTL_CT_BUCKETS].mode = 0444;