From: Patrick McHardy <kaber@trash.net>
To: Phil Oester <kernel@linuxace.com>
Cc: netfilter-devel@lists.netfilter.org
Subject: Re: [PATCH] Fix NAT TCP sequence adjustment
Date: Sun, 03 Apr 2005 21:26:22 +0200 [thread overview]
Message-ID: <4250435E.1090309@trash.net> (raw)
In-Reply-To: <20050402202438.GA2968@linuxace.com>
Phil Oester wrote:
> In adjust_tcp_sequence, we track the sequence number of any adjustments
> in the correction_pos variable. The seq stored is based upon the left
> side of the window of the NAT box -- not of the original sender.
>
> Later, in ip_nat_seq_adjust, we compare the correction_pos variable to
> the seq of the original sender to determine whether this is a new packet
> or a retransmission (i.e. should we apply offset_before or offset_after).
> So we are comparing the post-adjustment seq to a pre-adjustment seq.
>
> The solution is to store the client's seq number in correction_pos instead
> of the seq of the NAT box. The below makes this change, as well as cleans up a
> number of broken DEBUGP statements and a couple of u32->u16 casts.
Great work Phil. One question though: You want to store the pre-adjusted
sequence number. What if the packet is a retransmission and
offset_before has been applied? If I understand correctly, depending
on the delta between offset_after and offset_before, this might cause
the before(...) test to give a false positive and screw up the state.
In case I'm wrong, could you a patch containing only the necessary
changes? I think the final fix for this problem should go in -stable,
ideally it would only be a single line "seq -= this_way->offset_after".
Regards
Patrick
> + adjustedseq = seq - this_way->offset_after;
> 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, adjustedseq)) {
> + this_way->correction_pos = adjustedseq;
> this_way->offset_before = this_way->offset_after;
> this_way->offset_after += sizediff;
> }
> UNLOCK_BH(&ip_nat_seqofs_lock);
>
> - DEBUGP("ip_nat_resize_packet: Seq_offset after: ");
> + DEBUGP("adjust_tcp_sequence: Seq_offset after: ");
> DUMP_OFFSET(this_way);
> }
next prev parent reply other threads:[~2005-04-03 19:26 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-02 20:24 [PATCH] Fix NAT TCP sequence adjustment Phil Oester
2005-04-03 12:26 ` Milos Wimmer
2005-04-03 19:26 ` Patrick McHardy [this message]
2005-04-03 23:53 ` Phil Oester
2005-04-04 4:40 ` Phil Oester
2005-04-04 8:27 ` Patrick McHardy
2005-04-04 20:47 ` Phil Oester
2005-04-05 7:32 ` Patrick McHardy
2005-04-05 13:33 ` Patch lifetime " Amin Azez
2005-04-10 20:49 ` Harald Welte
2005-04-06 4:48 ` Phil Oester
2005-04-18 1:42 ` Patrick McHardy
2005-04-19 0:58 ` Phil Oester
2005-04-20 15:03 ` Patrick McHardy
2005-04-20 15:53 ` Phil Oester
2005-04-20 16:07 ` Patrick McHardy
2005-04-20 17:24 ` Phil Oester
2005-04-20 17:50 ` Patrick McHardy
2005-04-20 18:25 ` Phil Oester
2005-04-20 21:39 ` Martijn Lievaart
2005-04-21 1:41 ` Patrick McHardy
2005-04-21 1:38 ` Patrick McHardy
2005-04-21 12:31 ` Milos Wimmer
2005-04-21 12:32 ` Patrick McHardy
2005-04-21 13:31 ` Jonas Berlin
2005-04-21 23:01 ` Patrick McHardy
2005-04-27 0:44 ` Rusty Russell
2005-04-27 10:27 ` Patrick McHardy
2005-05-31 9:17 ` Rusty Russell
2005-05-31 13:02 ` Patrick McHardy
2005-05-31 13:48 ` Rusty Russell
2005-05-31 14:35 ` 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=4250435E.1090309@trash.net \
--to=kaber@trash.net \
--cc=kernel@linuxace.com \
--cc=netfilter-devel@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.