Commit 473aaf52 authored by Claudio Imbrenda's avatar Claudio Imbrenda Committed by Heiko Carstens
Browse files

s390/mm/gmap: Fix __gmap_fault() return code



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: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Acked-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
Link: https://lore.kernel.org/r/20241022120601.167009-5-imbrenda@linux.ibm.com


Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 075fd736
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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);
	else
		rc = fixup_user_fault(gmap->mm, vmaddr, fault_flags, &unlocked);
	if (rc)
		return rc;
	} else if (fixup_user_fault(gmap->mm, vmaddr, fault_flags, &unlocked)) {
		return -EFAULT;
	}
	/*
	 * In the case that fixup_user_fault unlocked the mmap_lock during
	 * fault-in, redo __gmap_translate() to avoid racing with a