Files
serenity/Kernel/API/Ioctl.h
Liav A. f6db24dba4 Kernel+runc: Remove the pivot_root functionality in copy_mount syscall
That functionality seems to be too much complicated.
We shouldn't overengineer how the copy_mount syscall works, so instead
of allowing replacement of the root filesystem, let's make the unshare
file descriptor to be configured via a special ioctl call before we
initialize a new VFSRootContext object.

The special ioctl can either set a new root filesystem for the upcoming
VFSRootContext object, or remove it (by passing fd of -1).
If there's no specified root filesystem, a new RAMFS instance will be
created automatically when invoking the unshare_create syscall.

This also simplifies the code in the boot process, hence making it much
more readable.

It should be noted, that we assumed during pivot_root that the first
mountpoint in a context is the root mountpoint, which is probably a fair
assumption, but we don't assume this anywhere else in the VFSRootContext
code.
If this functionality ever comes back, we should ensure that we make
some effort to not assume this again.
2026-03-14 11:45:37 +01:00

213 lines
6.0 KiB
C

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Edwin Hoksberg <mail@edwinhoksberg.nl>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
struct winsize {
unsigned short ws_row;
unsigned short ws_col;
unsigned short ws_xpixel;
unsigned short ws_ypixel;
};
struct GraphicsConnectorProperties {
unsigned char multihead_support;
unsigned char doublebuffer_support;
unsigned char flushing_support;
unsigned char partial_flushing_support;
unsigned char refresh_rate_support;
unsigned max_buffer_bytes;
};
struct GraphicsHeadModeSetting {
int horizontal_stride;
int pixel_clock_in_khz;
int horizontal_active;
int horizontal_front_porch_pixels;
int horizontal_sync_time_pixels;
int horizontal_blank_pixels;
int vertical_active;
int vertical_front_porch_lines;
int vertical_sync_time_lines;
int vertical_blank_lines;
int horizontal_offset;
int vertical_offset;
};
struct GraphicsHeadEDID {
unsigned char* bytes;
unsigned bytes_size;
};
struct GraphicsHeadVerticalOffset {
int head_index;
int offsetted;
};
struct FBRect {
int head_index;
unsigned x;
unsigned y;
unsigned width;
unsigned height;
};
struct FBBufferOffset {
int buffer_index;
unsigned offset;
};
struct FBFlushRects {
int buffer_index;
unsigned count;
struct FBRect const* rects;
};
enum ConsoleModes {
KD_TEXT = 0x00,
KD_GRAPHICS = 0x01,
};
#ifdef __cplusplus
}
#endif
enum IOCtlNumber {
TIOCGPGRP,
TIOCSPGRP,
TCGETS,
TCSETS,
TCSETSW,
TCSETSF,
TCFLSH,
TIOCGWINSZ,
TIOCSCTTY,
TIOCSTI,
TIOCNOTTY,
TIOCSWINSZ,
TIOCGPTN,
GRAPHICS_IOCTL_GET_PROPERTIES,
GRAPHICS_IOCTL_SET_HEAD_VERTICAL_OFFSET_BUFFER,
GRAPHICS_IOCTL_GET_HEAD_VERTICAL_OFFSET_BUFFER,
GRAPHICS_IOCTL_FLUSH_HEAD_BUFFERS,
GRAPHICS_IOCTL_FLUSH_HEAD,
GRAPHICS_IOCTL_SET_HEAD_MODE_SETTING,
GRAPHICS_IOCTL_GET_HEAD_MODE_SETTING,
GRAPHICS_IOCTL_SET_SAFE_HEAD_MODE_SETTING,
GRAPHICS_IOCTL_SET_RESPONSIBLE,
GRAPHICS_IOCTL_UNSET_RESPONSIBLE,
KEYBOARD_IOCTL_GET_NUM_LOCK,
KEYBOARD_IOCTL_SET_NUM_LOCK,
KEYBOARD_IOCTL_GET_CAPS_LOCK,
KEYBOARD_IOCTL_SET_CAPS_LOCK,
MOUNT_IOCTL_SET_MOUNT_SPECIFIC_FLAG,
MOUNT_IOCTL_DELETE_MOUNT_SPECIFIC_FLAG,
UNSHARE_IOCTL_ATTACH_ROOT_FILESYSTEM_AT_FD,
SIOCATMARK,
SIOCSIFADDR,
SIOCGIFADDR,
SIOCGIFHWADDR,
SIOCGIFNAME,
SIOCGIFINDEX,
SIOCGIFNETMASK,
SIOCSIFNETMASK,
SIOCGIFBRDADDR,
SIOCGIFMTU,
SIOCGIFFLAGS,
SIOCGIFCONF,
SIOCADDRT,
SIOCDELRT,
SIOCSARP,
SIOCDARP,
FIBMAP,
FIONBIO,
FIONREAD,
FIOCLEX,
FIONCLEX,
KCOV_SETBUFSIZE,
KCOV_ENABLE,
KCOV_DISABLE,
SOUNDCARD_IOCTL_SET_SAMPLE_RATE,
SOUNDCARD_IOCTL_GET_SAMPLE_RATE,
STORAGE_DEVICE_GET_SIZE,
STORAGE_DEVICE_GET_BLOCK_SIZE,
VIRGL_IOCTL_CREATE_CONTEXT,
VIRGL_IOCTL_CREATE_RESOURCE,
VIRGL_IOCTL_SUBMIT_CMD,
VIRGL_IOCTL_TRANSFER_DATA,
KDSETMODE,
KDGETMODE,
DEVCTL_CREATE_LOOP_DEVICE,
DEVCTL_DESTROY_LOOP_DEVICE,
};
#define TIOCGPGRP TIOCGPGRP
#define TIOCSPGRP TIOCSPGRP
#define TCGETS TCGETS
#define TCSETS TCSETS
#define TCSETSW TCSETSW
#define TCSETSF TCSETSF
#define TCFLSH TCFLSH
#define TIOCGWINSZ TIOCGWINSZ
#define TIOCSCTTY TIOCSCTTY
#define TIOCSTI TIOCSTI
#define TIOCNOTTY TIOCNOTTY
#define TIOCSWINSZ TIOCSWINSZ
#define TIOCGPTN TIOCGPTN
#define GRAPHICS_IOCTL_GET_PROPERTIES GRAPHICS_IOCTL_GET_PROPERTIES
#define GRAPHICS_IOCTL_SET_HEAD_VERTICAL_OFFSET_BUFFER GRAPHICS_IOCTL_SET_HEAD_VERTICAL_OFFSET_BUFFER
#define GRAPHICS_IOCTL_GET_HEAD_VERTICAL_OFFSET_BUFFER GRAPHICS_IOCTL_GET_HEAD_VERTICAL_OFFSET_BUFFER
#define GRAPHICS_IOCTL_FLUSH_HEAD_BUFFERS GRAPHICS_IOCTL_FLUSH_HEAD_BUFFERS
#define GRAPHICS_IOCTL_FLUSH_HEAD GRAPHICS_IOCTL_FLUSH_HEAD
#define GRAPHICS_IOCTL_SET_HEAD_MODE_SETTING GRAPHICS_IOCTL_SET_HEAD_MODE_SETTING
#define GRAPHICS_IOCTL_GET_HEAD_MODE_SETTING GRAPHICS_IOCTL_GET_HEAD_MODE_SETTING
#define GRAPHICS_IOCTL_SET_SAFE_HEAD_MODE_SETTING GRAPHICS_IOCTL_SET_SAFE_HEAD_MODE_SETTING
#define GRAPHICS_IOCTL_SET_RESPONSIBLE GRAPHICS_IOCTL_SET_RESPONSIBLE
#define GRAPHICS_IOCTL_UNSET_RESPONSIBLE GRAPHICS_IOCTL_UNSET_RESPONSIBLE
#define KEYBOARD_IOCTL_GET_NUM_LOCK KEYBOARD_IOCTL_GET_NUM_LOCK
#define KEYBOARD_IOCTL_SET_NUM_LOCK KEYBOARD_IOCTL_SET_NUM_LOCK
#define KEYBOARD_IOCTL_GET_CAPS_LOCK KEYBOARD_IOCTL_GET_CAPS_LOCK
#define KEYBOARD_IOCTL_SET_CAPS_LOCK KEYBOARD_IOCTL_SET_CAPS_LOCK
#define SIOCATMARK SIOCATMARK
#define SIOCSIFADDR SIOCSIFADDR
#define SIOCGIFADDR SIOCGIFADDR
#define SIOCGIFHWADDR SIOCGIFHWADDR
#define SIOCGIFNETMASK SIOCGIFNETMASK
#define SIOCGIFNAME SIOCGIFNAME
#define SIOCGIFINDEX SIOCGIFINDEX
#define SIOCSIFNETMASK SIOCSIFNETMASK
#define SIOCGIFBRDADDR SIOCGIFBRDADDR
#define SIOCGIFMTU SIOCGIFMTU
#define SIOCGIFFLAGS SIOCGIFFLAGS
#define SIOCGIFCONF SIOCGIFCONF
#define SIOCADDRT SIOCADDRT
#define SIOCDELRT SIOCDELRT
#define SIOCSARP SIOCSARP
#define SIOCDARP SIOCDARP
#define FIBMAP FIBMAP
#define FIONBIO FIONBIO
#define FIONREAD FIONREAD
#define MOUNT_IOCTL_SET_MOUNT_SPECIFIC_FLAG MOUNT_IOCTL_SET_MOUNT_SPECIFIC_FLAG
#define MOUNT_IOCTL_DELETE_MOUNT_SPECIFIC_FLAG MOUNT_IOCTL_DELETE_MOUNT_SPECIFIC_FLAG
#define UNSHARE_IOCTL_ATTACH_ROOT_FILESYSTEM_AT_FD UNSHARE_IOCTL_ATTACH_ROOT_FILESYSTEM_AT_FD
#define SOUNDCARD_IOCTL_SET_SAMPLE_RATE SOUNDCARD_IOCTL_SET_SAMPLE_RATE
#define SOUNDCARD_IOCTL_GET_SAMPLE_RATE SOUNDCARD_IOCTL_GET_SAMPLE_RATE
#define STORAGE_DEVICE_GET_SIZE STORAGE_DEVICE_GET_SIZE
#define STORAGE_DEVICE_GET_BLOCK_SIZE STORAGE_DEVICE_GET_BLOCK_SIZE
#define VIRGL_IOCTL_CREATE_CONTEXT VIRGL_IOCTL_CREATE_CONTEXT
#define VIRGL_IOCTL_CREATE_RESOURCE VIRGL_IOCTL_CREATE_RESOURCE
#define VIRGL_IOCTL_SUBMIT_CMD VIRGL_IOCTL_SUBMIT_CMD
#define VIRGL_IOCTL_TRANSFER_DATA VIRGL_IOCTL_TRANSFER_DATA
#define KDSETMODE KDSETMODE
#define KDGETMODE KDGETMODE
#define DEVCTL_CREATE_LOOP_DEVICE DEVCTL_CREATE_LOOP_DEVICE
#define DEVCTL_DESTROY_LOOP_DEVICE DEVCTL_DESTROY_LOOP_DEVICE