]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/mm/gmap: Fix __gmap_fault() return code
authorClaudio Imbrenda <imbrenda@linux.ibm.com>
Tue, 22 Oct 2024 12:05:54 +0000 (14:05 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 29 Oct 2024 10:49:18 +0000 (11:49 +0100)
Errors in fixup_user_fault() were masked and -EFAULT was returned for
any error, including out of memory.

Fix this by returning the correct error code. This means that in many
cases the error code will be propagated all the way to userspace.

Suggested-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Link: https://lore.kernel.org/r/20241022120601.167009-5-imbrenda@linux.ibm.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/mm/gmap.c

index f51ad948ba53c0490dfd1d1a8f03a3159c8bd59d..a8746f71c679afeb2a761fa22db48bca8476b65a 100644 (file)
@@ -718,13 +718,12 @@ retry:
        if (IS_ERR_VALUE(vmaddr))
                return vmaddr;
 
-       if (fault_flags & FAULT_FLAG_RETRY_NOWAIT) {
+       if (fault_flags & FAULT_FLAG_RETRY_NOWAIT)
                rc = fixup_user_fault_nowait(gmap->mm, vmaddr, fault_flags, &unlocked);
-               if (rc)
-                       return rc;
-       } else if (fixup_user_fault(gmap->mm, vmaddr, fault_flags, &unlocked)) {
-               return -EFAULT;
-       }
+       else
+               rc = fixup_user_fault(gmap->mm, vmaddr, fault_flags, &unlocked);
+       if (rc)
+               return rc;
        /*
         * In the case that fixup_user_fault unlocked the mmap_lock during
         * fault-in, redo __gmap_translate() to avoid racing with a