svn commit: r345181 - in stable/12: lib/libc/sys sys/compat/freebsd32 sys/kern sys/sys
Konstantin Belousov
kib at FreeBSD.org
Fri Mar 15 14:16:20 UTC 2019
Author: kib
Date: Fri Mar 15 14:16:16 2019
New Revision: 345181
URL: https://svnweb.freebsd.org/changeset/base/345181
Log:
MFC r341689, r341711, r341712, r341809:
Add getfhat(2), fhlink(2), fhlinkat(2), fhreadlink(2) file handle system calls.
To easier potential MFC of the AT_BENEATH feature, some vestiges of it were
left in the merged product but commented out.
Due to a lot of conflicts, it was impossible to split the merge and
regeneration of the syscall tables, because I needed to test the result.
It is fine for stable branch to commit the whole change with the
generated diff.
Added:
stable/12/lib/libc/sys/fhlink.2
- copied unchanged from r341689, head/lib/libc/sys/fhlink.2
stable/12/lib/libc/sys/fhreadlink.2
- copied unchanged from r341689, head/lib/libc/sys/fhreadlink.2
Modified:
stable/12/lib/libc/sys/Makefile.inc
stable/12/lib/libc/sys/Symbol.map
stable/12/lib/libc/sys/getfh.2
stable/12/sys/compat/freebsd32/freebsd32_syscall.h
stable/12/sys/compat/freebsd32/freebsd32_syscalls.c
stable/12/sys/compat/freebsd32/freebsd32_sysent.c
stable/12/sys/compat/freebsd32/freebsd32_systrace_args.c
stable/12/sys/compat/freebsd32/syscalls.master
stable/12/sys/kern/init_sysent.c
stable/12/sys/kern/syscalls.c
stable/12/sys/kern/syscalls.master
stable/12/sys/kern/systrace_args.c
stable/12/sys/kern/vfs_syscalls.c
stable/12/sys/sys/mount.h
stable/12/sys/sys/syscall.h
stable/12/sys/sys/syscall.mk
stable/12/sys/sys/sysproto.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/lib/libc/sys/Makefile.inc
==============================================================================
--- stable/12/lib/libc/sys/Makefile.inc Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/lib/libc/sys/Makefile.inc Fri Mar 15 14:16:16 2019 (r345181)
@@ -184,7 +184,9 @@ MAN+= abort2.2 \
extattr_get_file.2 \
fcntl.2 \
ffclock.2 \
+ fhlink.2 \
fhopen.2 \
+ fhreadlink.2 \
flock.2 \
fork.2 \
fsync.2 \
@@ -395,7 +397,8 @@ MLINKS+=ffclock.2 ffclock_getcounter.2 \
MLINKS+=fhopen.2 fhstat.2 fhopen.2 fhstatfs.2
MLINKS+=fsync.2 fdatasync.2
MLINKS+=getdirentries.2 getdents.2
-MLINKS+=getfh.2 lgetfh.2
+MLINKS+=getfh.2 lgetfh.2 \
+ getfh.2 getfhat.2
MLINKS+=getgid.2 getegid.2
MLINKS+=getitimer.2 setitimer.2
MLINKS+=getlogin.2 getlogin_r.3
Modified: stable/12/lib/libc/sys/Symbol.map
==============================================================================
--- stable/12/lib/libc/sys/Symbol.map Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/lib/libc/sys/Symbol.map Fri Mar 15 14:16:16 2019 (r345181)
@@ -401,6 +401,13 @@ FBSD_1.5 {
cpuset_setdomain;
};
+FBSD_1.6 {
+ fhlink;
+ fhlinkat;
+ fhreadlink;
+ getfhat;
+};
+
FBSDprivate_1.0 {
___acl_aclcheck_fd;
__sys___acl_aclcheck_fd;
Copied: stable/12/lib/libc/sys/fhlink.2 (from r341689, head/lib/libc/sys/fhlink.2)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/12/lib/libc/sys/fhlink.2 Fri Mar 15 14:16:16 2019 (r345181, copy of r341689, head/lib/libc/sys/fhlink.2)
@@ -0,0 +1,268 @@
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2018 Gandi
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd November 29, 2018
+.Dt FHLINK 2
+.Os
+.Sh NAME
+.Nm fhlink ,
+.Nm fhlinkat
+.Nd make a hard file link
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In unistd.h
+.Ft int
+.Fn fhlink "fhandle_t *fhp" "const char *to"
+.Ft int
+.Fn fhlinkat "fhandle_t *fhp" "int tofd" "const char *to"
+.Fc
+.Sh DESCRIPTION
+The
+.Fn fhlink
+system call
+atomically creates the specified directory entry (hard link)
+.Fa to
+with the attributes of the underlying object pointed at by
+.Fa fhp .
+If the link is successful: the link count of the underlying object
+is incremented;
+.Fa fhp
+and
+.Fa to
+share equal access and rights
+to the
+underlying object.
+.Pp
+If
+.Fa fhp
+is removed, the file
+.Fa to
+is not deleted and the link count of the
+underlying object is
+decremented.
+.Pp
+The object pointed at by the
+.Fa fhp
+argument
+must exist for the hard link to
+succeed and
+both
+.Fa fhp
+and
+.Fa to
+must be in the same file system.
+The
+.Fa fhp
+argument
+may not be a directory.
+.Pp
+The
+.Fn fhlinkat
+system call is equivalent to
+.Fa fhlink
+except in the case where
+.Fa to
+is a relative paths.
+In this case a relative path
+.Fa to
+is interpreted relative to
+the directory associated with the file descriptor
+.Fa tofd
+instead of the current working directory.
+.Pp
+Values for
+.Fa flag
+are constructed by a bitwise-inclusive OR of flags from the following
+list, defined in
+.In fcntl.h :
+.Bl -tag -width indent
+.It Dv AT_SYMLINK_FOLLOW
+If
+.Fa fhp
+names a symbolic link, a new link for the target of the symbolic link is
+created.
+.It Dv AT_BENEATH
+Only allow to link to a file which is beneath of the topping directory.
+See the description of the
+.Dv O_BENEATH
+flag in the
+.Xr open 2
+manual page.
+.El
+.Pp
+If
+.Fn fhlinkat
+is passed the special value
+.Dv AT_FDCWD
+in the
+.Fa tofd
+parameter, the current working directory is used for the
+.Fa to
+argument.
+If
+.Fa tofd
+has value
+.Dv AT_FDCWD ,
+the behavior is identical to a call to
+.Fn link .
+Unless
+.Fa flag
+contains the
+.Dv AT_SYMLINK_FOLLOW
+flag, if
+.Fa fhp
+names a symbolic link, a new link is created for the symbolic link
+.Fa fhp
+and not its target.
+.Sh RETURN VALUES
+.Rv -std link
+.Sh ERRORS
+The
+.Fn fhlink
+system call
+will fail and no link will be created if:
+.Bl -tag -width Er
+.It Bq Er ENOTDIR
+A component of
+.Fa to
+prefix is not a directory.
+.It Bq Er ENAMETOOLONG
+A component of
+.Fa to
+exceeded 255 characters,
+or entire length of
+.Fa to
+name exceeded 1023 characters.
+.It Bq Er ENOENT
+A component of
+.Fa to
+prefix does not exist.
+.It Bq Er EOPNOTSUPP
+The file system containing the file pointed at by
+.Fa fhp
+does not support links.
+.It Bq Er EMLINK
+The link count of the file pointed at by
+.Fa fhp
+would exceed 32767.
+.It Bq Er EACCES
+A component of
+.Fa to
+prefix denies search permission.
+.It Bq Er EACCES
+The requested link requires writing in a directory with a mode
+that denies write permission.
+.It Bq Er ELOOP
+Too many symbolic links were encountered in translating one of the pathnames.
+.It Bq Er ENOENT
+The file pointed at by
+.Fa fhp
+does not exist.
+.It Bq Er EEXIST
+The link named by
+.Fa to
+does exist.
+.It Bq Er EPERM
+The file pointed at by
+.Fa fhp
+is a directory.
+.It Bq Er EPERM
+The file pointed at by
+.Fa fhp
+has its immutable or append-only flag set, see the
+.Xr chflags 2
+manual page for more information.
+.It Bq Er EPERM
+The parent directory of the file named by
+.Fa to
+has its immutable flag set.
+.It Bq Er EXDEV
+The link named by
+.Fa to
+and the file pointed at by
+.Fa fhp
+are on different file systems.
+.It Bq Er ENOSPC
+The directory in which the entry for the new link is being placed
+cannot be extended because there is no space left on the file
+system containing the directory.
+.It Bq Er EDQUOT
+The directory in which the entry for the new link
+is being placed cannot be extended because the
+user's quota of disk blocks on the file system
+containing the directory has been exhausted.
+.It Bq Er EIO
+An I/O error occurred while reading from or writing to
+the file system to make the directory entry.
+.It Bq Er EROFS
+The requested link requires writing in a directory on a read-only file
+system.
+.It Bq Er EFAULT
+One of the pathnames specified
+is outside the process's allocated address space.
+.It Bq Er ESTALE
+The file handle
+.Fa fhp
+is no longer valid
+.El
+.Pp
+In addition to the errors returned by the
+.Fn fhlink ,
+the
+.Fn fhlinkat
+system call may fail if:
+.Bl -tag -width Er
+.It Bq Er EBADF
+The
+.Fa fhp
+or
+.Fa to
+argument does not specify an absolute path and the
+.Fa tofd
+argument, is not
+.Dv AT_FDCWD
+nor a valid file descriptor open for searching.
+.It Bq Er EINVAL
+The value of the
+.Fa flag
+argument is not valid.
+.It Bq Er ENOTDIR
+The
+.Fa fhp
+or
+.Fa to
+argument is not an absolute path and
+.Fa tofd
+is not
+.Dv AT_FDCWD
+nor a file descriptor associated with a directory.
+.El
+.Sh SEE ALSO
+.Xr fhstat 2 ,
+.Xr fhreadlink 2 ,
+.Xr fhopen 2 ,
Copied: stable/12/lib/libc/sys/fhreadlink.2 (from r341689, head/lib/libc/sys/fhreadlink.2)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/12/lib/libc/sys/fhreadlink.2 Fri Mar 15 14:16:16 2019 (r345181, copy of r341689, head/lib/libc/sys/fhreadlink.2)
@@ -0,0 +1,92 @@
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2018 Gandi
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd November 29, 2018
+.Dt FHREADLINK 2
+.Os
+.Sh NAME
+.Nm fhreadlink
+.Nd read value of a symbolic link
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In sys/param.h
+.In sys/mount.h
+.Ft int
+.Fn fhreadlink "fhandle_t *fhp" "char *buf" "size_t bufsize"
+.Fc
+.Sh DESCRIPTION
+The
+.Fn fhreadlink
+system call
+places the contents of the symbolic link
+.Fa fhp
+in the buffer
+.Fa buf ,
+which has size
+.Fa bufsiz .
+The
+.Fn fhreadlink
+system call does not append a
+.Dv NUL
+character to
+.Fa buf .
+.Pp
+.Sh RETURN VALUES
+The call returns the count of characters placed in the buffer
+if it succeeds, or a \-1 if an error occurs, placing the error
+code in the global variable
+.Va errno .
+.Sh ERRORS
+The
+.Fn readlink
+system call
+will fail if:
+.Bl -tag -width Er
+.It Bq Er ENOENT
+The named file does not exist.
+.It Bq Er ELOOP
+Too many symbolic links were encountered in translating the file handle
+.Fa fhp .
+.It Bq Er EINVAL
+The named file is not a symbolic link.
+.It Bq Er EIO
+An I/O error occurred while reading from the file system.
+.It Bq Er EFAULT
+The
+.Fa buf
+argument
+extends outside the process's allocated address space.
+.It Bq Er ESTALE
+The file handle
+.Fa fhp
+is no longer valid
+.El
+.El
+.Sh SEE ALSO
+.Xr fhstat 2 ,
+.Xr fhlink 2 ,
Modified: stable/12/lib/libc/sys/getfh.2
==============================================================================
--- stable/12/lib/libc/sys/getfh.2 Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/lib/libc/sys/getfh.2 Fri Mar 15 14:16:16 2019 (r345181)
@@ -1,5 +1,6 @@
.\" Copyright (c) 1989, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
+.\" Copyright (c) 2018 Gandi
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
@@ -28,12 +29,13 @@
.\" @(#)getfh.2 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd April 14, 2011
+.Dd December 11, 2018
.Dt GETFH 2
.Os
.Sh NAME
.Nm getfh ,
-.Nm lgetfh
+.Nm lgetfh ,
+.Nm getfhat
.Nd get file handle
.Sh LIBRARY
.Lb libc
@@ -44,6 +46,8 @@
.Fn getfh "const char *path" "fhandle_t *fhp"
.Ft int
.Fn lgetfh "const char *path" "fhandle_t *fhp"
+.Ft int
+.Fn getfhat "int fd" "const char *path" "fhandle_t *fhp" "int flag"
.Sh DESCRIPTION
The
.Fn getfh
@@ -51,6 +55,7 @@ system call
returns a file handle for the specified file or directory
in the file handle pointed to by
.Fa fhp .
+.Pp
The
.Fn lgetfh
system call is like
@@ -62,6 +67,85 @@ returns information about the link,
while
.Fn getfh
returns information about the file the link references.
+.Pp
+The
+.Fn getfhat
+system call is equivalent to
+.Fn getfh
+and
+.Fn lgetfh
+except when the
+.Fa path
+specifies a relative path, or the
+.Dv AT_BENEATH
+flag is provided.
+For
+.Fn getfhat
+and relative
+.Fa path ,
+the status is retrieved from a file relative to
+the directory associated with the file descriptor
+.Fa fd
+instead of the current working directory.
+For
+.Dv AT_BENEATH
+and absolute
+.Fa path ,
+the status is retrieved from a file specified by the
+.Fa path ,
+but additional permission checks are performed, see below.
+.Pp
+The values for the
+.Fa flag
+are constructed by a bitwise-inclusive OR of flags from this list,
+defined in
+.In fcntl.h :
+.Bl -tag -width indent
+.It Dv AT_SYMLINK_NOFOLLOW
+If
+.Fa path
+names a symbolic link, the status of the symbolic link is returned.
+.It Dv AT_BENEATH
+Only stat files and directories below the topping directory.
+See the description of the
+.Dv O_BENEATH
+flag in the
+.Xr open 2
+manual page.
+.El
+.Pp
+If
+.Fn getfhat
+is passed the special value
+.Dv AT_FDCWD
+in the
+.Fa fd
+parameter, the current working directory is used and the behavior is
+identical to a call to
+.Fn getfth
+or
+.Fn lgetfh
+respectively, depending on whether or not the
+.Dv AT_SYMLINK_NOFOLLOW
+bit is set in
+.Fa flag .
+.Pp
+When
+.Fn getfhat
+is called with an absolute
+.Fa path
+without the
+.Dv AT_BENEATH
+flag, it ignores the
+.Fa fd
+argument.
+When
+.Dv AT_BENEATH
+is specified with an absolute
+.Fa path ,
+a directory passed by the
+.Fa fd
+argument is used as the topping point for the resolution.
These system calls are restricted to the superuser.
.Sh RETURN VALUES
.Rv -std
@@ -99,11 +183,49 @@ The
.Fa fhp
argument
points to an invalid address.
+.It Bq Er EFAULT
+The
+.Fa path
+argument
+points to an invalid address.
.It Bq Er EIO
An
.Tn I/O
error occurred while reading from or writing to the file system.
+.It Bq Er ESTALE
+The file handle
+.Fa fhp
+is no longer valid.
.El
+.Pp
+In addition to the errors returned by
+.Fn getfh ,
+and
+.Fn lgetfh ,
+the
+.Fn getfhat
+system call may fail if:
+.Bl -tag -width Er
+.It Bq Er EBADF
+The
+.Fa path
+argument does not specify an absolute path and the
+.Fa fd
+argument, is neither
+.Dv AT_FDCWD
+nor a valid file descriptor open for searching.
+.It Bq Er EINVAL
+The value of the
+.Fa flag
+argument is not valid.
+.It Bq Er ENOTDIR
+The
+.Fa path
+argument is not an absolute path and
+.Fa fd
+is neither
+.Dv AT_FDCWD
+nor a file descriptor associated with a directory.
.Sh SEE ALSO
.Xr fhopen 2 ,
.Xr open 2 ,
Modified: stable/12/sys/compat/freebsd32/freebsd32_syscall.h
==============================================================================
--- stable/12/sys/compat/freebsd32/freebsd32_syscall.h Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/compat/freebsd32/freebsd32_syscall.h Fri Mar 15 14:16:16 2019 (r345181)
@@ -490,4 +490,8 @@
#define FREEBSD32_SYS_freebsd32_cpuset_getdomain 561
#define FREEBSD32_SYS_freebsd32_cpuset_setdomain 562
#define FREEBSD32_SYS_getrandom 563
-#define FREEBSD32_SYS_MAXSYSCALL 564
+#define FREEBSD32_SYS_getfhat 564
+#define FREEBSD32_SYS_fhlink 565
+#define FREEBSD32_SYS_fhlinkat 566
+#define FREEBSD32_SYS_fhreadlink 567
+#define FREEBSD32_SYS_MAXSYSCALL 568
Modified: stable/12/sys/compat/freebsd32/freebsd32_syscalls.c
==============================================================================
--- stable/12/sys/compat/freebsd32/freebsd32_syscalls.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/compat/freebsd32/freebsd32_syscalls.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -600,4 +600,8 @@ const char *freebsd32_syscallnames[] = {
"freebsd32_cpuset_getdomain", /* 561 = freebsd32_cpuset_getdomain */
"freebsd32_cpuset_setdomain", /* 562 = freebsd32_cpuset_setdomain */
"getrandom", /* 563 = getrandom */
+ "getfhat", /* 564 = getfhat */
+ "fhlink", /* 565 = fhlink */
+ "fhlinkat", /* 566 = fhlinkat */
+ "fhreadlink", /* 567 = fhreadlink */
};
Modified: stable/12/sys/compat/freebsd32/freebsd32_sysent.c
==============================================================================
--- stable/12/sys/compat/freebsd32/freebsd32_sysent.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/compat/freebsd32/freebsd32_sysent.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -647,4 +647,8 @@ struct sysent freebsd32_sysent[] = {
{ AS(freebsd32_cpuset_getdomain_args), (sy_call_t *)freebsd32_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = freebsd32_cpuset_getdomain */
{ AS(freebsd32_cpuset_setdomain_args), (sy_call_t *)freebsd32_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = freebsd32_cpuset_setdomain */
{ AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 563 = getrandom */
+ { AS(getfhat_args), (sy_call_t *)sys_getfhat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 564 = getfhat */
+ { AS(fhlink_args), (sy_call_t *)sys_fhlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 565 = fhlink */
+ { AS(fhlinkat_args), (sy_call_t *)sys_fhlinkat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 566 = fhlinkat */
+ { AS(fhreadlink_args), (sy_call_t *)sys_fhreadlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 567 = fhreadlink */
};
Modified: stable/12/sys/compat/freebsd32/freebsd32_systrace_args.c
==============================================================================
--- stable/12/sys/compat/freebsd32/freebsd32_systrace_args.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/compat/freebsd32/freebsd32_systrace_args.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -3274,6 +3274,42 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
*n_args = 3;
break;
}
+ /* getfhat */
+ case 564: {
+ struct getfhat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[2] = (intptr_t) p->fhp; /* struct fhandle * */
+ iarg[3] = p->flags; /* int */
+ *n_args = 4;
+ break;
+ }
+ /* fhlink */
+ case 565: {
+ struct fhlink_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ uarg[1] = (intptr_t) p->to; /* const char * */
+ *n_args = 2;
+ break;
+ }
+ /* fhlinkat */
+ case 566: {
+ struct fhlinkat_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ iarg[1] = p->tofd; /* int */
+ uarg[2] = (intptr_t) p->to; /* const char * */
+ *n_args = 3;
+ break;
+ }
+ /* fhreadlink */
+ case 567: {
+ struct fhreadlink_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ uarg[1] = (intptr_t) p->buf; /* char * */
+ uarg[2] = p->bufsize; /* size_t */
+ *n_args = 3;
+ break;
+ }
default:
*n_args = 0;
break;
@@ -8805,6 +8841,70 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
break;
};
break;
+ /* getfhat */
+ case 564:
+ switch(ndx) {
+ case 0:
+ p = "int";
+ break;
+ case 1:
+ p = "userland char *";
+ break;
+ case 2:
+ p = "userland struct fhandle *";
+ break;
+ case 3:
+ p = "int";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhlink */
+ case 565:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "userland const char *";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhlinkat */
+ case 566:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "int";
+ break;
+ case 2:
+ p = "userland const char *";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhreadlink */
+ case 567:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "userland char *";
+ break;
+ case 2:
+ p = "size_t";
+ break;
+ default:
+ break;
+ };
+ break;
default:
break;
};
@@ -10651,6 +10751,26 @@ systrace_return_setargdesc(int sysnum, int ndx, char *
break;
/* getrandom */
case 563:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* getfhat */
+ case 564:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhlink */
+ case 565:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhlinkat */
+ case 566:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhreadlink */
+ case 567:
if (ndx == 0 || ndx == 1)
p = "int";
break;
Modified: stable/12/sys/compat/freebsd32/syscalls.master
==============================================================================
--- stable/12/sys/compat/freebsd32/syscalls.master Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/compat/freebsd32/syscalls.master Fri Mar 15 14:16:16 2019 (r345181)
@@ -1120,5 +1120,12 @@
int policy); }
563 AUE_NULL NOPROTO { int getrandom(void *buf, size_t buflen, \
unsigned int flags); }
+564 AUE_NULL NOPROTO { int getfhat( int fd, char *path, \
+ struct fhandle *fhp, int flags); }
+565 AUE_NULL NOPROTO { int fhlink( struct fhandle *fhp, const char *to ); }
+566 AUE_NULL NOPROTO { int fhlinkat( struct fhandle *fhp, int tofd, \
+ const char *to); }
+567 AUE_NULL NOPROTO { int fhreadlink( struct fhandle *fhp, char *buf, \
+ size_t bufsize); }
; vim: syntax=off
Modified: stable/12/sys/kern/init_sysent.c
==============================================================================
--- stable/12/sys/kern/init_sysent.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/kern/init_sysent.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -613,4 +613,8 @@ struct sysent sysent[] = {
{ AS(cpuset_getdomain_args), (sy_call_t *)sys_cpuset_getdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 561 = cpuset_getdomain */
{ AS(cpuset_setdomain_args), (sy_call_t *)sys_cpuset_setdomain, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 562 = cpuset_setdomain */
{ AS(getrandom_args), (sy_call_t *)sys_getrandom, AUE_NULL, NULL, 0, 0, SYF_CAPENABLED, SY_THR_STATIC }, /* 563 = getrandom */
+ { AS(getfhat_args), (sy_call_t *)sys_getfhat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 564 = getfhat */
+ { AS(fhlink_args), (sy_call_t *)sys_fhlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 565 = fhlink */
+ { AS(fhlinkat_args), (sy_call_t *)sys_fhlinkat, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 566 = fhlinkat */
+ { AS(fhreadlink_args), (sy_call_t *)sys_fhreadlink, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 567 = fhreadlink */
};
Modified: stable/12/sys/kern/syscalls.c
==============================================================================
--- stable/12/sys/kern/syscalls.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/kern/syscalls.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -570,4 +570,8 @@ const char *syscallnames[] = {
"cpuset_getdomain", /* 561 = cpuset_getdomain */
"cpuset_setdomain", /* 562 = cpuset_setdomain */
"getrandom", /* 563 = getrandom */
+ "getfhat", /* 564 = getfhat */
+ "fhlink", /* 565 = fhlink */
+ "fhlinkat", /* 566 = fhlinkat */
+ "fhreadlink", /* 567 = fhreadlink */
};
Modified: stable/12/sys/kern/syscalls.master
==============================================================================
--- stable/12/sys/kern/syscalls.master Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/kern/syscalls.master Fri Mar 15 14:16:16 2019 (r345181)
@@ -1340,6 +1340,34 @@
563 AUE_NULL STD { int getrandom( \
_Out_writes_bytes_(buflen) void *buf, \
size_t buflen, unsigned int flags); }
+564 AUE_NULL STD { \
+ int getfhat( \
+ int fd, \
+ _In_z_ char *path, \
+ _Out_ struct fhandle *fhp, \
+ int flags \
+ ); \
+ }
+565 AUE_NULL STD { \
+ int fhlink( \
+ _In_ struct fhandle *fhp, \
+ _In_z_ const char *to \
+ ); \
+ }
+566 AUE_NULL STD { \
+ int fhlinkat( \
+ _In_ struct fhandle *fhp, \
+ int tofd, \
+ _In_z_ const char *to, \
+ ); \
+ }
+567 AUE_NULL STD { \
+ int fhreadlink( \
+ _In_ struct fhandle *fhp, \
+ _Out_writes_(bufsize) char *buf, \
+ size_t bufsize \
+ ); \
+ }
; Please copy any additions and changes to the following compatability tables:
; sys/compat/freebsd32/syscalls.master
Modified: stable/12/sys/kern/systrace_args.c
==============================================================================
--- stable/12/sys/kern/systrace_args.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/kern/systrace_args.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -3266,6 +3266,42 @@ systrace_args(int sysnum, void *params, uint64_t *uarg
*n_args = 3;
break;
}
+ /* getfhat */
+ case 564: {
+ struct getfhat_args *p = params;
+ iarg[0] = p->fd; /* int */
+ uarg[1] = (intptr_t) p->path; /* char * */
+ uarg[2] = (intptr_t) p->fhp; /* struct fhandle * */
+ iarg[3] = p->flags; /* int */
+ *n_args = 4;
+ break;
+ }
+ /* fhlink */
+ case 565: {
+ struct fhlink_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ uarg[1] = (intptr_t) p->to; /* const char * */
+ *n_args = 2;
+ break;
+ }
+ /* fhlinkat */
+ case 566: {
+ struct fhlinkat_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ iarg[1] = p->tofd; /* int */
+ uarg[2] = (intptr_t) p->to; /* const char * */
+ *n_args = 3;
+ break;
+ }
+ /* fhreadlink */
+ case 567: {
+ struct fhreadlink_args *p = params;
+ uarg[0] = (intptr_t) p->fhp; /* struct fhandle * */
+ uarg[1] = (intptr_t) p->buf; /* char * */
+ uarg[2] = p->bufsize; /* size_t */
+ *n_args = 3;
+ break;
+ }
default:
*n_args = 0;
break;
@@ -8710,6 +8746,70 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *d
break;
};
break;
+ /* getfhat */
+ case 564:
+ switch(ndx) {
+ case 0:
+ p = "int";
+ break;
+ case 1:
+ p = "userland char *";
+ break;
+ case 2:
+ p = "userland struct fhandle *";
+ break;
+ case 3:
+ p = "int";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhlink */
+ case 565:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "userland const char *";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhlinkat */
+ case 566:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "int";
+ break;
+ case 2:
+ p = "userland const char *";
+ break;
+ default:
+ break;
+ };
+ break;
+ /* fhreadlink */
+ case 567:
+ switch(ndx) {
+ case 0:
+ p = "userland struct fhandle *";
+ break;
+ case 1:
+ p = "userland char *";
+ break;
+ case 2:
+ p = "size_t";
+ break;
+ default:
+ break;
+ };
+ break;
default:
break;
};
@@ -10583,6 +10683,26 @@ systrace_return_setargdesc(int sysnum, int ndx, char *
break;
/* getrandom */
case 563:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* getfhat */
+ case 564:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhlink */
+ case 565:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhlinkat */
+ case 566:
+ if (ndx == 0 || ndx == 1)
+ p = "int";
+ break;
+ /* fhreadlink */
+ case 567:
if (ndx == 0 || ndx == 1)
p = "int";
break;
Modified: stable/12/sys/kern/vfs_syscalls.c
==============================================================================
--- stable/12/sys/kern/vfs_syscalls.c Fri Mar 15 13:19:52 2019 (r345180)
+++ stable/12/sys/kern/vfs_syscalls.c Fri Mar 15 14:16:16 2019 (r345181)
@@ -105,6 +105,14 @@ static int setutimes(struct thread *td, struct vnode *
const struct timespec *, int, int);
static int vn_access(struct vnode *vp, int user_flags, struct ucred *cred,
struct thread *td);
+static int kern_fhlinkat(struct thread *td, int fd, const char *path,
+ enum uio_seg pathseg, fhandle_t *fhp);
+static int kern_getfhat(struct thread *td, int flags, int fd,
+ const char *path, enum uio_seg pathseg, fhandle_t *fhp);
+static int kern_readlink_vp(struct vnode *vp, char *buf, enum uio_seg bufseg,
+ size_t count, struct thread *td);
+static int kern_linkat_vp(struct thread *td, struct vnode *vp, int fd,
+ const char *path, enum uio_seg segflag);
/*
* Sync each mounted filesystem.
@@ -1491,28 +1499,37 @@ can_hardlink(struct vnode *vp, struct ucred *cred)
int
kern_linkat(struct thread *td, int fd1, int fd2, char *path1, char *path2,
- enum uio_seg segflg, int follow)
+ enum uio_seg segflag, int follow)
{
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable
mailing list