mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
tcp: do not drop syn_recv on all icmp reports
Petr Novopashenniy reported that ICMP redirects on SYN_RECV sockets
were leading to RST.
This is of course incorrect.
A specific list of ICMP messages should be able to drop a SYN_RECV.
For instance, a REDIRECT on SYN_RECV shall be ignored, as we do
not hold a dst per SYN_RECV pseudo request.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=111751
Fixes: 079096f103
("tcp/dccp: install syn_recv requests into ehash table")
Reported-by: Petr Novopashenniy <pety@rusnet.ru>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
44c3d0c1c0
commit
9cf7490360
3 changed files with 12 additions and 6 deletions
|
@ -327,6 +327,7 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
struct tcp_sock *tp;
|
||||
__u32 seq, snd_una;
|
||||
struct sock *sk;
|
||||
bool fatal;
|
||||
int err;
|
||||
|
||||
sk = __inet6_lookup_established(net, &tcp_hashinfo,
|
||||
|
@ -345,8 +346,9 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
return;
|
||||
}
|
||||
seq = ntohl(th->seq);
|
||||
fatal = icmpv6_err_convert(type, code, &err);
|
||||
if (sk->sk_state == TCP_NEW_SYN_RECV)
|
||||
return tcp_req_err(sk, seq);
|
||||
return tcp_req_err(sk, seq, fatal);
|
||||
|
||||
bh_lock_sock(sk);
|
||||
if (sock_owned_by_user(sk) && type != ICMPV6_PKT_TOOBIG)
|
||||
|
@ -400,7 +402,6 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|||
goto out;
|
||||
}
|
||||
|
||||
icmpv6_err_convert(type, code, &err);
|
||||
|
||||
/* Might be for an request_sock */
|
||||
switch (sk->sk_state) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue