diff options
| author | Kuniyuki Iwashima <kuniyu@amazon.com> | 2023-02-13 20:45:48 +0000 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-03-11 16:32:02 +0100 |
| commit | ae3aff9ef0c6232c158998e8e61fc8c8345401ff (patch) | |
| tree | 8f2e196ccb8a0542d1cc2e8b192edf318b2f920d | |
| parent | 94b725f66dfc355755bee6ec35e89df578eb7aba (diff) | |
| download | linux-ae3aff9ef0c6232c158998e8e61fc8c8345401ff.tar.gz linux-ae3aff9ef0c6232c158998e8e61fc8c8345401ff.tar.bz2 linux-ae3aff9ef0c6232c158998e8e61fc8c8345401ff.zip | |
tcp: Fix listen() regression in 4.19.270
commit fdaf88531cfd17b2a710cceb3141ef6f9085ff40 upstream.
When we backport dadd0dcaa67d ("net/ulp: prevent ULP without clone op from
entering the LISTEN status"), we have accidentally backported a part of
7a7160edf1bf ("net: Return errno in sk->sk_prot->get_port().") and removed
err = -EADDRINUSE in inet_csk_listen_start().
Thus, listen() no longer returns -EADDRINUSE even if ->get_port() failed
as reported in [0].
We set -EADDRINUSE to err just before ->get_port() to fix the regression.
[0]: https://lore.kernel.org/stable/EF8A45D0-768A-4CD5-9A8A-0FA6E610ABF7@winter.cafe/
Reported-by: Winter <winter@winter.cafe>
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | net/ipv4/inet_connection_sock.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 457f619a3461..0f9085220ecf 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -934,6 +934,7 @@ int inet_csk_listen_start(struct sock *sk, int backlog) * It is OK, because this socket enters to hash table only * after validation is complete. */ + err = -EADDRINUSE; inet_sk_state_store(sk, TCP_LISTEN); if (!sk->sk_prot->get_port(sk, inet->inet_num)) { inet->inet_sport = htons(inet->inet_num); |
