Commit 965c00e4 authored by Dmitry Safonov's avatar Dmitry Safonov Committed by Paolo Abeni

net/tcp: Limit TCP_AO_REPAIR to non-listen sockets

Listen socket is not an established TCP connection, so
setsockopt(TCP_AO_REPAIR) doesn't have any impact.

Restrict this uAPI for listen sockets.

Fixes: faadfaba ("net/tcp: Add TCP_AO_REPAIR")
Signed-off-by: default avatarDmitry Safonov <dima@arista.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent da7dfaa6
...@@ -3610,6 +3610,10 @@ int do_tcp_setsockopt(struct sock *sk, int level, int optname, ...@@ -3610,6 +3610,10 @@ int do_tcp_setsockopt(struct sock *sk, int level, int optname,
break; break;
case TCP_AO_REPAIR: case TCP_AO_REPAIR:
if (!tcp_can_repair_sock(sk)) {
err = -EPERM;
break;
}
err = tcp_ao_set_repair(sk, optval, optlen); err = tcp_ao_set_repair(sk, optval, optlen);
break; break;
#ifdef CONFIG_TCP_AO #ifdef CONFIG_TCP_AO
...@@ -4309,6 +4313,8 @@ int do_tcp_getsockopt(struct sock *sk, int level, ...@@ -4309,6 +4313,8 @@ int do_tcp_getsockopt(struct sock *sk, int level,
} }
#endif #endif
case TCP_AO_REPAIR: case TCP_AO_REPAIR:
if (!tcp_can_repair_sock(sk))
return -EPERM;
return tcp_ao_get_repair(sk, optval, optlen); return tcp_ao_get_repair(sk, optval, optlen);
case TCP_AO_GET_KEYS: case TCP_AO_GET_KEYS:
case TCP_AO_INFO: { case TCP_AO_INFO: {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment