diff options
author | Myungho Jung <mhjungk@gmail.com> | 2018-12-18 09:02:25 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-12-18 22:02:51 -0800 |
commit | 78abe3d0dfad196959b1246003366e2610775ea6 (patch) | |
tree | 101f58d43375ea186240109dbb123854a006dade /net/smc/smc.h | |
parent | f7db2beb4c2c6cc8111f5ab90fc7363ca91107b6 (diff) | |
download | linux-stable-78abe3d0dfad196959b1246003366e2610775ea6.tar.gz linux-stable-78abe3d0dfad196959b1246003366e2610775ea6.tar.bz2 linux-stable-78abe3d0dfad196959b1246003366e2610775ea6.zip |
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>
Diffstat (limited to 'net/smc/smc.h')
-rw-r--r-- | net/smc/smc.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/smc/smc.h b/net/smc/smc.h index 08786ace6010..5721416d0605 100644 --- a/net/smc/smc.h +++ b/net/smc/smc.h @@ -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) |