diff mbox series

[v3,04/11] s390/mm/gmap: Fix __gmap_fault() return code

Message ID 20241015164326.124987-5-imbrenda@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390/kvm: Handle guest-related program interrupts in KVM | expand

Commit Message

Claudio Imbrenda Oct. 15, 2024, 4:43 p.m. UTC
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>
---
 arch/s390/mm/gmap.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c
index f51ad948ba53..a8746f71c679 100644
--- a/arch/s390/mm/gmap.c
+++ b/arch/s390/mm/gmap.c
@@ -718,13 +718,12 @@  static int __gmap_fault(struct gmap *gmap, unsigned long gaddr, unsigned int fau
 	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