Re: [PATCH v6 5/9] kernel: Implement selective syscall userspace redirection

From: Matthew Wilcox
Date: Sat Sep 05 2020 - 07:26:24 EST


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.