cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

auto_fs.h (6450B)


      1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
      2/*
      3 * Copyright 1997 Transmeta Corporation - All Rights Reserved
      4 * Copyright 1999-2000 Jeremy Fitzhardinge <jeremy@goop.org>
      5 * Copyright 2005-2006,2013,2017-2018 Ian Kent <raven@themaw.net>
      6 *
      7 * This file is part of the Linux kernel and is made available under
      8 * the terms of the GNU General Public License, version 2, or at your
      9 * option, any later version, incorporated herein by reference.
     10 *
     11 * ----------------------------------------------------------------------- */
     12
     13#ifndef _UAPI_LINUX_AUTO_FS_H
     14#define _UAPI_LINUX_AUTO_FS_H
     15
     16#include <linux/types.h>
     17#include <linux/limits.h>
     18#ifndef __KERNEL__
     19#include <sys/ioctl.h>
     20#endif /* __KERNEL__ */
     21
     22#define AUTOFS_PROTO_VERSION		5
     23#define AUTOFS_MIN_PROTO_VERSION	3
     24#define AUTOFS_MAX_PROTO_VERSION	5
     25
     26#define AUTOFS_PROTO_SUBVERSION		5
     27
     28/*
     29 * The wait_queue_token (autofs_wqt_t) is part of a structure which is passed
     30 * back to the kernel via ioctl from userspace. On architectures where 32- and
     31 * 64-bit userspace binaries can be executed it's important that the size of
     32 * autofs_wqt_t stays constant between 32- and 64-bit Linux kernels so that we
     33 * do not break the binary ABI interface by changing the structure size.
     34 */
     35#if defined(__ia64__) || defined(__alpha__) /* pure 64bit architectures */
     36typedef unsigned long autofs_wqt_t;
     37#else
     38typedef unsigned int autofs_wqt_t;
     39#endif
     40
     41/* Packet types */
     42#define autofs_ptype_missing	0	/* Missing entry (mount request) */
     43#define autofs_ptype_expire	1	/* Expire entry (umount request) */
     44
     45struct autofs_packet_hdr {
     46	int proto_version;		/* Protocol version */
     47	int type;			/* Type of packet */
     48};
     49
     50struct autofs_packet_missing {
     51	struct autofs_packet_hdr hdr;
     52	autofs_wqt_t wait_queue_token;
     53	int len;
     54	char name[NAME_MAX+1];
     55};	
     56
     57/* v3 expire (via ioctl) */
     58struct autofs_packet_expire {
     59	struct autofs_packet_hdr hdr;
     60	int len;
     61	char name[NAME_MAX+1];
     62};
     63
     64#define AUTOFS_IOCTL 0x93
     65
     66enum {
     67	AUTOFS_IOC_READY_CMD = 0x60,
     68	AUTOFS_IOC_FAIL_CMD,
     69	AUTOFS_IOC_CATATONIC_CMD,
     70	AUTOFS_IOC_PROTOVER_CMD,
     71	AUTOFS_IOC_SETTIMEOUT_CMD,
     72	AUTOFS_IOC_EXPIRE_CMD,
     73};
     74
     75#define AUTOFS_IOC_READY        _IO(AUTOFS_IOCTL, AUTOFS_IOC_READY_CMD)
     76#define AUTOFS_IOC_FAIL         _IO(AUTOFS_IOCTL, AUTOFS_IOC_FAIL_CMD)
     77#define AUTOFS_IOC_CATATONIC    _IO(AUTOFS_IOCTL, AUTOFS_IOC_CATATONIC_CMD)
     78#define AUTOFS_IOC_PROTOVER     _IOR(AUTOFS_IOCTL, \
     79				     AUTOFS_IOC_PROTOVER_CMD, int)
     80#define AUTOFS_IOC_SETTIMEOUT32 _IOWR(AUTOFS_IOCTL, \
     81				      AUTOFS_IOC_SETTIMEOUT_CMD, \
     82				      compat_ulong_t)
     83#define AUTOFS_IOC_SETTIMEOUT   _IOWR(AUTOFS_IOCTL, \
     84				      AUTOFS_IOC_SETTIMEOUT_CMD, \
     85				      unsigned long)
     86#define AUTOFS_IOC_EXPIRE       _IOR(AUTOFS_IOCTL, \
     87				     AUTOFS_IOC_EXPIRE_CMD, \
     88				     struct autofs_packet_expire)
     89
     90/* autofs version 4 and later definitions */
     91
     92/* Mask for expire behaviour */
     93#define AUTOFS_EXP_NORMAL		0x00
     94#define AUTOFS_EXP_IMMEDIATE		0x01
     95#define AUTOFS_EXP_LEAVES		0x02
     96#define AUTOFS_EXP_FORCED		0x04
     97
     98#define AUTOFS_TYPE_ANY			0U
     99#define AUTOFS_TYPE_INDIRECT		1U
    100#define AUTOFS_TYPE_DIRECT		2U
    101#define AUTOFS_TYPE_OFFSET		4U
    102
    103static inline void set_autofs_type_indirect(unsigned int *type)
    104{
    105	*type = AUTOFS_TYPE_INDIRECT;
    106}
    107
    108static inline unsigned int autofs_type_indirect(unsigned int type)
    109{
    110	return (type == AUTOFS_TYPE_INDIRECT);
    111}
    112
    113static inline void set_autofs_type_direct(unsigned int *type)
    114{
    115	*type = AUTOFS_TYPE_DIRECT;
    116}
    117
    118static inline unsigned int autofs_type_direct(unsigned int type)
    119{
    120	return (type == AUTOFS_TYPE_DIRECT);
    121}
    122
    123static inline void set_autofs_type_offset(unsigned int *type)
    124{
    125	*type = AUTOFS_TYPE_OFFSET;
    126}
    127
    128static inline unsigned int autofs_type_offset(unsigned int type)
    129{
    130	return (type == AUTOFS_TYPE_OFFSET);
    131}
    132
    133static inline unsigned int autofs_type_trigger(unsigned int type)
    134{
    135	return (type == AUTOFS_TYPE_DIRECT || type == AUTOFS_TYPE_OFFSET);
    136}
    137
    138/*
    139 * This isn't really a type as we use it to say "no type set" to
    140 * indicate we want to search for "any" mount in the
    141 * autofs_dev_ioctl_ismountpoint() device ioctl function.
    142 */
    143static inline void set_autofs_type_any(unsigned int *type)
    144{
    145	*type = AUTOFS_TYPE_ANY;
    146}
    147
    148static inline unsigned int autofs_type_any(unsigned int type)
    149{
    150	return (type == AUTOFS_TYPE_ANY);
    151}
    152
    153/* Daemon notification packet types */
    154enum autofs_notify {
    155	NFY_NONE,
    156	NFY_MOUNT,
    157	NFY_EXPIRE
    158};
    159
    160/* Kernel protocol version 4 packet types */
    161
    162/* Expire entry (umount request) */
    163#define autofs_ptype_expire_multi	2
    164
    165/* Kernel protocol version 5 packet types */
    166
    167/* Indirect mount missing and expire requests. */
    168#define autofs_ptype_missing_indirect	3
    169#define autofs_ptype_expire_indirect	4
    170
    171/* Direct mount missing and expire requests */
    172#define autofs_ptype_missing_direct	5
    173#define autofs_ptype_expire_direct	6
    174
    175/* v4 multi expire (via pipe) */
    176struct autofs_packet_expire_multi {
    177	struct autofs_packet_hdr hdr;
    178	autofs_wqt_t wait_queue_token;
    179	int len;
    180	char name[NAME_MAX+1];
    181};
    182
    183union autofs_packet_union {
    184	struct autofs_packet_hdr hdr;
    185	struct autofs_packet_missing missing;
    186	struct autofs_packet_expire expire;
    187	struct autofs_packet_expire_multi expire_multi;
    188};
    189
    190/* autofs v5 common packet struct */
    191struct autofs_v5_packet {
    192	struct autofs_packet_hdr hdr;
    193	autofs_wqt_t wait_queue_token;
    194	__u32 dev;
    195	__u64 ino;
    196	__u32 uid;
    197	__u32 gid;
    198	__u32 pid;
    199	__u32 tgid;
    200	__u32 len;
    201	char name[NAME_MAX+1];
    202};
    203
    204typedef struct autofs_v5_packet autofs_packet_missing_indirect_t;
    205typedef struct autofs_v5_packet autofs_packet_expire_indirect_t;
    206typedef struct autofs_v5_packet autofs_packet_missing_direct_t;
    207typedef struct autofs_v5_packet autofs_packet_expire_direct_t;
    208
    209union autofs_v5_packet_union {
    210	struct autofs_packet_hdr hdr;
    211	struct autofs_v5_packet v5_packet;
    212	autofs_packet_missing_indirect_t missing_indirect;
    213	autofs_packet_expire_indirect_t expire_indirect;
    214	autofs_packet_missing_direct_t missing_direct;
    215	autofs_packet_expire_direct_t expire_direct;
    216};
    217
    218enum {
    219	AUTOFS_IOC_EXPIRE_MULTI_CMD = 0x66, /* AUTOFS_IOC_EXPIRE_CMD + 1 */
    220	AUTOFS_IOC_PROTOSUBVER_CMD,
    221	AUTOFS_IOC_ASKUMOUNT_CMD = 0x70, /* AUTOFS_DEV_IOCTL_VERSION_CMD - 1 */
    222};
    223
    224#define AUTOFS_IOC_EXPIRE_MULTI		_IOW(AUTOFS_IOCTL, \
    225					     AUTOFS_IOC_EXPIRE_MULTI_CMD, int)
    226#define AUTOFS_IOC_PROTOSUBVER		_IOR(AUTOFS_IOCTL, \
    227					     AUTOFS_IOC_PROTOSUBVER_CMD, int)
    228#define AUTOFS_IOC_ASKUMOUNT		_IOR(AUTOFS_IOCTL, \
    229					     AUTOFS_IOC_ASKUMOUNT_CMD, int)
    230
    231#endif /* _UAPI_LINUX_AUTO_FS_H */