ARM: 8797/1: spectre-v1.1: harden __copy_to_user
authorJulien Thierry <julien.thierry@arm.com>
Wed, 13 Feb 2019 21:32:15 +0000 (16:32 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Feb 2019 09:25:37 +0000 (10:25 +0100)
Commit a1d09e074250fad24f1b993f327b18cc6812eb7a upstream.

Sanitize user pointer given to __copy_to_user, both for standard version
and memcopy version of the user accessor.

Signed-off-by: Julien Thierry <julien.thierry@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: David A. Long <dave.long@linaro.org>
Reviewed-by: Julien Thierry <julien.thierry@arm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/arm/lib/copy_to_user.S
arch/arm/lib/uaccess_with_memcpy.c

index caf5019..970abe5 100644 (file)
 
 ENTRY(__copy_to_user_std)
 WEAK(arm_copy_to_user)
+#ifdef CONFIG_CPU_SPECTRE
+       get_thread_info r3
+       ldr     r3, [r3, #TI_ADDR_LIMIT]
+       uaccess_mask_range_ptr r0, r2, r3, ip
+#endif
 
 #include "copy_template.S"
 
@@ -108,4 +113,3 @@ ENDPROC(__copy_to_user_std)
        rsb     r0, r0, r2
        copy_abort_end
        .popsection
-
index 9b4ed17..73dc736 100644 (file)
@@ -152,7 +152,8 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
                n = __copy_to_user_std(to, from, n);
                uaccess_restore(ua_flags);
        } else {
-               n = __copy_to_user_memcpy(to, from, n);
+               n = __copy_to_user_memcpy(uaccess_mask_range_ptr(to, n),
+                                         from, n);
        }
        return n;
 }