kernel_samsung_a53x/drivers/nvme/target
Sagi Grimberg 2292d327da nvmet-rdma: fix possible bad dereference when freeing rsps
[ Upstream commit 73964c1d07c054376f1b32a62548571795159148 ]

It is possible that the host connected and saw a cm established
event and started sending nvme capsules on the qp, however the
ctrl did not yet see an established event. This is why the
rsp_wait_list exists (for async handling of these cmds, we move
them to a pending list).

Furthermore, it is possible that the ctrl cm times out, resulting
in a connect-error cm event. in this case we hit a bad deref [1]
because in nvmet_rdma_free_rsps we assume that all the responses
are in the free list.

We are freeing the cmds array anyways, so don't even bother to
remove the rsp from the free_list. It is also guaranteed that we
are not racing anything when we are releasing the queue so no
other context accessing this array should be running.

[1]:
--
Workqueue: nvmet-free-wq nvmet_rdma_free_queue_work [nvmet_rdma]
[...]
pc : nvmet_rdma_free_rsps+0x78/0xb8 [nvmet_rdma]
lr : nvmet_rdma_free_queue_work+0x88/0x120 [nvmet_rdma]
 Call trace:
 nvmet_rdma_free_rsps+0x78/0xb8 [nvmet_rdma]
 nvmet_rdma_free_queue_work+0x88/0x120 [nvmet_rdma]
 process_one_work+0x1ec/0x4a0
 worker_thread+0x48/0x490
 kthread+0x158/0x160
 ret_from_fork+0x10/0x18
--

Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-23 23:20:47 +01:00
..
admin-cmd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
configfs.c nvmet: fix ns enable/disable possible hang 2024-11-19 12:27:10 +01:00
core.c nvmet: fix a possible leak when destroy a ctrl during qp establishment 2024-11-19 14:19:43 +01:00
discovery.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fabrics-cmd.c nvmet: nul-terminate the NQNs passed in the connect command 2024-11-18 12:10:55 +01:00
fc.c nvmet-fc: abort command when there is no binding 2024-11-18 22:25:33 +01:00
fcloop.c nvmet-fcloop: swap the list_add_tail arguments 2024-11-18 22:25:33 +01:00
io-cmd-bdev.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
io-cmd-file.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
loop.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nvmet.h nvmet: remove unnecessary ctrl parameter 2024-11-18 12:10:55 +01:00
passthru.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rdma.c nvmet-rdma: fix possible bad dereference when freeing rsps 2024-11-23 23:20:47 +01:00
tcp.c nvmet-tcp: do not continue for invalid icreq 2024-11-23 23:20:46 +01:00
trace.c nvmet-trace: avoid dereferencing pointer too early 2024-11-23 23:20:45 +01:00
trace.h nvmet-trace: avoid dereferencing pointer too early 2024-11-23 23:20:45 +01:00