From owner-svn-src-stable@freebsd.org Tue Aug 4 12:42:57 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 39855372EE7; Tue, 4 Aug 2020 12:42:57 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4BLZD10knNz4JbG; Tue, 4 Aug 2020 12:42:57 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F08F825871; Tue, 4 Aug 2020 12:42:56 +0000 (UTC) (envelope-from kaktus@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 074CguhT044970; Tue, 4 Aug 2020 12:42:56 GMT (envelope-from kaktus@FreeBSD.org) Received: (from kaktus@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 074Cgtmn044962; Tue, 4 Aug 2020 12:42:55 GMT (envelope-from kaktus@FreeBSD.org) Message-Id: <202008041242.074Cgtmn044962@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kaktus set sender to kaktus@FreeBSD.org using -f From: Pawel Biernacki Date: Tue, 4 Aug 2020 12:42:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363832 - in stable/12/sys: compat/freebsd32 kern sys X-SVN-Group: stable-12 X-SVN-Commit-Author: kaktus X-SVN-Commit-Paths: in stable/12/sys: compat/freebsd32 kern sys X-SVN-Commit-Revision: 363832 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Aug 2020 12:42:57 -0000 Author: kaktus Date: Tue Aug 4 12:42:55 2020 New Revision: 363832 URL: https://svnweb.freebsd.org/changeset/base/363832 Log: MFC kernel part of r351729 Add sysctlbyname system call The two syscalls that exists in head but not in stable/12 are marked as UNIMPL to keep the __sysctlbyname syscall number the same (570). Userland part to be commited in about a week time. Requested by: mjg Discussed with: kib Modified: stable/12/sys/compat/freebsd32/freebsd32_misc.c stable/12/sys/compat/freebsd32/syscalls.master stable/12/sys/kern/capabilities.conf stable/12/sys/kern/kern_sysctl.c stable/12/sys/kern/syscalls.master stable/12/sys/sys/param.h stable/12/sys/sys/syscall.mk stable/12/sys/sys/sysctl.h Modified: stable/12/sys/compat/freebsd32/freebsd32_misc.c ============================================================================== --- stable/12/sys/compat/freebsd32/freebsd32_misc.c Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/compat/freebsd32/freebsd32_misc.c Tue Aug 4 12:42:55 2020 (r363832) @@ -2279,6 +2279,32 @@ freebsd32___sysctl(struct thread *td, struct freebsd32 } int +freebsd32___sysctlbyname(struct thread *td, + struct freebsd32___sysctlbyname_args *uap) +{ + size_t oldlen, rv; + int error; + uint32_t tmp; + + if (uap->oldlenp != NULL) { + error = fueword32(uap->oldlenp, &tmp); + oldlen = tmp; + } else { + error = oldlen = 0; + } + if (error != 0) + return (EFAULT); + error = kern___sysctlbyname(td, uap->name, uap->namelen, uap->old, + &oldlen, uap->new, uap->newlen, &rv, SCTL_MASK32, 1); + if (error != 0) + return (error); + if (uap->oldlenp != NULL) + error = suword32(uap->oldlenp, rv); + + return (error); +} + +int freebsd32_jail(struct thread *td, struct freebsd32_jail_args *uap) { uint32_t version; Modified: stable/12/sys/compat/freebsd32/syscalls.master ============================================================================== --- stable/12/sys/compat/freebsd32/syscalls.master Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/compat/freebsd32/syscalls.master Tue Aug 4 12:42:55 2020 (r363832) @@ -1127,5 +1127,10 @@ const char *to); } 567 AUE_NULL NOPROTO { int fhreadlink( struct fhandle *fhp, char *buf, \ size_t bufsize); } +568 AUE_NULL UNIMPL funlinkat +569 AUE_NULL UNIMPL copy_file_range +570 AUE_SYSCTL STD { int freebsd32___sysctlbyname(const char *name, \ + size_t namelen, void *old, uint32_t *oldlenp, \ + void *new, size_t newlen); } ; vim: syntax=off Modified: stable/12/sys/kern/capabilities.conf ============================================================================== --- stable/12/sys/kern/capabilities.conf Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/kern/capabilities.conf Tue Aug 4 12:42:55 2020 (r363832) @@ -63,6 +63,7 @@ __mac_set_proc ## proxying daemon in userspace. ## __sysctl +__sysctlbyname ## ## Allow umtx operations as these are scoped by address space. Modified: stable/12/sys/kern/kern_sysctl.c ============================================================================== --- stable/12/sys/kern/kern_sysctl.c Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/kern/kern_sysctl.c Tue Aug 4 12:42:55 2020 (r363832) @@ -2102,6 +2102,68 @@ sys___sysctl(struct thread *td, struct sysctl_args *ua return (error); } +int +kern___sysctlbyname(struct thread *td, const char *oname, size_t namelen, + void *old, size_t *oldlenp, void *new, size_t newlen, size_t *retval, + int flags, bool inkernel) +{ + int oid[CTL_MAXNAME]; + char namebuf[16]; + char *name; + size_t oidlen; + int error; + + if (namelen > MAXPATHLEN || namelen == 0) + return (EINVAL); + name = namebuf; + if (namelen > sizeof(namebuf)) + name = malloc(namelen, M_SYSCTL, M_WAITOK); + error = copyin(oname, name, namelen); + if (error != 0) + goto out; + + oid[0] = CTL_SYSCTL; + oid[1] = CTL_SYSCTL_NAME2OID; + oidlen = sizeof(oid); + error = kernel_sysctl(td, oid, 2, oid, &oidlen, (void *)name, namelen, + retval, flags); + if (error != 0) + goto out; + error = userland_sysctl(td, oid, *retval / sizeof(int), old, oldlenp, + inkernel, new, newlen, retval, flags); + +out: + if (namelen > sizeof(namebuf)) + free(name, M_SYSCTL); + return (error); +} + +#ifndef _SYS_SYSPROTO_H_ +struct __sysctlbyname_args { + const char *name; + size_t namelen; + void *old; + size_t *oldlenp; + void *new; + size_t newlen; +}; +#endif +int +sys___sysctlbyname(struct thread *td, struct __sysctlbyname_args *uap) +{ + size_t rv; + int error; + + error = kern___sysctlbyname(td, uap->name, uap->namelen, uap->old, + uap->oldlenp, uap->new, uap->newlen, &rv, 0, 0); + if (error != 0) + return (error); + if (uap->oldlenp != NULL) + error = copyout(&rv, uap->oldlenp, sizeof(rv)); + + return (error); +} + /* * This is used from various compatibility syscalls too. That's why name * must be in kernel space. Modified: stable/12/sys/kern/syscalls.master ============================================================================== --- stable/12/sys/kern/syscalls.master Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/kern/syscalls.master Tue Aug 4 12:42:55 2020 (r363832) @@ -1368,6 +1368,19 @@ size_t bufsize \ ); \ } +568 AUE_NULL UNIMPL funlinkat +569 AUE_NULL UNIMPL copy_file_range +570 AUE_SYSCTL STD { \ + int __sysctlbyname( \ + _In_reads_(namelen) const char *name, \ + size_t namelen, \ + _Out_writes_bytes_opt_(*oldlenp) void *old, \ + _Inout_opt_ size_t *oldlenp, \ + _In_reads_bytes_opt_(newlen) void *new, \ + size_t newlen \ + ); \ + } + ; Please copy any additions and changes to the following compatability tables: ; sys/compat/freebsd32/syscalls.master Modified: stable/12/sys/sys/param.h ============================================================================== --- stable/12/sys/sys/param.h Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/sys/param.h Tue Aug 4 12:42:55 2020 (r363832) @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1201521 /* Master, propagated to newvers */ +#define __FreeBSD_version 1201522 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, Modified: stable/12/sys/sys/syscall.mk ============================================================================== --- stable/12/sys/sys/syscall.mk Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/sys/syscall.mk Tue Aug 4 12:42:55 2020 (r363832) @@ -408,4 +408,5 @@ MIASM = \ getfhat.o \ fhlink.o \ fhlinkat.o \ - fhreadlink.o + fhreadlink.o \ + __sysctlbyname.o Modified: stable/12/sys/sys/sysctl.h ============================================================================== --- stable/12/sys/sys/sysctl.h Tue Aug 4 12:04:47 2020 (r363831) +++ stable/12/sys/sys/sysctl.h Tue Aug 4 12:42:55 2020 (r363832) @@ -1102,6 +1102,9 @@ int sysctl_find_oid(int *name, u_int namelen, struct s void sysctl_wlock(void); void sysctl_wunlock(void); int sysctl_wire_old_buffer(struct sysctl_req *req, size_t len); +int kern___sysctlbyname(struct thread *td, const char *name, + size_t namelen, void *old, size_t *oldlenp, void *new, + size_t newlen, size_t *retval, int flags, bool inkernel); struct sbuf; struct sbuf *sbuf_new_for_sysctl(struct sbuf *, char *, int,