I agree that for at least put_user() using asm goto would be an
better option. get_user() on the other hand, will be much messier to
deal with, since asm goto statements can't have outputs, plus it
zeroes the output register on fault.
get_user() is the much more interesting one for me. A read from
a poisoned user address that generates a machine check is something
that can be recovered (kill the process). A write to user space doesn't
even generate a machine check.