net/smc: fix TCP fallback socket release

clcsock can be released while kernel_accept() references it in TCP
listen worker. Also, clcsock needs to wake up before released if TCP
fallback is used and the clcsock is blocked by accept. Add a lock to
safely release clcsock and call kernel_sock_shutdown() to wake up
clcsock from accept in smc_release().

Reported-by: syzbot+0bf2e01269f1274b4b03@syzkaller.appspotmail.com
Reported-by: syzbot+e3132895630f957306bc@syzkaller.appspotmail.com
Signed-off-by: Myungho Jung <mhjungk@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Myungho Jung
2018-12-18 09:02:25 -08:00
committed by David S. Miller
parent f7db2beb4c
commit 78abe3d0df
2 changed files with 16 additions and 2 deletions

View File

@@ -219,6 +219,10 @@ struct smc_sock { /* smc sock container */
* started, waiting for unsent
* data to be sent
*/
struct mutex clcsock_release_lock;
/* protects clcsock of a listen
* socket
* */
};
static inline struct smc_sock *smc_sk(const struct sock *sk)