Loading
parisc: Fix some apparent put_user() failures
mainline inclusion from mainline-v5.17-rc1 commit dbd0b423 category: bugfix bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9E2GP CVE: CVE-2024-26706 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dbd0b42350d5717786cb8257fbe5b528f3af9772 -------------------------------- 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:John David Anglin <dave.anglin@bell.net> Signed-off-by:
Helge Deller <deller@gmx.de> Fixes: 4b9d2a73 ("parisc: Switch user access functions to signal errors in r29 instead of r8") Signed-off-by:
Helge Deller <deller@gmx.de> Signed-off-by:
Cheng Yu <serein.chengyu@huawei.com>