On Fri, Sep 04, 2020 at 04:31:43PM -0400, Gabriel Krisman Bertazi wrote:
+int set_syscall_user_dispatch(int mode, unsigned long dispatcher_start,
unsigned long dispatcher_end, char __user *selector)
+{
- switch (mode) {
- case PR_SYS_DISPATCH_OFF:
...
- case PR_SYS_DISPATCH_ON:
...
- default:
return -EINVAL;
...
- case PR_SET_SYSCALL_USER_DISPATCH:
error = set_syscall_user_dispatch((int) arg2, arg3, arg4,
(char __user *) arg5);
This makes aliases of DISPATCH_OFF and DISPATCH_ON every 4GB throughout the 64-bit space of arg2. I don't think that was intentional (nor desirable). I'd suggest just making 'mode' a long and dropping the cast.