linux/net/smc
Karsten Graul b4561bd29e net/smc: fix 'workqueue leaked lock' in smc_conn_abort_work
[ Upstream commit a18cee4791 ]

The abort_work is scheduled when a connection was detected to be
out-of-sync after a link failure. The work calls smc_conn_kill(),
which calls smc_close_active_abort() and that might end up calling
smc_close_cancel_work().
smc_close_cancel_work() cancels any pending close_work and tx_work but
needs to release the sock_lock before and acquires the sock_lock again
afterwards. So when the sock_lock was NOT acquired before then it may
be held after the abort_work completes. Thats why the sock_lock is
acquired before the call to smc_conn_kill() in __smc_lgr_terminate(),
but this is missing in smc_conn_abort_work().

Fix that by acquiring the sock_lock first and release it after the
call to smc_conn_kill().

Fixes: b286a0651e ("net/smc: handle incoming CDC validation message")
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-09-30 10:11:02 +02:00
..
af_smc.c smc: disallow TCP_ULP in smc_setsockopt() 2021-05-19 10:13:08 +02:00
Kconfig
Makefile
smc_cdc.c net/smc: use separate work queues for different worker types 2020-09-10 15:24:27 -07:00
smc_cdc.h
smc_clc.c net/smc: add missing error check in smc_clc_prfx_set() 2021-09-30 10:11:02 +02:00
smc_clc.h net/smc: Replace zero-length array with flexible-array member 2020-10-30 16:57:42 -05:00
smc_close.c net/smc: check variable before dereferencing in smc_close.c 2020-09-16 17:30:16 -07:00
smc_close.h
smc_core.c net/smc: fix 'workqueue leaked lock' in smc_conn_abort_work 2021-09-30 10:11:02 +02:00
smc_core.h net/smc: fix wait on already cleared link 2021-08-18 08:59:10 +02:00
smc_diag.c net/smc: use the retry mechanism for netlink messages 2020-09-10 15:24:27 -07:00
smc_ib.c net/smc: fix direct access to ib_gid_addr->ndev in smc_ib_determine_gid() 2020-11-19 10:59:19 -08:00
smc_ib.h
smc_ism.c net/smc: remove device from smcd_dev_list after failed device_add() 2021-06-03 09:00:48 +02:00
smc_ism.h net/smc: introduce CHID callback for ISM devices 2020-09-28 15:19:03 -07:00
smc_llc.c net/smc: fix wait on already cleared link 2021-08-18 08:59:10 +02:00
smc_llc.h
smc_netns.h net/smc: introduce list of pnetids for Ethernet devices 2020-09-28 15:19:03 -07:00
smc_pnet.c net/smc: determine proposed ISM devices 2020-09-28 15:19:03 -07:00
smc_pnet.h net/smc: determine proposed ISM devices 2020-09-28 15:19:03 -07:00
smc_rx.c
smc_rx.h
smc_tx.c net/smc: fix wait on already cleared link 2021-08-18 08:59:10 +02:00
smc_tx.h
smc_wr.c net/smc: fix wait on already cleared link 2021-08-18 08:59:10 +02:00
smc_wr.h
smc.h net/smc: introduce CLC first contact extension 2020-09-28 15:19:03 -07:00