net/smc: fix fastopen for non-blocking connect()
FASTOPEN does not work with SMC-sockets. Since SMC allows fallback to TCP native during connection start, the FASTOPEN setsockopts trigger this fallback, if the SMC-socket is still in state SMC_INIT. But if a FASTOPEN setsockopt is called after a non-blocking connect(), this is broken, and fallback does not make sense. This change complements commitcd2063604e
("net/smc: avoid fallback in case of non-blocking connect") and fixes the syzbot reported problem "WARNING in smc_unhash_sk". Reported-by: syzbot+8488cc4cf1c9e09b8b86@syzkaller.appspotmail.com Fixes:e1bbdd5704
("net/smc: reduce sock_put() for fallback sockets") Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a36e629ee7
commit
8204df72be
|
@ -1732,7 +1732,7 @@ static int smc_setsockopt(struct socket *sock, int level, int optname,
|
|||
case TCP_FASTOPEN_KEY:
|
||||
case TCP_FASTOPEN_NO_COOKIE:
|
||||
/* option not supported by SMC */
|
||||
if (sk->sk_state == SMC_INIT) {
|
||||
if (sk->sk_state == SMC_INIT && !smc->connect_nonblock) {
|
||||
smc_switch_to_fallback(smc);
|
||||
smc->fallback_rsn = SMC_CLC_DECL_OPTUNSUPP;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue