lkml.org 
[lkml]   [2013]   [Apr]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 30/42] tcp: incoming connections might use wrong route under synflood
    Date
    3.8-stable review patch.  If anyone has any objections, please let me know.

    ------------------


    From: Dmitry Popov <dp@highloadlab.com>

    [ Upstream commit d66954a066158781ccf9c13c91d0316970fe57b6 ]

    There is a bug in cookie_v4_check (net/ipv4/syncookies.c):
    flowi4_init_output(&fl4, 0, sk->sk_mark, RT_CONN_FLAGS(sk),
    RT_SCOPE_UNIVERSE, IPPROTO_TCP,
    inet_sk_flowi_flags(sk),
    (opt && opt->srr) ? opt->faddr : ireq->rmt_addr,
    ireq->loc_addr, th->source, th->dest);

    Here we do not respect sk->sk_bound_dev_if, therefore wrong dst_entry may be
    taken. This dst_entry is used by new socket (get_cookie_sock ->
    tcp_v4_syn_recv_sock), so its packets may take the wrong path.

    Signed-off-by: Dmitry Popov <dp@highloadlab.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ipv4/syncookies.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/net/ipv4/syncookies.c
    +++ b/net/ipv4/syncookies.c
    @@ -348,8 +348,8 @@ struct sock *cookie_v4_check(struct sock
    * hasn't changed since we received the original syn, but I see
    * no easy way to do this.
    */
    - flowi4_init_output(&fl4, 0, sk->sk_mark, RT_CONN_FLAGS(sk),
    - RT_SCOPE_UNIVERSE, IPPROTO_TCP,
    + flowi4_init_output(&fl4, sk->sk_bound_dev_if, sk->sk_mark,
    + RT_CONN_FLAGS(sk), RT_SCOPE_UNIVERSE, IPPROTO_TCP,
    inet_sk_flowi_flags(sk),
    (opt && opt->srr) ? opt->faddr : ireq->rmt_addr,
    ireq->loc_addr, th->source, th->dest);



    \
     
     \ /
      Last update: 2013-04-29 22:21    [W:4.276 / U:0.828 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site