Commit c3d90406 authored by Jim Harris's avatar Jim Harris Committed by Tomasz Zawadzki
Browse files

nvmf/rdma: don't allow port 0



Port 0 will allocate an ephemeral port instead,
which we don't want.

This check will also guard against -0 being used.

Signed-off-by: default avatarJim Harris <jim.harris@samsung.com>
Change-Id: If249b145374aca0d5b7913c3c201cf7892842816
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20529


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent a1246d4d
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -2906,6 +2906,7 @@ nvmf_rdma_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_t
	struct addrinfo			hints;
	int				family;
	int				rc;
	long int			port_val;
	bool				is_retry = false;

	if (!strlen(trid->trsvcid)) {
@@ -2943,6 +2944,18 @@ nvmf_rdma_listen(struct spdk_nvmf_transport *transport, const struct spdk_nvme_t
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = 0;

	/* Range check the trsvcid. Fail in 3 cases:
	 * < 0: means that spdk_strtol hit an error
	 * 0: this results in ephemeral port which we don't want
	 * > 65535: port too high
	 */
	port_val = spdk_strtol(trid->trsvcid, 10);
	if (port_val <= 0 || port_val > 65535) {
		SPDK_ERRLOG("invalid trsvcid %s\n", trid->trsvcid);
		free(port);
		return -EINVAL;
	}

	rc = getaddrinfo(trid->traddr, trid->trsvcid, &hints, &res);
	if (rc) {
		SPDK_ERRLOG("getaddrinfo failed: %s (%d)\n", gai_strerror(rc), rc);