Message ID | 20210331142345.27532-1-rppt@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | memfd_secret: use unsigned int rather than long as syscall flags type | expand |
On 31.03.21 16:23, Mike Rapoport wrote: > From: Mike Rapoport <rppt@linux.ibm.com> > > Yuri Norov says: > > If parameter size is the same for native and compat ABIs, we may > wire a syscall made by compat client to native handler. This is > true for unsigned int, but not true for unsigned long or pointer. > > That's why I suggest using unsigned int and so avoid creating compat > entry point. > > Use unsigned int as the type of the flags parameter in memfd_secret() > system call. > > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> > --- > > @Andrew, > The patch is vs v5.12-rc5-mmots-2021-03-30-23, I'd appreciate if it would > be added as a fixup to the memfd_secret series. > > include/linux/syscalls.h | 2 +- > mm/secretmem.c | 2 +- > tools/testing/selftests/vm/memfd_secret.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h > index 49c93c906893..1a1b5d724497 100644 > --- a/include/linux/syscalls.h > +++ b/include/linux/syscalls.h > @@ -1050,7 +1050,7 @@ asmlinkage long sys_landlock_create_ruleset(const struct landlock_ruleset_attr _ > asmlinkage long sys_landlock_add_rule(int ruleset_fd, enum landlock_rule_type rule_type, > const void __user *rule_attr, __u32 flags); > asmlinkage long sys_landlock_restrict_self(int ruleset_fd, __u32 flags); > -asmlinkage long sys_memfd_secret(unsigned long flags); > +asmlinkage long sys_memfd_secret(unsigned int flags); > > /* > * Architecture-specific system calls > diff --git a/mm/secretmem.c b/mm/secretmem.c > index f2ae3f32a193..3b1ba3991964 100644 > --- a/mm/secretmem.c > +++ b/mm/secretmem.c > @@ -199,7 +199,7 @@ static struct file *secretmem_file_create(unsigned long flags) > return file; > } > > -SYSCALL_DEFINE1(memfd_secret, unsigned long, flags) > +SYSCALL_DEFINE1(memfd_secret, unsigned int, flags) > { > struct file *file; > int fd, err; > diff --git a/tools/testing/selftests/vm/memfd_secret.c b/tools/testing/selftests/vm/memfd_secret.c > index c878c2b841fc..2462f52e9c96 100644 > --- a/tools/testing/selftests/vm/memfd_secret.c > +++ b/tools/testing/selftests/vm/memfd_secret.c > @@ -38,7 +38,7 @@ static unsigned long page_size; > static unsigned long mlock_limit_cur; > static unsigned long mlock_limit_max; > > -static int memfd_secret(unsigned long flags) > +static int memfd_secret(unsigned int flags) > { > return syscall(__NR_memfd_secret, flags); > } > LGTM
On Wed, Mar 31, 2021 at 05:23:45PM +0300, Mike Rapoport wrote: > From: Mike Rapoport <rppt@linux.ibm.com> > > Yuri Norov says: > > If parameter size is the same for native and compat ABIs, we may > wire a syscall made by compat client to native handler. This is > true for unsigned int, but not true for unsigned long or pointer. > > That's why I suggest using unsigned int and so avoid creating compat > entry point. > > Use unsigned int as the type of the flags parameter in memfd_secret() > system call. > > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Acked-by: Yury Norov <yury.norov@gmail.com>
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 49c93c906893..1a1b5d724497 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -1050,7 +1050,7 @@ asmlinkage long sys_landlock_create_ruleset(const struct landlock_ruleset_attr _ asmlinkage long sys_landlock_add_rule(int ruleset_fd, enum landlock_rule_type rule_type, const void __user *rule_attr, __u32 flags); asmlinkage long sys_landlock_restrict_self(int ruleset_fd, __u32 flags); -asmlinkage long sys_memfd_secret(unsigned long flags); +asmlinkage long sys_memfd_secret(unsigned int flags); /* * Architecture-specific system calls diff --git a/mm/secretmem.c b/mm/secretmem.c index f2ae3f32a193..3b1ba3991964 100644 --- a/mm/secretmem.c +++ b/mm/secretmem.c @@ -199,7 +199,7 @@ static struct file *secretmem_file_create(unsigned long flags) return file; } -SYSCALL_DEFINE1(memfd_secret, unsigned long, flags) +SYSCALL_DEFINE1(memfd_secret, unsigned int, flags) { struct file *file; int fd, err; diff --git a/tools/testing/selftests/vm/memfd_secret.c b/tools/testing/selftests/vm/memfd_secret.c index c878c2b841fc..2462f52e9c96 100644 --- a/tools/testing/selftests/vm/memfd_secret.c +++ b/tools/testing/selftests/vm/memfd_secret.c @@ -38,7 +38,7 @@ static unsigned long page_size; static unsigned long mlock_limit_cur; static unsigned long mlock_limit_max; -static int memfd_secret(unsigned long flags) +static int memfd_secret(unsigned int flags) { return syscall(__NR_memfd_secret, flags); }