Manpages - iopl.2

Table of Contents

NAME

iopl - change I/O privilege level

SYNOPSIS

  #include <sys/io.h>

  int iopl(int level);

DESCRIPTION

*iopl*() changes the I/O privilege level of the calling thread, as specified by the two least significant bits in level.

The I/O privilege level for a normal thread is 0. Permissions are inherited from parents to children.

This call is deprecated, is significantly slower than *ioperm*(2), and is only provided for older X servers which require access to all 65536 I/O ports. It is mostly for the i386 architecture. On many other architectures it does not exist or will always return an error.

RETURN VALUE

On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.

ERRORS

EINVAL
level is greater than 3.
ENOSYS
This call is unimplemented.
EPERM
The calling thread has insufficient privilege to call iopl*(); the *CAP_SYS_RAWIO capability is required to raise the I/O privilege level above its current value.

CONFORMING TO

*iopl*() is Linux-specific and should not be used in programs that are intended to be portable.

NOTES

Glibc2 has a prototype both in <sys/io.h> and in <sys/perm.h>. Avoid the latter, it is available on i386 only.

Prior to Linux 5.5 *iopl*() allowed the thread to disable interrupts while running at a higher I/O privilege level. This will probably crash the system, and is not recommended.

Prior to Linux 3.7, on some architectures (such as i386), permissions were inherited by the child produced by *fork*(2) and were preserved across *execve*(2). This behavior was inadvertently changed in Linux 3.7, and won’t be reinstated.

SEE ALSO

*ioperm*(2), *outb*(2), *capabilities*(7)

COLOPHON

This page is part of release 5.13 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.

Author: dt

Created: 2022-02-23 Wed 11:35