Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KCMP(2)			      System Calls Manual		       KCMP(2)

NAME
       kcmp -- compare two kernel objects

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<unistd.h>

       int
       kcmp(pid_t pid1,	pid_t pid2, int	type, uintptr_t	idx1, uintptr_t	idx2);

DESCRIPTION
       The  kcmp  system  call	allows the caller to determine whether the two
       processes with PIDs pid1	and pid2 reference  the	 same  kernel  object.
       The  type parameter specifies the type of object, and idx1 and idx2 are
       identifiers which refer to some object in the context of	 process  pid1
       and pid2, respectively.

       The following values for	type may be specified:

       KCMP_FILE  Compare  two	file descriptions referred to by file descrip-
		  tors idx1 and	idx2.  They may	be equivalent if, for example,
		  one of the descriptors was created by	applying dup(2)	to the
		  other	descriptor.

       KCMP_FILEOBJ
		  Perform a "deep comparison" of  the  file  descriptions  re-
		  ferred  to  by  file	descriptors idx1 and idx2.  This tests
		  whether the underlying object	referred to by	the  file  de-
		  scriptions 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 vnode(9).	  When
		  compared using the KCMP_FILE type, these descriptors will be
		  different,  but  using  the  KCMP_FILEOBJ type, they will be
		  equal	(assuming that the path	was not	 unlinked  in  between
		  the two opens).

       KCMP_FILES
		  Determine  whether the two processes share the same file de-
		  scriptor table.  This	 will  be  the	case  if  one  of  the
		  processes  was  created  by  rfork(2)	without	specifying the
		  RFFDG	flag.  The idx1	and idx2 parameters are	ignored.

       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 RFSIGSHARE flag to rfork(2).
		  The idx1 and idx2 parameters are ignored.

       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 vfork(2) or rfork(2)	with the RFMEM
		  flag.	 The idx1 and idx2 parameters are ignored.
       The caller of kcmp must have permission to debug	both processes,	other-
       wise the	system call will fail.

RETURN VALUES
       If idx1 and idx2	refer to the same object, kcmp returns 0.  If the  ob-
       ject  referred  to  by pid1 and idx1 is less or greater than the	object
       referred	to by pid2 and idx2, kcmp returns the values 1 and 2,  respec-
       tively.	 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, kcmp returns 3.  For example, if type is KCMP_FILEOBJ and
       idx1 and	idx2 are different descriptor types,  e.g.,  a	socket	and  a
       file, then kcmp will return 3.

       If  an  error  occurs, the value	-1 is returned and the global variable
       errno is	set to indicate	the error.

ERRORS
       kcmp may	fail with the following	errors:

       [ENODEV]		  KCMP_FILEOBJ was specified and idx1 refers to	a file
			  descriptor which does	not implement a	comparison op-
			  erator.

       [EINVAL]		  The value of type is invalid.

       [EBADF]		  One of the file descriptors referred to by  idx1  or
			  idx2 is not valid.

       [ESRCH]		  One  of  the	processes  referred to by pid1 or pid2
			  does not exist or is not visible (e.g., due to  jail
			  restrictions).

       [EPERM]		  The caller does not have permission to access	one of
			  the processes	referred to by pid1 or pid2.

SEE ALSO
       dup(2), fcntl(2), fork(2), rfork(2), vfork(2)

STANDARDS
       The  kcmp system	call originated	in Linux.  This	implementation aims to
       be source-compatible with the Linux implementation.  FreeBSD implements
       only a subset of	the possible values for	type supported in Linux.  More
       values may be added in the future.  The KCMP_FILEOBJ type is a  FreeBSD
       extension.

HISTORY
       The kcmp	function was introduced	in FreeBSD 14.1.

FreeBSD	14.3		       January 23, 2024			       KCMP(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kcmp&sektion=2&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help