======================
ioctl based interfaces
======================

ioctl() is the most common way for applications to interface
with device drivers. It is flexible and easily extended by adding new
commands and can be passed through character devices, block devices as
well as sockets and other special file descriptors.

However, it is also very easy to get ioctl command definitions wrong,
and hard to fix them later without breaking existing applications,
so this documentation tries to help developers get it right.

Command number definitions
==========================

The command number, or request number, is the second argument passed to
the ioctl system call. While this can be any 32-bit number that uniquely
identifies an action for a particular driver, there are a number of
conventions around defining them.

``include/uapi/asm-generic/ioctl.h`` provides four macros for defining
ioctl commands that follow modern conventions: ``_IO``, ``_IOR``,
``_IOW``, and ``_IOWR``. These should be used for all new commands,
with the correct parameters:

_IO/_IOR/_IOW/_IOWR
   The macro name specifies how the argument will be used.  It may be a
   pointer to data to be passed into the kernel (_IOW), out of the kernel
   (_IOR), or both (_IOWR).  _IO can indicate either commands with no
   argument or those passing an integer value instead of a pointer.
   It is recommended to only use _IO for commands without arguments,
   and use pointers for passing data.

type
   An 8-bit number, often a character literal, specific to a subsystem
   or driver, and listed in Documentation/userspace-api/ioctl/ioctl-number.rst

nr
  An 8-bit number identifying the specific command, unique for a give
  value of 'type'

data_type
  The name of the data type pointed to by the argument, the command number
  encodes the ``sizeof(data_type)`` value in a 13-bit or 14-bit integer,
  leading to a limit of 8191 bytes for the maximum size of the argument.
  Note: do not pass sizeof(data_type) type into _IOR/_IOW/IOWR, as that
  will lead to encoding sizeof(sizeof(data_type)), i.e. sizeof(size_t).
  _IO does not have a data_type parameter.


Interface versions
==================

Some subsystems use version numbers in data structures to overload
commands with different interpretations of the argument.

This is generally a bad idea, since changes to existing commands tend
to break existing applications.

A better approach is to add a new ioctl command with a new number. The
old command still needs to be implemented in the kernel for compatibility,
but this can be a wrapper around the new implementation.

Return code
===========

ioctl commands can return negative error codes as documented in errno(3);
these get turned into errno values in user space. On success, the return
code should be zero. It is also possible but not recommended to return
a positive 'long' value.

When the ioctl callback is called with an unknown command number, the
handler returns either -ENOTTY or -ENOIOCTLCMD, which also results in
-ENOTTY being returned from the system call. Some subsystems return
-ENOSYS or -EINVAL here for historic reasons, but this is wrong.

Prior to Linux 5.5, compat_ioctl handlers were required to return
-ENOIOCTLCMD in order to use the fallback conversion into native
commands. As all subsystems are now responsible for handling compat
mode themselves, this is no longer needed, but it may be important to
consider when backporting bug fixes to older kernels.

Timestamps
==========

Traditionally, timestamps and timeout values are passed as ``struct
timespec`` or ``struct timeval``, but these are problematic because of
incompatible definitions of these structures in user space after the
move to 64-bit time_t.

The ``struct __kernel_timespec`` type can be used instead to be embedded
in other data structures when separate second/nanosecond values are
desired, or passed to user space directly. This is still not ideal though,
as the structure matches neither the kernel's timespec64 nor the user
space timespec exactly. The get_timespec64() and put_timespec64() helper
functions can be used to ensure that the layout remains compatible with
user space and the padding is treated correctly.

As it is cheap to convert seconds to nanoseconds, but the opposite
requires an expensive 64-bit division, a simple __u64 nanosecond value
can be simpler and more efficient.

Timeout values and timestamps should ideally use CLOCK_MONOTONIC time,
as returned by ktime_get_ns() or ktime_get_ts64().  Unlike
CLOCK_REALTIME, this makes the timestamps immune from jumping backwards
or forwards due to leap second adjustments and clock_settime() calls.

ktime_get_real_ns() can be used for CLOCK_REALTIME timestamps that
need to be persistent across a reboot or between multiple machines.

32-bit compat mode
==================

In order to support 32-bit user space running on a 64-bit machine, each
subsystem or driver that implements an ioctl callback handler must also
implement the corresponding compat_ioctl handler.

As long as all the rules for data structures are followed, this is as
easy as setting the .compat_ioctl pointer to a helper function such as
compat_ptr_ioctl() or blkdev_compat_ptr_ioctl().

