Patchwork netfilter: byte order issue in nf_ct_seqadj_set

login
register
mail settings
Submitter Phil Oester
Date Nov. 17, 2013, 4:37 a.m.
Message ID <20131117043745.GA12111@home>
Download mbox | patch
Permalink /patch/291809/
State Accepted
Headers show

Comments

Phil Oester - Nov. 17, 2013, 4:37 a.m.
In commit 41d73ec053d2, sequence number adjustments were moved to a separate
file.  Unfortunately, a necessary ntohl call was removed when the call to 
adjust_tcp_sequence was collapsed into nf_ct_seqadj_set.  As reported by
Dawid Stawiarsk, this broke the FTP NAT helper.  Add back the byte order
conversions.

Fixes: 41d73ec053d2 ("netfilter: nf_conntrack: make sequence number adjustments usuable without NAT")
Signed-off-by: Phil Oester <kernel@linuxace.com>
Pablo Neira - Nov. 19, 2013, 2:36 p.m.
On Sat, Nov 16, 2013 at 08:37:46PM -0800, Phil Oester wrote:
> In commit 41d73ec053d2, sequence number adjustments were moved to a separate
> file.  Unfortunately, a necessary ntohl call was removed when the call to 
> adjust_tcp_sequence was collapsed into nf_ct_seqadj_set.  As reported by
> Dawid Stawiarsk, this broke the FTP NAT helper.  Add back the byte order
> conversions.

Applied, thanks Phil.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/net/netfilter/nf_conntrack_seqadj.c b/net/netfilter/nf_conntrack_seqadj.c
index 5f9bfd0..17c1bcb 100644
--- a/net/netfilter/nf_conntrack_seqadj.c
+++ b/net/netfilter/nf_conntrack_seqadj.c
@@ -41,8 +41,8 @@  int nf_ct_seqadj_set(struct nf_conn *ct, enum ip_conntrack_info ctinfo,
 	spin_lock_bh(&ct->lock);
 	this_way = &seqadj->seq[dir];
 	if (this_way->offset_before == this_way->offset_after ||
-	    before(this_way->correction_pos, seq)) {
-		this_way->correction_pos = seq;
+	    before(this_way->correction_pos, ntohl(seq))) {
+		this_way->correction_pos = ntohl(seq);
 		this_way->offset_before	 = this_way->offset_after;
 		this_way->offset_after	+= off;
 	}