• Helge Deller's avatar
    parisc: Fix some apparent put_user() failures · dbd0b423
    Helge Deller authored
    After commit 4b9d2a73 ("parisc: Switch user access functions
    to signal errors in r29 instead of r8") bash suddenly started
    to report those warnings after login:
    
    -bash: cannot set terminal process group (-1): Bad file descriptor
    -bash: no job control in this shell
    
    It turned out, that a function call inside a put_user(), e.g.:
    put_user(vt_do_kdgkbmode(console), (int __user *)arg);
    clobbered the error register (r29) and thus the put_user() call itself
    seem to have failed.
    
    Rearrange the C-code to pre-calculate the intermediate value
    and then do the put_user().
    Additionally prefer the "+" constraint on pu_err and gu_err registers
    to tell the compiler that those operands are both read and written by
    the assembly instruction.
    Reported-by: default avatarJohn David Anglin <dave.anglin@bell.net>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Fixes: 4b9d2a73 ("parisc: Switch user access functions to signal errors in r29 instead of r8")
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    dbd0b423
uaccess.h 6.28 KB