On Thu, Apr 21, 2022 at 9:50 AM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > where that "read(..) = 16" is the important part. It correctly figured > out that it can only do 16 bytes (ok, 17, but we've always allowed the > user accessor functions to block). Bad choice of words - by "block" I meant "doing the accesses in blocks", in this case 64-bit words. Obviously the user accessors _also_ "block" in the sense of having to wait for page faults and IO. I think 'copy_{to,from}_user()' actually does go to the effort to try to do byte-exact results, though. In particular, see copy_user_handle_tail in arch/x86/lib/copy_user_64.S. But I think that we long ago ended up deciding it really wasn't worth doing it, and x86 ends up just going to unnecessary lengths for this case. Linus