]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Mar 2022 15:00:24 +0000 (16:00 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Mar 2022 15:00:24 +0000 (16:00 +0100)
added patches:
nds32-fix-access_ok-checks-in-get-put_user.patch

queue-4.19/nds32-fix-access_ok-checks-in-get-put_user.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/nds32-fix-access_ok-checks-in-get-put_user.patch b/queue-4.19/nds32-fix-access_ok-checks-in-get-put_user.patch
new file mode 100644 (file)
index 0000000..2bc27a5
--- /dev/null
@@ -0,0 +1,75 @@
+From 8926d88ced46700bf6117ceaf391480b943ea9f4 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Mon, 14 Feb 2022 15:48:14 +0100
+Subject: nds32: fix access_ok() checks in get/put_user
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 8926d88ced46700bf6117ceaf391480b943ea9f4 upstream.
+
+The get_user()/put_user() functions are meant to check for
+access_ok(), while the __get_user()/__put_user() functions
+don't.
+
+This broke in 4.19 for nds32, when it gained an extraneous
+check in __get_user(), but lost the check it needs in
+__put_user().
+
+Fixes: 487913ab18c2 ("nds32: Extract the checking and getting pointer to a macro")
+Cc: stable@vger.kernel.org @ v4.19+
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/nds32/include/asm/uaccess.h |   22 +++++++++++++++++-----
+ 1 file changed, 17 insertions(+), 5 deletions(-)
+
+--- a/arch/nds32/include/asm/uaccess.h
++++ b/arch/nds32/include/asm/uaccess.h
+@@ -75,9 +75,7 @@ static inline void set_fs(mm_segment_t f
+  * versions are void (ie, don't return a value as such).
+  */
+-#define get_user      __get_user                                      \
+-
+-#define __get_user(x, ptr)                                            \
++#define get_user(x, ptr)                                              \
+ ({                                                                    \
+       long __gu_err = 0;                                              \
+       __get_user_check((x), (ptr), __gu_err);                         \
+@@ -90,6 +88,14 @@ static inline void set_fs(mm_segment_t f
+       (void)0;                                                        \
+ })
++#define __get_user(x, ptr)                                            \
++({                                                                    \
++      long __gu_err = 0;                                              \
++      const __typeof__(*(ptr)) __user *__p = (ptr);                   \
++      __get_user_err((x), __p, (__gu_err));                           \
++      __gu_err;                                                       \
++})
++
+ #define __get_user_check(x, ptr, err)                                 \
+ ({                                                                    \
+       const __typeof__(*(ptr)) __user *__p = (ptr);                   \
+@@ -170,12 +176,18 @@ do {                                                                     \
+               : "r"(addr), "i"(-EFAULT)                               \
+               : "cc")
+-#define put_user      __put_user                                      \
++#define put_user(x, ptr)                                              \
++({                                                                    \
++      long __pu_err = 0;                                              \
++      __put_user_check((x), (ptr), __pu_err);                         \
++      __pu_err;                                                       \
++})
+ #define __put_user(x, ptr)                                            \
+ ({                                                                    \
+       long __pu_err = 0;                                              \
+-      __put_user_err((x), (ptr), __pu_err);                           \
++      __typeof__(*(ptr)) __user *__p = (ptr);                         \
++      __put_user_err((x), __p, __pu_err);                             \
+       __pu_err;                                                       \
+ })
index adeefab654993add836d41fd06f4c18ccf152031..e4c4b5215dfc14183a3668fc2485cd0d1aa196b8 100644 (file)
@@ -17,3 +17,4 @@ acpi-battery-add-device-hid-and-quirk-for-microsoft-surface-go-3.patch
 acpi-video-force-backlight-native-for-clevo-nl5xru-and-nl5xnu.patch
 crypto-qat-disable-registration-of-algorithms.patch
 mac80211-fix-potential-double-free-on-mesh-join.patch
+nds32-fix-access_ok-checks-in-get-put_user.patch