Following patch will add missing barrier_nospec() to
copy_from_user_iter().

Avoid it for architectures supporting masked user
accesses, the same way as done for copy_from_user() by
commit 0fc810ae3ae1 ("x86/uaccess: Avoid barrier_nospec()
in 64-bit copy_from_user()")

Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
---
v2: New in v2
---
 lib/iov_iter.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index f9193f952f49..48bd0cbce8c2 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -49,12 +49,16 @@ size_t copy_from_user_iter(void __user *iter_from, size_t 
progress,
 
        if (should_fail_usercopy())
                return len;
-       if (access_ok(iter_from, len)) {
-               to += progress;
-               instrument_copy_from_user_before(to, iter_from, len);
-               res = raw_copy_from_user(to, iter_from, len);
-               instrument_copy_from_user_after(to, iter_from, len, res);
-       }
+       if (can_do_masked_user_access())
+               iter_from = mask_user_address(iter_from);
+       else if (!access_ok(iter_from, len))
+               return res;
+
+       to += progress;
+       instrument_copy_from_user_before(to, iter_from, len);
+       res = raw_copy_from_user(to, iter_from, len);
+       instrument_copy_from_user_after(to, iter_from, len, res);
+
        return res;
 }
 
-- 
2.49.0


Reply via email to