Commit ce31c1b0 authored by Joern Engel's avatar Joern Engel Committed by Nicholas Bellinger

target: correctly handle match_int errors in FILEIO + PSCSI

This patch correctly handles match_int() errors in FILEIO + PSCSI
backend parameter parsing, which can potentially fail due to a
memory allocation failure or invalid argument.

Found by coverity.
Signed-off-by: default avatarJoern Engel <joern@logfs.org>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 68edbce4
...@@ -762,7 +762,9 @@ static ssize_t fd_set_configfs_dev_params(struct se_device *dev, ...@@ -762,7 +762,9 @@ static ssize_t fd_set_configfs_dev_params(struct se_device *dev,
fd_dev->fbd_flags |= FBDF_HAS_SIZE; fd_dev->fbd_flags |= FBDF_HAS_SIZE;
break; break;
case Opt_fd_buffered_io: case Opt_fd_buffered_io:
match_int(args, &arg); ret = match_int(args, &arg);
if (ret)
goto out;
if (arg != 1) { if (arg != 1) {
pr_err("bogus fd_buffered_io=%d value\n", arg); pr_err("bogus fd_buffered_io=%d value\n", arg);
ret = -EINVAL; ret = -EINVAL;
......
...@@ -749,14 +749,18 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev, ...@@ -749,14 +749,18 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev,
ret = -EINVAL; ret = -EINVAL;
goto out; goto out;
} }
match_int(args, &arg); ret = match_int(args, &arg);
if (ret)
goto out;
pdv->pdv_host_id = arg; pdv->pdv_host_id = arg;
pr_debug("PSCSI[%d]: Referencing SCSI Host ID:" pr_debug("PSCSI[%d]: Referencing SCSI Host ID:"
" %d\n", phv->phv_host_id, pdv->pdv_host_id); " %d\n", phv->phv_host_id, pdv->pdv_host_id);
pdv->pdv_flags |= PDF_HAS_VIRT_HOST_ID; pdv->pdv_flags |= PDF_HAS_VIRT_HOST_ID;
break; break;
case Opt_scsi_channel_id: case Opt_scsi_channel_id:
match_int(args, &arg); ret = match_int(args, &arg);
if (ret)
goto out;
pdv->pdv_channel_id = arg; pdv->pdv_channel_id = arg;
pr_debug("PSCSI[%d]: Referencing SCSI Channel" pr_debug("PSCSI[%d]: Referencing SCSI Channel"
" ID: %d\n", phv->phv_host_id, " ID: %d\n", phv->phv_host_id,
...@@ -764,7 +768,9 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev, ...@@ -764,7 +768,9 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev,
pdv->pdv_flags |= PDF_HAS_CHANNEL_ID; pdv->pdv_flags |= PDF_HAS_CHANNEL_ID;
break; break;
case Opt_scsi_target_id: case Opt_scsi_target_id:
match_int(args, &arg); ret = match_int(args, &arg);
if (ret)
goto out;
pdv->pdv_target_id = arg; pdv->pdv_target_id = arg;
pr_debug("PSCSI[%d]: Referencing SCSI Target" pr_debug("PSCSI[%d]: Referencing SCSI Target"
" ID: %d\n", phv->phv_host_id, " ID: %d\n", phv->phv_host_id,
...@@ -772,7 +778,9 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev, ...@@ -772,7 +778,9 @@ static ssize_t pscsi_set_configfs_dev_params(struct se_device *dev,
pdv->pdv_flags |= PDF_HAS_TARGET_ID; pdv->pdv_flags |= PDF_HAS_TARGET_ID;
break; break;
case Opt_scsi_lun_id: case Opt_scsi_lun_id:
match_int(args, &arg); ret = match_int(args, &arg);
if (ret)
goto out;
pdv->pdv_lun_id = arg; pdv->pdv_lun_id = arg;
pr_debug("PSCSI[%d]: Referencing SCSI LUN ID:" pr_debug("PSCSI[%d]: Referencing SCSI LUN ID:"
" %d\n", phv->phv_host_id, pdv->pdv_lun_id); " %d\n", phv->phv_host_id, pdv->pdv_lun_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment