: nf_conntrack: padding breaks conntrack hash on ARM
Subsystems (2)
PATCH 1/2 : nf_conntrack: padding breaks conntrack hash on ARM
These patches for stable-2.6.25 fix two netfilter bugs:
- a hashing change broke on ARM because of holes in struct nf_conntrack. Fixed by 1/2 by memsetting the entire struct to make sure the holes are initialized to zero.
- netfilter queueing might panic when enlarging packets, fixed by 2/2 by using the proper size for the skb.
Please apply, thanks.
[NETFILTER]: nf_conntrack: padding breaks conntrack hash on ARM
Upstream commit 443a70d50:
commit 0794935e "[NETFILTER]: nf_conntrack: optimize hash_conntrack()" results in ARM platforms hashing uninitialised padding. This padding doesn't exist on other architectures.
Fix this by replacing NF_CT_TUPLE_U_BLANK() with memset() to ensure everything is initialised. There were only 4 bytes that NF_CT_TUPLE_U_BLANK() wasn't clearing anyway (or 12 bytes on ARM).
---
commit 90364383ef3b7de3812e933c91cb3ac3928cdfaa
tree e4ed0a0b6076437d11123f60389bff6b78e0bb27
parent d8447b287c252e02f135618ed4a8781fd3b8797f
author Philip Craig <[email protected]> Tue, 13 May 2008 13:35:02 +0200 committer Patrick McHardy <[email protected]> Tue, 13 May 2008 13:35:02 +0200
include/net/netfilter/nf_conntrack_tuple.h | 10 ---------- net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | 2 +- net/netfilter/nf_conntrack_core.c | 4 ++-- 3 files changed, 3 insertions(+), 13 deletions(-)
include/net/netfilter/nf_conntrack_tuple.h +0 -10
@@ -101,16 +101,6 @@ struct nf_conntrack_tuple_mask } src; }; -/* This is optimized opposed to a memset of the whole structure. Everything we -* really care about is the source/destination unions */ -#define NF_CT_TUPLE_U_BLANK (tuple) \ - do { \ - (tuple)->src.u.all = 0; \ - (tuple)->dst.u.all = 0; \ - memset(&(tuple)->src.u3, 0, sizeof((tuple)->src.u3)); \ - memset(&(tuple)->dst.u3, 0, sizeof((tuple)->dst.u3)); \ - } while (0) -#ifdef __KERNEL__#define NF_CT_DUMP_TUPLE (tp) \
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +1 -1
@@ -305,7 +305,7 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len)const struct nf_conntrack_tuple_hash *h;struct nf_conntrack_tuple tuple; -NF_CT_TUPLE_U_BLANK (&tuple); +memset (&tuple,0 ,sizeof (tuple)); tuple.src.u3.ip = inet->rcv_saddr; tuple.src.u.tcp.port = inet->sport; tuple.dst.u3.ip = inet->daddr;
net/netfilter/nf_conntrack_core.c +2 -2
@@ -104,7 +104,7 @@ nf_ct_get_tuple(const struct sk_buff *skb,const struct nf_conntrack_l3proto *l3proto, const struct nf_conntrack_l4proto *l4proto) { -NF_CT_TUPLE_U_BLANK (tuple ); + memset(tuple, 0, sizeof(*tuple)); tuple->src.l3num = l3num;if (l3proto->pkt_to_tuple (skb, nhoff, tuple) ==0 )
@@ -153,7 +153,7 @@ nf_ct_invert_tuple(struct nf_conntrack_tuple *inverse,const struct nf_conntrack_l3proto *l3proto, const struct nf_conntrack_l4proto *l4proto) { -NF_CT_TUPLE_U_BLANK (inverse ); + memset(inverse, 0, sizeof(*inverse)); inverse->src.l3num = orig->src.l3num;if (l3proto->invert_tuple (inverse, orig) ==0 )
patch nf_conntrack-padding-breaks-conntrack-hash-on-arm.patch added to 2.6.25-stable tree
This is a note to let you know that we have just queued up the patch titled
Subject: nf_conntrack: padding breaks conntrack hash on ARM
to the 2.6.25-stable tree. Its filename is
nf_conntrack-padding-breaks-conntrack-hash-on-arm.patch
A git repo of this tree can be found at
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
Quoted 1 line
From [email protected] Tue May 13 05:11:11 2008
From: Philip Craig <[email protected]>
Date: Tue, 13 May 2008 13:39:13 +0200
Subject: nf_conntrack: padding breaks conntrack hash on ARM
To: [email protected]
Cc: Netfilter Development Mailinglist <[email protected]>, "David S. Miller" <[email protected]>
Message-ID: <[email protected]>
From: Philip Craig <[email protected]>
[NETFILTER]: nf_conntrack: padding breaks conntrack hash on ARM
Upstream commit 443a70d50:
commit 0794935e "[NETFILTER]: nf_conntrack: optimize hash_conntrack()" results in ARM platforms hashing uninitialised padding. This padding doesn't exist on other architectures.
Fix this by replacing NF_CT_TUPLE_U_BLANK() with memset() to ensure everything is initialised. There were only 4 bytes that NF_CT_TUPLE_U_BLANK() wasn't clearing anyway (or 12 bytes on ARM).
--- include/net/netfilter/nf_conntrack_tuple.h | 10 ---------- net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | 2 +- net/netfilter/nf_conntrack_core.c | 4 ++-- 3 files changed, 3 insertions(+), 13 deletions(-)
include/net/netfilter/nf_conntrack_tuple.h +0 -10
@@ -101,16 +101,6 @@ struct nf_conntrack_tuple_mask } src; }; -/* This is optimized opposed to a memset of the whole structure. Everything we -* really care about is the source/destination unions */ -#define NF_CT_TUPLE_U_BLANK (tuple) \ - do { \ - (tuple)->src.u.all = 0; \ - (tuple)->dst.u.all = 0; \ - memset(&(tuple)->src.u3, 0, sizeof((tuple)->src.u3)); \ - memset(&(tuple)->dst.u3, 0, sizeof((tuple)->dst.u3)); \ - } while (0) -#ifdef __KERNEL__#define NF_CT_DUMP_TUPLE (tp) \
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +1 -1
@@ -305,7 +305,7 @@ getorigdst(struct sock *sk, int optval,const struct nf_conntrack_tuple_hash *h;struct nf_conntrack_tuple tuple; -NF_CT_TUPLE_U_BLANK (&tuple); +memset (&tuple,0 ,sizeof (tuple)); tuple.src.u3.ip = inet->rcv_saddr; tuple.src.u.tcp.port = inet->sport; tuple.dst.u3.ip = inet->daddr;
net/netfilter/nf_conntrack_core.c +2 -2
@@ -104,7 +104,7 @@ nf_ct_get_tuple(const struct sk_buff *skconst struct nf_conntrack_l3proto *l3proto, const struct nf_conntrack_l4proto *l4proto) { -NF_CT_TUPLE_U_BLANK (tuple ); + memset(tuple, 0, sizeof(*tuple)); tuple->src.l3num = l3num;if (l3proto->pkt_to_tuple (skb, nhoff, tuple) ==0 )
@@ -153,7 +153,7 @@ nf_ct_invert_tuple(struct nf_conntrack_tconst struct nf_conntrack_l3proto *l3proto, const struct nf_conntrack_l4proto *l4proto) { -NF_CT_TUPLE_U_BLANK (inverse ); + memset(inverse, 0, sizeof(*inverse)); inverse->src.l3num = orig->src.l3num;if (l3proto->invert_tuple (inverse, orig) ==0 )
Patches currently in stable-queue which might be from [email protected] are
queue-2.6.25/nf_conntrack-padding-breaks-conntrack-hash-on-arm.patch