mirror of https://github.com/torvalds/linux.git
iov_iter: Add missing speculation barrier to copy_from_user_iter()
The results of "access_ok()" can be mis-speculated. The result is that
the CPU can end speculatively:
if (access_ok(from, size))
// Right here
For the same reason as done in copy_from_user() in commit 74e19ef0ff
("uaccess: Add speculation barrier to copy_from_user()"), add a speculation
barrier to copy_from_user_iter().
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://patch.msgid.link/6b73e69cc7168c89df4eab0a216e3ed4cca36b0a.1763396724.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
4db1df7a72
commit
803abedbd5
|
|
@ -49,11 +49,19 @@ size_t copy_from_user_iter(void __user *iter_from, size_t progress,
|
|||
|
||||
if (should_fail_usercopy())
|
||||
return len;
|
||||
if (can_do_masked_user_access())
|
||||
if (can_do_masked_user_access()) {
|
||||
iter_from = mask_user_address(iter_from);
|
||||
else if (!access_ok(iter_from, len))
|
||||
} else {
|
||||
if (!access_ok(iter_from, len))
|
||||
return res;
|
||||
|
||||
/*
|
||||
* Ensure that bad access_ok() speculation will not
|
||||
* lead to nasty side effects *after* the copy is
|
||||
* finished:
|
||||
*/
|
||||
barrier_nospec();
|
||||
}
|
||||
to += progress;
|
||||
instrument_copy_from_user_before(to, iter_from, len);
|
||||
res = raw_copy_from_user(to, iter_from, len);
|
||||
|
|
|
|||
Loading…
Reference in New Issue