Commit 7a846656 authored by Israel Rukshin's avatar Israel Rukshin Committed by Christoph Hellwig
Browse files

nvmet-rdma: Fix NULL deref when setting pi_enable and traddr INADDR_ANY



When setting port traddr to INADDR_ANY, the listening cm_id->device
is NULL. The associate IB device is known only when a connect request
event arrives, so checking T10-PI device capability should be done
at this stage.

Fixes: b09160c3 ("nvmet-rdma: add metadata/T10-PI support")
Signed-off-by: default avatarIsrael Rukshin <israelr@nvidia.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarMax Gurtovoy <mgurtovoy@nvidia.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 5342fd42
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1220,6 +1220,14 @@ nvmet_rdma_find_get_device(struct rdma_cm_id *cm_id)
	}
	ndev->inline_data_size = nport->inline_data_size;
	ndev->inline_page_count = inline_page_count;

	if (nport->pi_enable && !(cm_id->device->attrs.device_cap_flags &
				  IB_DEVICE_INTEGRITY_HANDOVER)) {
		pr_warn("T10-PI is not supported by device %s. Disabling it\n",
			cm_id->device->name);
		nport->pi_enable = false;
	}

	ndev->device = cm_id->device;
	kref_init(&ndev->ref);

@@ -1855,14 +1863,6 @@ static int nvmet_rdma_enable_port(struct nvmet_rdma_port *port)
		goto out_destroy_id;
	}

	if (port->nport->pi_enable &&
	    !(cm_id->device->attrs.device_cap_flags &
	      IB_DEVICE_INTEGRITY_HANDOVER)) {
		pr_err("T10-PI is not supported for %pISpcs\n", addr);
		ret = -EINVAL;
		goto out_destroy_id;
	}

	port->cm_id = cm_id;
	return 0;