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

FreeBSD Manual Pages

  
 
  

home | help
IO(4)			    Kernel Interfaces Manual			 IO(4)

NAME
       io -- I/O privilege file

SYNOPSIS
       device io

       #include	<sys/types.h>
       #include	<sys/ioctl.h>
       #include	<dev/io/iodev.h>
       #include	<machine/iodev.h>

       struct iodev_pio_req {
	       u_int access;
	       u_int port;
	       u_int width;
	       u_int val;
       };

DESCRIPTION
       The  special  file  /dev/io is a	controlled security hole that allows a
       process to gain I/O privileges (which are normally reserved for kernel-
       internal	code).	This can be useful in order to write userland programs
       that handle some	hardware directly.

       The usual operations on the device are to open it via the  open(2)  in-
       terface	and  to	 send  I/O  requests  to the file descriptor using the
       ioctl(2)	syscall.

       The ioctl(2) requests available for /dev/io are mostly platform	depen-
       dent,  but  there  are  also  some  in common between all of them.  The
       IODEV_PIO is used by all	the architectures in order to request that  an
       I/O operation be	performed.  It takes a 'struct iodev_pio_req' argument
       that must be previously setup.

       The  access  member  specifies the type of operation requested.	It may
       be:

       IODEV_PIO_READ	The operation is an "in" type.	A value	will  be  read
			from  the specified port (retrieved from the port mem-
			ber) and the result will be stored in the val member.

       IODEV_PIO_WRITE	The operation is a "out"  type.	  The  value  will  be
			fetched	from the val member and	will be	written	out to
			the specified port (defined as the port	member).

       Finally,	 the  width  member  specifies	the  size of the operand to be
       read/written, expressed in bytes.

       In addition to any file access permissions on /dev/io, the  kernel  en-
       forces that only	the super-user may open	this device.

LEGACY
       The  /dev/io interface used to be very i386 specific and	worked differ-
       ently.  The initial implementation simply raised	the IOPL of  the  cur-
       rent  thread  when open(2) was called on	the device.  This behaviour is
       retained	in the current implementation as legacy	support	for both  i386
       and amd64 architectures.

SEE ALSO
       close(2),  i386_get_ioperm(2),  i386_set_ioperm(2),  ioctl(2), open(2),
       mem(4)

HISTORY
       The io file appeared in FreeBSD 1.0.

FreeBSD	14.3			 June 1, 2010				 IO(4)

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

home | help