]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
misc: genwqe: should return proper error value.
authorzhong jiang <zhongjiang@huawei.com>
Thu, 20 Sep 2018 02:29:13 +0000 (10:29 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 26 Nov 2019 12:16:50 +0000 (13:16 +0100)
BugLink: https://bugs.launchpad.net/bugs/1853915
[ Upstream commit 02241995b004faa7d9ff628e97f24056190853f8 ]

The function should return -EFAULT when copy_from_user fails. Even
though the caller does not distinguish them. but we should keep backward
compatibility.

Signed-off-by: zhong jiang <zhongjiang@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/misc/genwqe/card_utils.c

index d5be7057afccc5866c44b0866ff75eb6cbf17538..634b2a7cfcac22691bd1bea0ce859653c1d155a5 100644 (file)
@@ -298,7 +298,7 @@ static int genwqe_sgl_size(int num_pages)
 int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
                          void __user *user_addr, size_t user_size, int write)
 {
-       int rc;
+       int ret = -ENOMEM;
        struct pci_dev *pci_dev = cd->pci_dev;
 
        sgl->fpage_offs = offset_in_page((unsigned long)user_addr);
@@ -318,7 +318,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
        if (get_order(sgl->sgl_size) > MAX_ORDER) {
                dev_err(&pci_dev->dev,
                        "[%s] err: too much memory requested!\n", __func__);
-               return -ENOMEM;
+               return ret;
        }
 
        sgl->sgl = __genwqe_alloc_consistent(cd, sgl->sgl_size,
@@ -326,7 +326,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
        if (sgl->sgl == NULL) {
                dev_err(&pci_dev->dev,
                        "[%s] err: no memory available!\n", __func__);
-               return -ENOMEM;
+               return ret;
        }
 
        /* Only use buffering on incomplete pages */
@@ -339,7 +339,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
                /* Sync with user memory */
                if (copy_from_user(sgl->fpage + sgl->fpage_offs,
                                   user_addr, sgl->fpage_size)) {
-                       rc = -EFAULT;
+                       ret = -EFAULT;
                        goto err_out;
                }
        }
@@ -352,7 +352,7 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
                /* Sync with user memory */
                if (copy_from_user(sgl->lpage, user_addr + user_size -
                                   sgl->lpage_size, sgl->lpage_size)) {
-                       rc = -EFAULT;
+                       ret = -EFAULT;
                        goto err_out2;
                }
        }
@@ -374,7 +374,8 @@ int genwqe_alloc_sync_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,
        sgl->sgl = NULL;
        sgl->sgl_dma_addr = 0;
        sgl->sgl_size = 0;
-       return -ENOMEM;
+
+       return ret;
 }
 
 int genwqe_setup_sgl(struct genwqe_dev *cd, struct genwqe_sgl *sgl,