From nobody Fri Jun 17 19:24:02 2022 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id B55678435DE; Fri, 17 Jun 2022 19:24:03 +0000 (UTC) (envelope-from git@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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LPpr31HQ7z3C1q; Fri, 17 Jun 2022 19:24:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655493843; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iJiOvwXIjLLWJNZ+4uaxQeaftKX5QrnWaATmOnjgTxg=; b=BNjp7uXgi7xHT/mTHrU+1lRQlg21UKiKMBkmA6SG/gKjzxhAHW4vNtTmxguSa1RuDoh606 zVYlKkKRzdmvgs8NctCRdHpSO0hfJzzqL9cFtw1GHsx1CcD/2OMQUpCpJG7oBmTTo9jkil aBK4lbUHgSDOD8enC3MdQ8d1ODR++FdZ5ZlukdFxWFi5bSJdsilG4EK5gkV2eRbsp9Mzja ZmnQnjfwpYnASfI4wJyqPVxgSlifNlnGWblG3kuXeOZq/FzjHJGg4+36w7OgwfzUc1gHMP lNMb+1cGm4Iv+tJWRziGnbB2wN1J99jO5B/AAVTrU4tUCNuPAMLhHshdzzz3Tw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DAD8C2579A; Fri, 17 Jun 2022 19:24:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 25HJO2j8095909; Fri, 17 Jun 2022 19:24:02 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 25HJO22o095908; Fri, 17 Jun 2022 19:24:02 GMT (envelope-from git) Date: Fri, 17 Jun 2022 19:24:02 GMT Message-Id: <202206171924.25HJO22o095908@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Dmitry Chagin Subject: git: 734796a30325 - stable/13 - kern_linkat: modify to accept AT_ flags instead of FOLLOW/NOFOLLOW List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dchagin X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 734796a30325601bb81b460b3ea546c3f2176c3e Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1655493843; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iJiOvwXIjLLWJNZ+4uaxQeaftKX5QrnWaATmOnjgTxg=; b=sR7z8TCtJZnEiSPjFXKjQXPKQUm6xk0J5u7qIEu3izQsnqMJd4kCmAtd81wkvTdP0DHo/I G93UTHyN3nMcPedNiBeqOiI/BdiCCOFRvZ+bZsCSqpHNPfu98b8+9ucxDTox1lIBh6BdwL 82wy0CWbdxF2Rf95TVv1yBK8ClvioF4TO9MISQlk1O0HzojmxhBaduV4tYr4PgskpJZkSR fLCMohG9AZTELN19CTlwYvgpX2tb9YTYQdQOT9YzLVFjRXrDb2ZdGARKfutZHxuqlyV+2X XvLkNhmMDZKAIHPxQWrOU6xnWd1xZUfwi3DbV0uhDyZkJXt+Km6LkSqIzT92MQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1655493843; a=rsa-sha256; cv=none; b=SIiVaEH/kpkhX2YvAa/OpI3puMZO4EEXEOXhBBkQW5DijUC2vdVAFMvAcYcCaAWkwDnJ3t AE9aBi90IAliJuLUURHI0sCQ+f+glCkJDzH6hPoNvdrBIqc8DeIEQCiwj2n8BDGGdn053s koX7sHlAli9zKuVfBbLACDGLjuH3Mmet3i9siGh1eSFyEkfxba3HTJqJh1hfU3moBwrEL0 vjBTWAArXqpMAcreCe1XtV68bSOWuKjeTPlXd9rfoNWDS8ocd9txrKiY3gjUqPjsZFqC1L +CffV5IoQWxoe0Uebql6+KSqQkcyqy7VCvk5yxvTpNBEZj4YPbKdvqCcOE1PkQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by dchagin: URL: https://cgit.FreeBSD.org/src/commit/?id=734796a30325601bb81b460b3ea546c3f2176c3e commit 734796a30325601bb81b460b3ea546c3f2176c3e Author: Edward Tomasz Napierala AuthorDate: 2021-04-25 13:13:02 +0000 Commit: Dmitry Chagin CommitDate: 2022-06-17 19:22:14 +0000 kern_linkat: modify to accept AT_ flags instead of FOLLOW/NOFOLLOW This makes this API match other kern_xxxat() functions. Reviewed By: kib Sponsored By: EPSRC Differential Revision: https://reviews.freebsd.org/D29776 (cherry picked from commit 5d1d844a77622878cd05478d4ab504f70e067248) --- sys/compat/cloudabi/cloudabi_file.c | 2 +- sys/compat/linux/linux_file.c | 15 ++++++++------- sys/kern/vfs_syscalls.c | 12 ++++++------ sys/sys/syscallsubr.h | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/sys/compat/cloudabi/cloudabi_file.c b/sys/compat/cloudabi/cloudabi_file.c index f7d93bc85cad..83987b79aa0c 100644 --- a/sys/compat/cloudabi/cloudabi_file.c +++ b/sys/compat/cloudabi/cloudabi_file.c @@ -185,7 +185,7 @@ cloudabi_sys_file_link(struct thread *td, error = kern_linkat(td, uap->fd1.fd, uap->fd2, path1, path2, UIO_SYSSPACE, (uap->fd1.flags & CLOUDABI_LOOKUP_SYMLINK_FOLLOW) ? - FOLLOW : NOFOLLOW); + AT_SYMLINK_FOLLOW : 0); cloudabi_freestr(path1); cloudabi_freestr(path2); return (error); diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index e6b142b179f6..17bf40fa5adb 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -1111,7 +1111,7 @@ linux_link(struct thread *td, struct linux_link_args *args) if (!LUSECONVPATH(td)) { return (kern_linkat(td, AT_FDCWD, AT_FDCWD, args->path, args->to, - UIO_USERSPACE, FOLLOW)); + UIO_USERSPACE, AT_SYMLINK_FOLLOW)); } LCONVPATHEXIST(td, args->path, &path); /* Expand LCONVPATHCREATE so that `path' can be freed on errors */ @@ -1121,7 +1121,7 @@ linux_link(struct thread *td, struct linux_link_args *args) return (error); } error = kern_linkat(td, AT_FDCWD, AT_FDCWD, path, to, UIO_SYSSPACE, - FOLLOW); + AT_SYMLINK_FOLLOW); LFREEPATH(path); LFREEPATH(to); return (error); @@ -1132,18 +1132,19 @@ int linux_linkat(struct thread *td, struct linux_linkat_args *args) { char *path, *to; - int error, olddfd, newdfd, follow; + int error, olddfd, newdfd, flag; if (args->flag & ~LINUX_AT_SYMLINK_FOLLOW) return (EINVAL); + flag = (args->flag & LINUX_AT_SYMLINK_FOLLOW) == 0 ? AT_SYMLINK_FOLLOW : + 0; + olddfd = (args->olddfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->olddfd; newdfd = (args->newdfd == LINUX_AT_FDCWD) ? AT_FDCWD : args->newdfd; - follow = (args->flag & LINUX_AT_SYMLINK_FOLLOW) == 0 ? NOFOLLOW : - FOLLOW; if (!LUSECONVPATH(td)) { return (kern_linkat(td, olddfd, newdfd, args->oldname, - args->newname, UIO_USERSPACE, follow)); + args->newname, UIO_USERSPACE, flag)); } LCONVPATHEXIST_AT(td, args->oldname, &path, olddfd); /* Expand LCONVPATHCREATE so that `path' can be freed on errors */ @@ -1152,7 +1153,7 @@ linux_linkat(struct thread *td, struct linux_linkat_args *args) LFREEPATH(path); return (error); } - error = kern_linkat(td, olddfd, newdfd, path, to, UIO_SYSSPACE, follow); + error = kern_linkat(td, olddfd, newdfd, path, to, UIO_SYSSPACE, flag); LFREEPATH(path); LFREEPATH(to); return (error); diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 1463bbea87bc..276383fce2a0 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1509,7 +1509,7 @@ sys_link(struct thread *td, struct link_args *uap) { return (kern_linkat(td, AT_FDCWD, AT_FDCWD, uap->path, uap->link, - UIO_USERSPACE, FOLLOW)); + UIO_USERSPACE, AT_SYMLINK_FOLLOW)); } #ifndef _SYS_SYSPROTO_H_ @@ -1532,8 +1532,7 @@ sys_linkat(struct thread *td, struct linkat_args *uap) return (EINVAL); return (kern_linkat(td, uap->fd1, uap->fd2, uap->path1, uap->path2, - UIO_USERSPACE, at2cnpflags(flag, AT_SYMLINK_FOLLOW | - AT_RESOLVE_BENEATH | AT_EMPTY_PATH))); + UIO_USERSPACE, flag)); } int hardlink_check_uid = 0; @@ -1577,7 +1576,7 @@ can_hardlink(struct vnode *vp, struct ucred *cred) int kern_linkat(struct thread *td, int fd1, int fd2, const char *path1, - const char *path2, enum uio_seg segflag, int follow) + const char *path2, enum uio_seg segflag, int flag) { struct nameidata nd; int error; @@ -1585,8 +1584,9 @@ kern_linkat(struct thread *td, int fd1, int fd2, const char *path1, NDPREINIT(&nd); do { bwillwrite(); - NDINIT_ATRIGHTS(&nd, LOOKUP, follow | AUDITVNODE1, segflag, - path1, fd1, &cap_linkat_source_rights, td); + NDINIT_ATRIGHTS(&nd, LOOKUP, AUDITVNODE1 | at2cnpflags(flag, + AT_SYMLINK_FOLLOW | AT_RESOLVE_BENEATH | AT_EMPTY_PATH), + segflag, path1, fd1, &cap_linkat_source_rights, td); if ((error = namei(&nd)) != 0) return (error); NDFREE(&nd, NDF_ONLY_PNBUF); diff --git a/sys/sys/syscallsubr.h b/sys/sys/syscallsubr.h index 5653c36f1db4..b155de1e08bf 100644 --- a/sys/sys/syscallsubr.h +++ b/sys/sys/syscallsubr.h @@ -186,7 +186,7 @@ int kern_kldload(struct thread *td, const char *file, int *fileid); int kern_kldstat(struct thread *td, int fileid, struct kld_file_stat *stat); int kern_kldunload(struct thread *td, int fileid, int flags); int kern_linkat(struct thread *td, int fd1, int fd2, const char *path1, - const char *path2, enum uio_seg segflg, int follow); + const char *path2, enum uio_seg segflg, int flag); int kern_listen(struct thread *td, int s, int backlog); int kern_lseek(struct thread *td, int fd, off_t offset, int whence); int kern_lutimes(struct thread *td, const char *path, enum uio_seg pathseg,