Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-2.6
This commit is contained in:
commit
758cb41106
@ -927,6 +927,7 @@ static int get_info(struct net *net, void __user *user,
|
|||||||
private = &tmp;
|
private = &tmp;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
memset(&info, 0, sizeof(info));
|
||||||
info.valid_hooks = t->valid_hooks;
|
info.valid_hooks = t->valid_hooks;
|
||||||
memcpy(info.hook_entry, private->hook_entry,
|
memcpy(info.hook_entry, private->hook_entry,
|
||||||
sizeof(info.hook_entry));
|
sizeof(info.hook_entry));
|
||||||
|
@ -1124,6 +1124,7 @@ static int get_info(struct net *net, void __user *user,
|
|||||||
private = &tmp;
|
private = &tmp;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
memset(&info, 0, sizeof(info));
|
||||||
info.valid_hooks = t->valid_hooks;
|
info.valid_hooks = t->valid_hooks;
|
||||||
memcpy(info.hook_entry, private->hook_entry,
|
memcpy(info.hook_entry, private->hook_entry,
|
||||||
sizeof(info.hook_entry));
|
sizeof(info.hook_entry));
|
||||||
|
@ -47,26 +47,6 @@ __nf_nat_proto_find(u_int8_t protonum)
|
|||||||
return rcu_dereference(nf_nat_protos[protonum]);
|
return rcu_dereference(nf_nat_protos[protonum]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct nf_nat_protocol *
|
|
||||||
nf_nat_proto_find_get(u_int8_t protonum)
|
|
||||||
{
|
|
||||||
const struct nf_nat_protocol *p;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
p = __nf_nat_proto_find(protonum);
|
|
||||||
if (!try_module_get(p->me))
|
|
||||||
p = &nf_nat_unknown_protocol;
|
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
nf_nat_proto_put(const struct nf_nat_protocol *p)
|
|
||||||
{
|
|
||||||
module_put(p->me);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We keep an extra hash for each conntrack, for fast searching. */
|
/* We keep an extra hash for each conntrack, for fast searching. */
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
hash_by_src(const struct net *net, u16 zone,
|
hash_by_src(const struct net *net, u16 zone,
|
||||||
@ -588,6 +568,26 @@ static struct nf_ct_ext_type nat_extend __read_mostly = {
|
|||||||
#include <linux/netfilter/nfnetlink.h>
|
#include <linux/netfilter/nfnetlink.h>
|
||||||
#include <linux/netfilter/nfnetlink_conntrack.h>
|
#include <linux/netfilter/nfnetlink_conntrack.h>
|
||||||
|
|
||||||
|
static const struct nf_nat_protocol *
|
||||||
|
nf_nat_proto_find_get(u_int8_t protonum)
|
||||||
|
{
|
||||||
|
const struct nf_nat_protocol *p;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
|
p = __nf_nat_proto_find(protonum);
|
||||||
|
if (!try_module_get(p->me))
|
||||||
|
p = &nf_nat_unknown_protocol;
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
nf_nat_proto_put(const struct nf_nat_protocol *p)
|
||||||
|
{
|
||||||
|
module_put(p->me);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct nla_policy protonat_nla_policy[CTA_PROTONAT_MAX+1] = {
|
static const struct nla_policy protonat_nla_policy[CTA_PROTONAT_MAX+1] = {
|
||||||
[CTA_PROTONAT_PORT_MIN] = { .type = NLA_U16 },
|
[CTA_PROTONAT_PORT_MIN] = { .type = NLA_U16 },
|
||||||
[CTA_PROTONAT_PORT_MAX] = { .type = NLA_U16 },
|
[CTA_PROTONAT_PORT_MAX] = { .type = NLA_U16 },
|
||||||
|
@ -1312,7 +1312,8 @@ void *nf_ct_alloc_hashtable(unsigned int *sizep, int *vmalloced, int nulls)
|
|||||||
if (!hash) {
|
if (!hash) {
|
||||||
*vmalloced = 1;
|
*vmalloced = 1;
|
||||||
printk(KERN_WARNING "nf_conntrack: falling back to vmalloc.\n");
|
printk(KERN_WARNING "nf_conntrack: falling back to vmalloc.\n");
|
||||||
hash = __vmalloc(sz, GFP_KERNEL | __GFP_ZERO, PAGE_KERNEL);
|
hash = __vmalloc(sz, GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,
|
||||||
|
PAGE_KERNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hash && nulls)
|
if (hash && nulls)
|
||||||
|
@ -292,6 +292,12 @@ int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *l4proto)
|
|||||||
|
|
||||||
for (i = 0; i < MAX_NF_CT_PROTO; i++)
|
for (i = 0; i < MAX_NF_CT_PROTO; i++)
|
||||||
proto_array[i] = &nf_conntrack_l4proto_generic;
|
proto_array[i] = &nf_conntrack_l4proto_generic;
|
||||||
|
|
||||||
|
/* Before making proto_array visible to lockless readers,
|
||||||
|
* we must make sure its content is committed to memory.
|
||||||
|
*/
|
||||||
|
smp_wmb();
|
||||||
|
|
||||||
nf_ct_protos[l4proto->l3proto] = proto_array;
|
nf_ct_protos[l4proto->l3proto] = proto_array;
|
||||||
} else if (nf_ct_protos[l4proto->l3proto][l4proto->l4proto] !=
|
} else if (nf_ct_protos[l4proto->l3proto][l4proto->l4proto] !=
|
||||||
&nf_conntrack_l4proto_generic) {
|
&nf_conntrack_l4proto_generic) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user