diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index b91a19f5ecd..63e8205174d 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -859,7 +859,7 @@ asmlinkage long sys_process_vm_writev(pid_t pid, unsigned long riovcnt, unsigned long flags); -asmlinkage long sys_finit_module(int fd, const char __user *uargs); +asmlinkage long sys_finit_module(int fd, const char __user *uargs, int flags); asmlinkage long sys_seccomp(unsigned int op, unsigned int flags, const char __user *uargs); diff --git a/kernel/module.c b/kernel/module.c index c0268d2ae3f..27f667f978c 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -3498,7 +3498,7 @@ static int init_module_permission(void) return 0; } -SYSCALL_DEFINE2(finit_module, int, fd, const char __user *, uargs) +SYSCALL_DEFINE3(finit_module, int, fd, const char __user *, uargs, int, flags) { int err; struct load_info info = { }; @@ -3507,7 +3507,10 @@ SYSCALL_DEFINE2(finit_module, int, fd, const char __user *, uargs) if (err) return err; - pr_debug("finit_module: fd=%d, uargs=%p\n", fd, uargs); + pr_debug("finit_module: fd=%d, uargs=%p, flags=%i\n", fd, uargs, flags); + + if (flags) + return -EINVAL; if (fd < 0) return -ENOEXEC;