On Sun, Oct 13, 2019 at 11:13 AM Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > > Umm... TBH, I wonder if we would be better off if restore_sigcontext() > (i.e. sigreturn()/rt_sigreturn()) would flat-out copy_from_user() the > entire[*] struct sigcontext into a local variable and then copied fields > to pt_regs... Probably ok., We've generally tried to avoid state that big on the stack, but you're right that it's shallow. > Same for do_sys_vm86(), perhaps. > > And these (32bit and 64bit restore_sigcontext() and do_sys_vm86()) > are the only get_user_ex() users anywhere... Yeah, that sounds like a solid strategy for getting rid of them. Particularly since we can't really make get_user_ex() generate particularly good code (at least for now). Now, put_user_ex() is a different thing - converting it to unsafe_put_user() actually does make it generate very good code - much better than copying data twice. Linus