tproxy: copy transparent flag when creating a time wait
authorKOVACS Krisztian <hidden@balabit.hu>
Tue, 18 Oct 2011 10:17:35 +0000 (10:17 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Oct 2011 07:21:35 +0000 (03:21 -0400)
The transparent socket option setting was not copied to the time wait
socket when an inet socket was being replaced by a time wait socket. This
broke the --transparent option of the socket match and may have caused
that FIN packets belonging to sockets in FIN_WAIT2 or TIME_WAIT state
were being dropped by the packet filter.

Signed-off-by: KOVACS Krisztian <hidden@balabit.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_minisocks.c

index d2fe4e06b472d6f9ad69f1c31cfa510251096550..0ce3d06dce604396f406d6539d8196148c864468 100644 (file)
@@ -328,6 +328,7 @@ void tcp_time_wait(struct sock *sk, int state, int timeo)
                struct tcp_timewait_sock *tcptw = tcp_twsk((struct sock *)tw);
                const int rto = (icsk->icsk_rto << 2) - (icsk->icsk_rto >> 1);
 
+               tw->tw_transparent      = inet_sk(sk)->transparent;
                tw->tw_rcv_wscale       = tp->rx_opt.rcv_wscale;
                tcptw->tw_rcv_nxt       = tp->rcv_nxt;
                tcptw->tw_snd_nxt       = tp->snd_nxt;