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:
Christophe Leroy 2025-11-17 17:43:42 +01:00 committed by Thomas Gleixner
parent 4db1df7a72
commit 803abedbd5
1 changed files with 11 additions and 3 deletions

View File

@ -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);