]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
maccess: Fix writing offset in case of fault in strncpy_from_kernel_nofault()
authorAlban Crequy <albancrequy@linux.microsoft.com>
Thu, 10 Nov 2022 08:56:13 +0000 (09:56 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Nov 2022 16:45:53 +0000 (17:45 +0100)
commit 8678ea06852cd1f819b870c773d43df888d15d46 upstream.

If a page fault occurs while copying the first byte, this function resets one
byte before dst.
As a consequence, an address could be modified and leaded to kernel crashes if
case the modified address was accessed later.

Fixes: b58294ead14c ("maccess: allow architectures to provide kernel probing directly")
Signed-off-by: Alban Crequy <albancrequy@linux.microsoft.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Francis Laniel <flaniel@linux.microsoft.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: <stable@vger.kernel.org> [5.8]
Link: https://lore.kernel.org/bpf/20221110085614.111213-2-albancrequy@linux.microsoft.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
mm/maccess.c

index 3bd70405f2d848d15ee90897e7e267eb3de2ebda..f6ea117a69eb55cde01746c40d69cbf9c54a45ca 100644 (file)
@@ -83,7 +83,7 @@ long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
        return src - unsafe_addr;
 Efault:
        pagefault_enable();
-       dst[-1] = '\0';
+       dst[0] = '\0';
        return -EFAULT;
 }
 #else /* HAVE_GET_KERNEL_NOFAULT */