net: ipv6: keep sk status consistent after datagram connect failure
authorPaolo Abeni <pabeni@redhat.com>
Mon, 12 Mar 2018 13:54:23 +0000 (14:54 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Mar 2018 16:10:39 +0000 (18:10 +0200)
commita8f02befc87d6f1a882c9b14a31bcfa1fbd3d430
treeca3b11577ed1f310a5306c754e1d665255bb57db
parent82fb817863e3a853715e8cc606ea4ed37b9a55ce
net: ipv6: keep sk status consistent after datagram connect failure

[ Upstream commit 2f987a76a97773beafbc615b9c4d8fe79129a7f4 ]

On unsuccesful ip6_datagram_connect(), if the failure is caused by
ip6_datagram_dst_update(), the sk peer information are cleared, but
the sk->sk_state is preserved.

If the socket was already in an established status, the overall sk
status is inconsistent and fouls later checks in datagram code.

Fix this saving the old peer information and restoring them in
case of failure. This also aligns ipv6 datagram connect() behavior
with ipv4.

v1 -> v2:
 - added missing Fixes tag

Fixes: 85cb73ff9b74 ("net: ipv6: reset daddr and dport in sk if connect() fails")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ipv6/datagram.c