From: Patrick McHardy <kaber@trash•net>
To: Alexey Dobriyan <adobriyan@gmail•com>
Cc: davem@davemloft•net, jonathan@jonmasters•org,
eric.dumazet@gmail•com, netdev@vger•kernel.org,
netfilter-devel@vger•kernel.org
Subject: Re: [PATCH for 2.6.33] conntrack: restrict runtime hashsize modifications
Date: Fri, 05 Feb 2010 12:25:46 +0100 [thread overview]
Message-ID: <4B6C003A.4050102@trash.net> (raw)
In-Reply-To: <4B6BFF69.6050503@trash.net>
[-- Attachment #1: Type: text/plain, Size: 715 bytes --]
Patrick McHardy wrote:
> Alexey Dobriyan wrote:
>> On Fri, Feb 5, 2010 at 1:16 PM, Patrick McHardy <kaber@trash•net> wrote:
>>> OK testing looks fine, although I'm quite surprised that its actually
>>> possible to change module parameters from within non-init namespaces.
>>> How is this supposed to work at all? I don't see how sysfs could
>>> possibly provide a network namespace context ...
>>
>> You can do in write hook
>>
>> if (!net_eq(current->nsproxy->net_ns, &init_net))
>> return -EINVAL;
>
> Right, I see. So we could actually make resizing work for all
> namespaces quite easily. Is there any reason not to do this?
>
Something like this (untested) patch on top of the previous one.
[-- Attachment #2: x --]
[-- Type: text/plain, Size: 2117 bytes --]
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index ef1c856..212dac3 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -31,6 +31,7 @@
#include <linux/socket.h>
#include <linux/mm.h>
#include <linux/rculist_nulls.h>
+#include <linux/nsproxy.h>
#include <net/netfilter/nf_conntrack.h>
#include <net/netfilter/nf_conntrack_l3proto.h>
@@ -1194,6 +1195,7 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
unsigned int hashsize, old_size;
struct hlist_nulls_head *hash, *old_hash;
struct nf_conntrack_tuple_hash *h;
+ struct net *net = current->nsproxy->net_ns;
/* On boot, we can set this without any fancy locking. */
if (!nf_conntrack_htable_size)
@@ -1213,9 +1215,9 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
* though since that required taking the lock.
*/
spin_lock_bh(&nf_conntrack_lock);
- for (i = 0; i < init_net.ct.htable_size; i++) {
- while (!hlist_nulls_empty(&init_net.ct.hash[i])) {
- h = hlist_nulls_entry(init_net.ct.hash[i].first,
+ for (i = 0; i < net->ct.htable_size; i++) {
+ while (!hlist_nulls_empty(&net->ct.hash[i])) {
+ h = hlist_nulls_entry(net->ct.hash[i].first,
struct nf_conntrack_tuple_hash, hnnode);
hlist_nulls_del_rcu(&h->hnnode);
bucket = __hash_conntrack(&h->tuple, hashsize,
@@ -1223,13 +1225,13 @@ int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp)
hlist_nulls_add_head_rcu(&h->hnnode, &hash[bucket]);
}
}
- old_size = init_net.ct.htable_size;
- old_vmalloced = init_net.ct.hash_vmalloc;
- old_hash = init_net.ct.hash;
+ old_size = net->ct.htable_size;
+ old_vmalloced = net->ct.hash_vmalloc;
+ old_hash = net->ct.hash;
- init_net.ct.htable_size = nf_conntrack_htable_size = hashsize;
- init_net.ct.hash_vmalloc = vmalloced;
- init_net.ct.hash = hash;
+ net->ct.htable_size = nf_conntrack_htable_size = hashsize;
+ net->ct.hash_vmalloc = vmalloced;
+ net->ct.hash = hash;
spin_unlock_bh(&nf_conntrack_lock);
nf_ct_free_hashtable(old_hash, old_vmalloced, old_size);
next prev parent reply other threads:[~2010-02-05 11:25 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-03 20:39 [PATCH for 2.6.33] conntrack: restrict runtime hashsize modifications Alexey Dobriyan
2010-02-03 20:50 ` Jon Masters
2010-02-04 16:18 ` Patrick McHardy
2010-02-04 16:27 ` Patrick McHardy
2010-02-04 20:18 ` Jon Masters
2010-02-05 10:00 ` Patrick McHardy
2010-02-05 10:14 ` Jon Masters
2010-02-05 10:21 ` Patrick McHardy
2010-02-04 17:04 ` Patrick McHardy
2010-02-04 19:47 ` Alexey Dobriyan
2010-02-04 20:23 ` Jon Masters
2010-02-05 10:00 ` Patrick McHardy
2010-02-05 10:11 ` Jon Masters
2010-02-05 10:19 ` Patrick McHardy
2010-02-05 11:16 ` Patrick McHardy
2010-02-05 11:19 ` Alexey Dobriyan
2010-02-05 11:22 ` Patrick McHardy
2010-02-05 11:25 ` Patrick McHardy [this message]
2010-02-05 11:51 ` Jon Masters
2010-02-05 11:23 ` Alexey Dobriyan
2010-02-05 22:04 ` Alexey Dobriyan
2010-02-08 13:34 ` Patrick McHardy
2010-02-08 14:35 ` Patrick McHardy
2010-02-04 20:20 ` Jon Masters
2010-02-05 10:03 ` Patrick McHardy
2010-02-05 10:12 ` Jon Masters
2010-02-05 10:21 ` Patrick McHardy
2010-02-04 17:26 ` Patrick McHardy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B6C003A.4050102@trash.net \
--to=kaber@trash$(echo .)net \
--cc=adobriyan@gmail$(echo .)com \
--cc=davem@davemloft$(echo .)net \
--cc=eric.dumazet@gmail$(echo .)com \
--cc=jonathan@jonmasters$(echo .)org \
--cc=netdev@vger$(echo .)kernel.org \
--cc=netfilter-devel@vger$(echo .)kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox