aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2017-06-30 04:01:06 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2017-07-12 17:06:51 -0400
commiteeac8cda2c957e156093933b860eec09e488fe15 (patch)
treeea0ae90c30da15876cbd6c8d1a127e0461b7e758
parentc57ec8fb7c025322f25a077afc94e0ef18cc3d89 (diff)
scsi: cxlflash: return -EFAULT if copy_from_user() fails
The copy_from/to_user() functions return the number of bytes remaining to be copied but we had intended to return -EFAULT here. Fixes: bc88ac47d5cb ("scsi: cxlflash: Support AFU debug") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Acked-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/cxlflash/main.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 077f62e208aa..6a4367cc9caa 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -3401,9 +3401,10 @@ static int cxlflash_afu_debug(struct cxlflash_cfg *cfg,
3401 if (is_write) { 3401 if (is_write) {
3402 req_flags |= SISL_REQ_FLAGS_HOST_WRITE; 3402 req_flags |= SISL_REQ_FLAGS_HOST_WRITE;
3403 3403
3404 rc = copy_from_user(kbuf, ubuf, ulen); 3404 if (copy_from_user(kbuf, ubuf, ulen)) {
3405 if (unlikely(rc)) 3405 rc = -EFAULT;
3406 goto out; 3406 goto out;
3407 }
3407 } 3408 }
3408 } 3409 }
3409 3410
@@ -3431,8 +3432,10 @@ static int cxlflash_afu_debug(struct cxlflash_cfg *cfg,
3431 goto out; 3432 goto out;
3432 } 3433 }
3433 3434
3434 if (ulen && !is_write) 3435 if (ulen && !is_write) {
3435 rc = copy_to_user(ubuf, kbuf, ulen); 3436 if (copy_to_user(ubuf, kbuf, ulen))
3437 rc = -EFAULT;
3438 }
3436out: 3439out:
3437 kfree(buf); 3440 kfree(buf);
3438 dev_dbg(dev, "%s: returning rc=%d\n", __func__, rc); 3441 dev_dbg(dev, "%s: returning rc=%d\n", __func__, rc);