[PATCH v2] All arch: remove system call sys_sysctl
Rich Felker
dalias at libc.org
Fri Jun 12 02:39:02 AEST 2020
On Thu, Jun 11, 2020 at 06:43:00AM -0500, Eric W. Biederman wrote:
> Xiaoming Ni <nixiaoming at huawei.com> writes:
>
> > Since the commit 61a47c1ad3a4dc ("sysctl: Remove the sysctl system call"),
> > sys_sysctl is actually unavailable: any input can only return an error.
> >
> > We have been warning about people using the sysctl system call for years
> > and believe there are no more users. Even if there are users of this
> > interface if they have not complained or fixed their code by now they
> > probably are not going to, so there is no point in warning them any
> > longer.
> >
> > So completely remove sys_sysctl on all architectures.
>
>
>
> >
> > Signed-off-by: Xiaoming Ni <nixiaoming at huawei.com>
> >
> > changes in v2:
> > According to Kees Cook's suggestion, completely remove sys_sysctl on all arch
> > According to Eric W. Biederman's suggestion, update the commit log
> >
> > V1: https://lore.kernel.org/lkml/1591683605-8585-1-git-send-email-nixiaoming@huawei.com/
> > Delete the code of sys_sysctl and return -ENOSYS directly at the function entry
> > ---
> > include/uapi/linux/sysctl.h | 15 --
> [snip]
>
> > diff --git a/include/uapi/linux/sysctl.h b/include/uapi/linux/sysctl.h
> > index 27c1ed2..84b44c3 100644
> > --- a/include/uapi/linux/sysctl.h
> > +++ b/include/uapi/linux/sysctl.h
> > @@ -27,21 +27,6 @@
> > #include <linux/types.h>
> > #include <linux/compiler.h>
> >
> > -#define CTL_MAXNAME 10 /* how many path components do we allow in a
> > - call to sysctl? In other words, what is
> > - the largest acceptable value for the nlen
> > - member of a struct __sysctl_args to have? */
> > -
> > -struct __sysctl_args {
> > - int __user *name;
> > - int nlen;
> > - void __user *oldval;
> > - size_t __user *oldlenp;
> > - void __user *newval;
> > - size_t newlen;
> > - unsigned long __unused[4];
> > -};
> > -
> > /* Define sysctl names first */
> >
> > /* Top-level names: */
> [snip]
>
> The uapi header change does not make sense. The entire point of the
> header is to allow userspace programs to be able to call sys_sysctl.
> It either needs to all stay or all go.
>
> As the concern with the uapi header is about userspace programs being
> able to compile please leave the header for now.
>
> We should leave auditing userspace and seeing if userspace code will
> still compile if we remove this header for a separate patch. The
> concerns and justifications for the uapi header are completely different
> then for the removing the sys_sysctl implementation.
>
> Otherwise
> Acked-by: "Eric W. Biederman" <ebiederm at xmission.com>
The UAPI header should be kept because it's defining an API not just
for the kernel the headers are supplied with, but for all past
kernels. In particular programs needing a failsafe CSPRNG source that
works on old kernels may (do) use this as a fallback only if modern
syscalls are missing. Removing the syscall is no problem since it
won't be used, but if you remove the types/macros from the UAPI
headers, they'll have to copy that into their own sources.
Rich
More information about the Linuxppc-dev
mailing list