compat_ptr()
------------

On the s390 architecture, 31-bit user space has ambiguous representations
for data pointers, with the upper bit being ignored. When running such
a process in compat mode, the compat_ptr() helper must be used to
clear the upper bit of a compat_uptr_t and turn it into a valid 64-bit
pointer.  On other architectures, this macro only performs a cast to a
``void __user *`` pointer.

In an compat_ioctl() callback, the last argument is an unsigned long,
which can be interpreted as either a pointer or a scalar depending on
the command. If it is a scalar, then compat_ptr() must not be used, to
ensure that the 64-bit kernel behaves the same way as a 32-bit kernel
for arguments with the upper bit set.

The compat_ptr_ioctl() helper can be used in place of a custom
compat_ioctl file operation for drivers that only take arguments that
are pointers to compatible data structures.

Structure layout
----------------

Compatible data structures have the same layout on all architectures,
avoiding all problematic members:

* ``long`` and ``unsigned long`` are the size of a register, so
  they can be either 32-bit or 64-bit wide and cannot be used in portable
  data structures. Fixed-length replacements are ``__s32``, ``__u32``,
  ``__s64`` and ``__u64``.

* Pointers have the same problem, in addition to requiring the
  use of compat_ptr(). The best workaround is to use ``__u64``
  in place of pointers, which requires a cast to ``uintptr_t`` in user
  space, and the use of u64_to_user_ptr() in the kernel to convert
  it back into a user pointer.

* On the x86-32 (i386) architecture, the alignment of 64-bit variables
  is only 32-bit, but they are naturally aligned on most other
  architectures including x86-64. This means a structure like::

    struct foo {
        __u32 a;
        __u64 b;
        __u32 c;
    };

  has four bytes of padding between a and b on x86-64, plus another four
  bytes of padding at the end, but no padding on i386, and it needs a
  compat_ioctl conversion handler to translate between the two formats.

  To avoid this problem, all structures should have their members
  naturally aligned, or explicit reserved fields added in place of the
  implicit padding. The ``pahole`` tool can be used for checking the
  alignment.

* On ARM OABI user space, structures are padded to multiples of 32-bit,
  making some structs incompatible with modern EABI kernels if they
  do not end on a 32-bit boundary.

* On the m68k architecture, struct members are not guaranteed to have an
  alignment greater than 16-bit, which is a problem when relying on
  implicit padding.

* Bitfields and enums generally work as one would expect them to,
  but some properties of them are implementation-defined, so it is better
  to avoid them completely in ioctl interfaces.

* ``char`` members can be either signed or unsigned, depending on
  the architecture, so the __u8 and __s8 types should be used for 8-bit
  integer values, though char arrays are clearer for fixed-length strings.

Information leaks
=================

Uninitialized data must not be copied back to user space, as this can
cause an information leak, which can be used to defeat kernel address
space layout randomization (KASLR), helping in an attack.

For this reason (and for compat support) it is best to avoid any
implicit padding in data structures.  Where there is implicit padding
in an existing structure, kernel drivers must be careful to fully
initialize an instance of the structure before copying it to user
space.  This is usually done by calling memset() before assigning to
individual members.

Subsystem abstractions
======================

While some device drivers implement their own ioctl function, most
subsystems implement the same command for multiple drivers.  Ideally the
subsystem has an .ioctl() handler that copies the arguments from and
to user space, passing them into subsystem specific callback functions
through normal kernel pointers.

This helps in various ways:

* Applications written for one driver are more likely to work for
  another one in the same subsystem if there are no subtle differences
  in the user space ABI.

* The complexity of user space access and data structure layout is done
  in one place, reducing the potential for implementation bugs.

* It is more likely to be reviewed by experienced developers
  that can spot problems in the interface when the ioctl is shared
  between multiple drivers than when it is only used in a single driver.

Alternatives to ioctl
=====================

There are many cases in which ioctl is not the best solution for a
problem. Alternatives include:

* System calls are a better choice for a system-wide feature that
  is not tied to a physical device or constrained by the file system
  permissions of a character device node

* netlink is the preferred way of configuring any network related
  objects through sockets.

* debugfs is used for ad-hoc interfaces for debugging functionality
  that does not need to be exposed as a stable interface to applications.

* sysfs is a good way to expose the state of an in-kernel object
  that is not tied to a file descriptor.

* configfs can be used for more complex configuration than sysfs

* A custom file system can provide extra flexibility with a simple
  user interface but adds a lot of complexity to the implementation.
