* [PATCH v2 for-rc 0/3] IB/isert Bug fixes in ib_isert
@ 2023-06-02 10:56 Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 1/3] IB/isert: Fix dead lock " Saravanan Vajravel
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Saravanan Vajravel @ 2023-06-02 10:56 UTC (permalink / raw)
To: selvin.xavier, jgg, leon, sagi; +Cc: linux-rdma, Saravanan Vajravel
[-- Attachment #1: Type: text/plain, Size: 446 bytes --]
Generic bug fixes to ib_isert
Regards,
Saravanan Vajravel
v1 -> v2:
- Added Fixes tag to all patches
- Fixed compilation issue in first patch
Saravanan Vajravel (3):
IB/isert: Fix dead lock in ib_isert
IB/isert: Fix possible list corruption in CMA handler
IB/isert: Fix incorrect release of isert connextion
drivers/infiniband/ulp/isert/ib_isert.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4227 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 for-rc 1/3] IB/isert: Fix dead lock in ib_isert
2023-06-02 10:56 [PATCH v2 for-rc 0/3] IB/isert Bug fixes in ib_isert Saravanan Vajravel
@ 2023-06-02 10:56 ` Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 2/3] IB/isert: Fix possible list corruption in CMA handler Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion Saravanan Vajravel
2 siblings, 0 replies; 6+ messages in thread
From: Saravanan Vajravel @ 2023-06-02 10:56 UTC (permalink / raw)
To: selvin.xavier, jgg, leon, sagi; +Cc: linux-rdma, Saravanan Vajravel
[-- Attachment #1: Type: text/plain, Size: 4515 bytes --]
- When a iSER session is released, ib_isert module is taking a mutex lock and
releasing all pending connections. As part of this, ib_isert is destroying
rdma cm_id. To destroy cm_id, rdma_cm module is sending CM events to CMA
handler of ib_isert. This handler is taking same mutex lock. Hence it leads
to deadlock between ib_isert & rdma_cm modules.
- For fix, created local list of pending connections and release the connection
outside of mutex lock.
Calltrace:
---------
[ 1229.791410] INFO: task kworker/10:1:642 blocked for more than 120 seconds.
[ 1229.791416] Tainted: G OE --------- - - 4.18.0-372.9.1.el8.x86_64 #1
[ 1229.791418] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 1229.791419] task:kworker/10:1 state:D stack: 0 pid: 642 ppid: 2 flags:0x80004000
[ 1229.791424] Workqueue: ib_cm cm_work_handler [ib_cm]
[ 1229.791436] Call Trace:
[ 1229.791438] __schedule+0x2d1/0x830
[ 1229.791445] ? select_idle_sibling+0x23/0x6f0
[ 1229.791449] schedule+0x35/0xa0
[ 1229.791451] schedule_preempt_disabled+0xa/0x10
[ 1229.791453] __mutex_lock.isra.7+0x310/0x420
[ 1229.791456] ? select_task_rq_fair+0x351/0x990
[ 1229.791459] isert_cma_handler+0x224/0x330 [ib_isert]
[ 1229.791463] ? ttwu_queue_wakelist+0x159/0x170
[ 1229.791466] cma_cm_event_handler+0x25/0xd0 [rdma_cm]
[ 1229.791474] cma_ib_handler+0xa7/0x2e0 [rdma_cm]
[ 1229.791478] cm_process_work+0x22/0xf0 [ib_cm]
[ 1229.791483] cm_work_handler+0xf4/0xf30 [ib_cm]
[ 1229.791487] ? move_linked_works+0x6e/0xa0
[ 1229.791490] process_one_work+0x1a7/0x360
[ 1229.791491] ? create_worker+0x1a0/0x1a0
[ 1229.791493] worker_thread+0x30/0x390
[ 1229.791494] ? create_worker+0x1a0/0x1a0
[ 1229.791495] kthread+0x10a/0x120
[ 1229.791497] ? set_kthread_struct+0x40/0x40
[ 1229.791499] ret_from_fork+0x1f/0x40
[ 1229.791739] INFO: task targetcli:28666 blocked for more than 120 seconds.
[ 1229.791740] Tainted: G OE --------- - - 4.18.0-372.9.1.el8.x86_64 #1
[ 1229.791741] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 1229.791742] task:targetcli state:D stack: 0 pid:28666 ppid: 5510 flags:0x00004080
[ 1229.791743] Call Trace:
[ 1229.791744] __schedule+0x2d1/0x830
[ 1229.791746] schedule+0x35/0xa0
[ 1229.791748] schedule_preempt_disabled+0xa/0x10
[ 1229.791749] __mutex_lock.isra.7+0x310/0x420
[ 1229.791751] rdma_destroy_id+0x15/0x20 [rdma_cm]
[ 1229.791755] isert_connect_release+0x115/0x130 [ib_isert]
[ 1229.791757] isert_free_np+0x87/0x140 [ib_isert]
[ 1229.791761] iscsit_del_np+0x74/0x120 [iscsi_target_mod]
[ 1229.791776] lio_target_np_driver_store+0xe9/0x140 [iscsi_target_mod]
[ 1229.791784] configfs_write_file+0xb2/0x110
[ 1229.791788] vfs_write+0xa5/0x1a0
[ 1229.791792] ksys_write+0x4f/0xb0
[ 1229.791794] do_syscall_64+0x5b/0x1a0
[ 1229.791798] entry_SYSCALL_64_after_hwframe+0x65/0xca
Fixes: bd3792205aae ("iser-target: Fix pending connections handling in target stack shutdown sequnce")
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
---
drivers/infiniband/ulp/isert/ib_isert.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index f290cd49698e..b4809d237250 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -2431,6 +2431,7 @@ isert_free_np(struct iscsi_np *np)
{
struct isert_np *isert_np = np->np_context;
struct isert_conn *isert_conn, *n;
+ LIST_HEAD(drop_conn_list);
if (isert_np->cm_id)
rdma_destroy_id(isert_np->cm_id);
@@ -2450,7 +2451,7 @@ isert_free_np(struct iscsi_np *np)
node) {
isert_info("cleaning isert_conn %p state (%d)\n",
isert_conn, isert_conn->state);
- isert_connect_release(isert_conn);
+ list_move_tail(&isert_conn->node, &drop_conn_list);
}
}
@@ -2461,11 +2462,16 @@ isert_free_np(struct iscsi_np *np)
node) {
isert_info("cleaning isert_conn %p state (%d)\n",
isert_conn, isert_conn->state);
- isert_connect_release(isert_conn);
+ list_move_tail(&isert_conn->node, &drop_conn_list);
}
}
mutex_unlock(&isert_np->mutex);
+ list_for_each_entry_safe(isert_conn, n, &drop_conn_list, node) {
+ list_del_init(&isert_conn->node);
+ isert_connect_release(isert_conn);
+ }
+
np->np_context = NULL;
kfree(isert_np);
}
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4227 bytes --]
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 for-rc 2/3] IB/isert: Fix possible list corruption in CMA handler
2023-06-02 10:56 [PATCH v2 for-rc 0/3] IB/isert Bug fixes in ib_isert Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 1/3] IB/isert: Fix dead lock " Saravanan Vajravel
@ 2023-06-02 10:56 ` Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion Saravanan Vajravel
2 siblings, 0 replies; 6+ messages in thread
From: Saravanan Vajravel @ 2023-06-02 10:56 UTC (permalink / raw)
To: selvin.xavier, jgg, leon, sagi; +Cc: linux-rdma, Saravanan Vajravel
[-- Attachment #1: Type: text/plain, Size: 1193 bytes --]
When ib_isert module receives connection error event, it is
releasing the isert session and removes corresponding list
node but it doesn't take appropriate mutex lock to remove
the list node. This can lead to linked list corruption
Fixes: bd3792205aae ("iser-target: Fix pending connections handling in target stack shutdown sequnce")
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
---
drivers/infiniband/ulp/isert/ib_isert.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index b4809d237250..7214a9bba524 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -657,11 +657,15 @@ static int
isert_connect_error(struct rdma_cm_id *cma_id)
{
struct isert_conn *isert_conn = cma_id->qp->qp_context;
+ struct isert_np *isert_np = cma_id->context;
ib_drain_qp(isert_conn->qp);
+
+ mutex_lock(&isert_np->mutex);
list_del_init(&isert_conn->node);
isert_conn->cm_id = NULL;
isert_put_conn(isert_conn);
+ mutex_unlock(&isert_np->mutex);
return -1;
}
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4227 bytes --]
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion
2023-06-02 10:56 [PATCH v2 for-rc 0/3] IB/isert Bug fixes in ib_isert Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 1/3] IB/isert: Fix dead lock " Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 2/3] IB/isert: Fix possible list corruption in CMA handler Saravanan Vajravel
@ 2023-06-02 10:56 ` Saravanan Vajravel
2023-06-05 22:56 ` Sagi Grimberg
2 siblings, 1 reply; 6+ messages in thread
From: Saravanan Vajravel @ 2023-06-02 10:56 UTC (permalink / raw)
To: selvin.xavier, jgg, leon, sagi; +Cc: linux-rdma, Saravanan Vajravel
[-- Attachment #1: Type: text/plain, Size: 1252 bytes --]
The ib_isert module is releasing the isert connection both in
isert_wait_conn() handler as well as isert_free_conn() handler.
In isert_wait_conn() handler, it is expected to wait for iSCSI
session logout operation to complete. It should free the isert
connection only in isert_free_conn() handler.
When a bunch of iSER target is cleared, this issue can lead to
use-after-free memory issue as isert conn is twice released
Fixes: 0fc4ea701fcf ("Target/iser: Don't put isert_conn inside disconnected handler")
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
---
drivers/infiniband/ulp/isert/ib_isert.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 7214a9bba524..c6b94a52afe2 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -2570,8 +2570,6 @@ static void isert_wait_conn(struct iscsit_conn *conn)
isert_put_unsol_pending_cmds(conn);
isert_wait4cmds(conn);
isert_wait4logout(isert_conn);
-
- queue_work(isert_release_wq, &isert_conn->release_work);
}
static void isert_free_conn(struct iscsit_conn *conn)
--
2.31.1
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4227 bytes --]
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion
2023-06-02 10:56 ` [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion Saravanan Vajravel
@ 2023-06-05 22:56 ` Sagi Grimberg
2023-06-06 10:27 ` Saravanan Vajravel
0 siblings, 1 reply; 6+ messages in thread
From: Sagi Grimberg @ 2023-06-05 22:56 UTC (permalink / raw)
To: Saravanan Vajravel, selvin.xavier, jgg, leon; +Cc: linux-rdma
> The ib_isert module is releasing the isert connection both in
> isert_wait_conn() handler as well as isert_free_conn() handler.
> In isert_wait_conn() handler, it is expected to wait for iSCSI
> session logout operation to complete. It should free the isert
> connection only in isert_free_conn() handler.
>
> When a bunch of iSER target is cleared, this issue can lead to
> use-after-free memory issue as isert conn is twice released
>
> Fixes: 0fc4ea701fcf ("Target/iser: Don't put isert_conn inside disconnected handler")
Doesn't seem quite right?
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion
2023-06-05 22:56 ` Sagi Grimberg
@ 2023-06-06 10:27 ` Saravanan Vajravel
0 siblings, 0 replies; 6+ messages in thread
From: Saravanan Vajravel @ 2023-06-06 10:27 UTC (permalink / raw)
To: Sagi Grimberg, Selvin Xavier, jgg, leon; +Cc: linux-rdma
[-- Attachment #1: Type: text/plain, Size: 617 bytes --]
> > The ib_isert module is releasing the isert connection both in
> > isert_wait_conn() handler as well as isert_free_conn() handler.
> > In isert_wait_conn() handler, it is expected to wait for iSCSI session
> > logout operation to complete. It should free the isert connection only
> > in isert_free_conn() handler.
> >
> > When a bunch of iSER target is cleared, this issue can lead to
> > use-after-free memory issue as isert conn is twice released
> >
> > Fixes: 0fc4ea701fcf ("Target/iser: Don't put isert_conn inside
> > disconnected handler")
> Doesn't seem quite right?
Corrected Fixes tag. Sent v3 patch.
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4227 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-06-06 10:27 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-02 10:56 [PATCH v2 for-rc 0/3] IB/isert Bug fixes in ib_isert Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 1/3] IB/isert: Fix dead lock " Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 2/3] IB/isert: Fix possible list corruption in CMA handler Saravanan Vajravel
2023-06-02 10:56 ` [PATCH v2 for-rc 3/3] IB/isert: Fix incorrect release of isert connextion Saravanan Vajravel
2023-06-05 22:56 ` Sagi Grimberg
2023-06-06 10:27 ` Saravanan Vajravel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).