nvme-rdma: fix double freeing of async event data
Some error paths in configuration of admin queue free data buffer associated with async request SQE without resetting the data buffer pointer to NULL, This buffer is also freed up again if the controller is shutdown or reset. Signed-off-by: Prabhath Sajeepa <psajeepa@purestorage.com> Reviewed-by: Roland Dreier <roland@purestorage.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Christoph Hellwig

vecāks
f6c8e432cb
revīzija
6344d02dc8
@@ -184,6 +184,7 @@ static int nvme_rdma_alloc_qe(struct ib_device *ibdev, struct nvme_rdma_qe *qe,
|
||||
qe->dma = ib_dma_map_single(ibdev, qe->data, capsule_size, dir);
|
||||
if (ib_dma_mapping_error(ibdev, qe->dma)) {
|
||||
kfree(qe->data);
|
||||
qe->data = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -823,6 +824,7 @@ out_free_tagset:
|
||||
out_free_async_qe:
|
||||
nvme_rdma_free_qe(ctrl->device->dev, &ctrl->async_event_sqe,
|
||||
sizeof(struct nvme_command), DMA_TO_DEVICE);
|
||||
ctrl->async_event_sqe.data = NULL;
|
||||
out_free_queue:
|
||||
nvme_rdma_free_queue(&ctrl->queues[0]);
|
||||
return error;
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user