Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142508316
D43562.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D43562.diff
View Options
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -215,6 +215,7 @@
ioctl.2 \
issetugid.2 \
jail.2 \
+ kcmp.2 \
kenv.2 \
kill.2 \
kldfind.2 \
diff --git a/lib/libc/sys/kcmp.2 b/lib/libc/sys/kcmp.2
new file mode 100644
--- /dev/null
+++ b/lib/libc/sys/kcmp.2
@@ -0,0 +1,230 @@
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2024 The FreeBSD Foundation
+.\"
+.\" This documentation was written by
+.\" Mark Johnston <markj@FreeBSD.org> under sponsorship
+.\" from the FreeBSD Foundation.
+.\"
+.\" 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 AUTHORS 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 AUTHORS 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.
+.\"
+.Dd January 23, 2024
+.Dt KCMP 2
+.Os
+.Sh NAME
+.Nm kcmp
+.Nd compare two kernel objects
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In unistd.h
+.Ft int
+.Fn kcmp "pid_t pid1" "pid_t pid2" "int type" "uintptr_t idx1" "uintptr_t idx2"
+.Sh DESCRIPTION
+The
+.Nm
+system call allows the caller to determine whether the two processes with
+PIDs
+.Fa pid1
+and
+.Fa pid2
+reference the same kernel object.
+The
+.Fa type
+parameter specifies the type of object, and
+.Fa idx1
+and
+.Fa idx2
+are identifiers which refer to some object in the context of process
+.Fa pid1
+and
+.Fa pid2 ,
+respectively.
+.Pp
+The following values for
+.Fa type
+may be specified:
+.Bl -tag -width KCMP_FILE
+.It Dv KCMP_FILE
+Compare two file descriptions referred to by file descriptors
+.Fa idx1
+and
+.Fa idx2 .
+They may be equivalent if, for example, one of the descriptors was
+created by applying
+.Xr dup 2
+to the other descriptor.
+.It Dv KCMP_FILEOBJ
+Perform a
+.Dq deep comparison
+of the file descriptions referred to by file descriptors
+.Fa idx1
+and
+.Fa idx2 .
+This tests whether the underlying object referred to by the file descriptions
+is the same.
+For example, if the same filesystem path is opened twice, the kernel will create
+two separate file descriptions to back the two file descriptors, but they will
+refer to the same underlying object, a
+.Xr vnode 9 .
+When compared using the
+.Dv KCMP_FILE
+type, these descriptors will be different, but using the
+.Dv KCMP_FILEOBJ
+type, they will be equal (assuming that the path was not unlinked in between
+the two opens).
+.It Dv KCMP_FILES
+Determine whether the two processes share the same file descriptor table.
+This will be the case if one of the processes was created by
+.Xr rfork 2
+without specifying the
+.Dv RFFDG
+flag.
+The
+.Fa idx1
+and
+.Fa idx2
+parameters are ignored.
+.It Dv KCMP_SIGHAND
+Determine whether the two processes share the same signal handler table.
+This will be the case if one of the processes was created using the
+.Dv RFSIGSHARE
+flag to
+.Xr rfork 2 .
+The
+.Fa idx1
+and
+.Fa idx2
+parameters are ignored.
+.It Dv KCMP_VM
+Determine whether the two processes share a virtual memory address space.
+This may be the case if one of the processes created the other using
+.Xr vfork 2
+or
+.Xr rfork 2
+with the
+.Dv RFMEM
+flag.
+The
+.Fa idx1
+and
+.Fa idx2
+parameters are ignored.
+.El
+The caller of
+.Nm
+must have permission to debug both processes, otherwise the system call
+will fail.
+.Sh RETURN VALUES
+If
+.Fa idx1
+and
+.Fa idx2
+refer to the same object,
+.Nm
+returns 0.
+If the object referred to by
+.Fa pid1
+and
+.Fa idx1
+is less or greater than the object referred to by
+.Fa pid2
+and
+.Fa idx2 ,
+.Nm
+returns the values 1 and 2, respectively.
+The order is defined internally by the kernel and is stable until the system
+reboots.
+If the two objects cannot be compared for some reason,
+.Nm
+returns 3.
+For example, if
+.Fa type
+is
+.Dv KCMP_FILEOBJ
+and
+.Fa idx1
+and
+.Fa idx2
+are different descriptor types, e.g., a socket and a file, then
+.Nm
+will return 3.
+.Pp
+If an error occurs, the value -1 is returned and the global variable
+.Va errno
+is set to indicate the error.
+.Sh ERRORS
+.Nm
+may fail with the following errors:
+.Bl -tag -width Er
+.It Bq Er ENODEV
+.Dv KCMP_FILEOBJ
+was specified and
+.Fa idx1
+refers to a file descriptor which does not implement a comparison operator.
+.It Bq Er EINVAL
+The value of
+.Fa type
+is invalid.
+.It Bq Er EBADF
+One of the file descriptors referred to by
+.Fa idx1
+or
+.Fa idx2
+is not valid.
+.It Bq Er ESRCH
+One of the processes referred to by
+.Fa pid1
+or
+.Fa pid2
+does not exist or is not visible (e.g., due to jail restrictions).
+.It Bq Er EPERM
+The caller does not have permission to access one of the processes referred to
+by
+.Fa pid1
+or
+.Fa pid2 .
+.El
+.Sh SEE ALSO
+.Xr dup 2 ,
+.Xr fcntl 2 ,
+.Xr fork 2 ,
+.Xr rfork 2 ,
+.Xr vfork 2
+.Sh STANDARDS
+The
+.Nm
+system call originated in Linux.
+This implementation aims to be source-compatible with the Linux implementation.
+.Fx
+implements only a subset of the possible values for
+.Fa type
+supported in Linux.
+More values may be added in the future.
+The
+.Dv KCMP_FILEOBJ
+type is a FreeBSD extension.
+.Sh HISTORY
+The
+.Nm
+function was introduced in
+.Fx 14.1 .
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jan 21, 12:15 PM (14 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27802301
Default Alt Text
D43562.diff (6 KB)
Attached To
Mode
D43562: kcmp: Add a manual page
Attached
Detach File
Event Timeline
Log In to Comment