github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/sys/linux/dev_block.txt (about)

     1  # Copyright 2018 syzkaller project authors. All rights reserved.
     2  # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  include <uapi/linux/fs.h>
     5  include <uapi/linux/blktrace_api.h>
     6  include <uapi/linux/blkzoned.h>
     7  include <uapi/linux/pr.h>
     8  include <uapi/linux/hdreg.h>
     9  include <uapi/linux/blkpg.h>
    10  include <linux/blk-crypto.h>
    11  
    12  resource fd_block_trace[fd]
    13  resource fd_block[fd_block_trace]
    14  
    15  openat$nullb(fd const[AT_FDCWD], file ptr[in, string["/dev/nullb0"]], flags flags[open_flags], mode const[0]) fd_block
    16  openat$rnullb(fd const[AT_FDCWD], file ptr[in, string["/dev/rnullb0"]], flags flags[open_flags], mode const[0]) fd_block
    17  openat$md(fd const[AT_FDCWD], file ptr[in, string["/dev/md0"]], flags flags[open_flags], mode const[0]) fd_block
    18  openat$pmem0(fd const[AT_FDCWD], file ptr[in, string["/dev/pmem0"]], flags flags[open_flags], mode const[0]) fd_block
    19  
    20  ioctl$BLKTRACESETUP(fd fd_block_trace, cmd const[BLKTRACESETUP], arg ptr[inout, blk_user_trace_setup])
    21  ioctl$BLKTRACESTART(fd fd_block_trace, cmd const[BLKTRACESTART], arg const[0])
    22  ioctl$BLKTRACESTOP(fd fd_block_trace, cmd const[BLKTRACESTOP], arg const[0])
    23  ioctl$BLKTRACETEARDOWN(fd fd_block_trace, cmd const[BLKTRACETEARDOWN], arg const[0])
    24  
    25  ioctl$BLKFLSBUF(fd fd_block, cmd const[BLKFLSBUF], arg ptr[in, intptr])
    26  ioctl$BLKROSET(fd fd_block, cmd const[BLKROSET], arg ptr[in, intptr])
    27  ioctl$BLKDISCARD(fd fd_block, cmd const[BLKDISCARD], arg ptr[in, intptr])
    28  ioctl$BLKSECDISCARD(fd fd_block, cmd const[BLKSECDISCARD], arg ptr[in, intptr])
    29  ioctl$BLKDISCARDZEROES(fd fd_block, cmd const[BLKDISCARDZEROES], arg ptr[out, intptr])
    30  ioctl$BLKZEROOUT(fd fd_block, cmd const[BLKZEROOUT], arg ptr[in, blk_zone_range])
    31  ioctl$BLKRAGET(fd fd_block, cmd const[BLKRAGET], arg ptr[out, intptr])
    32  ioctl$BLKFRAGET(fd fd_block, cmd const[BLKFRAGET], arg ptr[out, intptr])
    33  ioctl$BLKROGET(fd fd_block, cmd const[BLKROGET], arg ptr[out, intptr])
    34  ioctl$BLKBSZGET(fd fd_block, cmd const[BLKBSZGET], arg ptr[out, intptr])
    35  ioctl$BLKSSZGET(fd fd_block, cmd const[BLKSSZGET], arg ptr[out, intptr])
    36  ioctl$BLKPBSZGET(fd fd_block, cmd const[BLKPBSZGET], arg ptr[out, intptr])
    37  ioctl$BLKIOMIN(fd fd_block, cmd const[BLKIOMIN], arg ptr[out, intptr])
    38  ioctl$BLKIOOPT(fd fd_block, cmd const[BLKIOOPT], arg ptr[out, intptr])
    39  ioctl$BLKALIGNOFF(fd fd_block, cmd const[BLKALIGNOFF], arg ptr[out, intptr])
    40  ioctl$BLKSECTGET(fd fd_block, cmd const[BLKSECTGET], arg ptr[out, intptr])
    41  ioctl$BLKROTATIONAL(fd fd_block, cmd const[BLKROTATIONAL], arg ptr[out, intptr])
    42  ioctl$BLKRASET(fd fd_block, cmd const[BLKRASET], arg ptr[in, intptr])
    43  ioctl$BLKFRASET(fd fd_block, cmd const[BLKFRASET], arg ptr[in, intptr])
    44  ioctl$BLKBSZSET(fd fd_block, cmd const[BLKBSZSET], arg ptr[in, intptr])
    45  ioctl$BLKPG(fd fd_block, cmd const[BLKPG], arg ptr[in, blkpg_ioctl_arg])
    46  ioctl$BLKRRPART(fd fd_block, cmd const[BLKRRPART], arg const[0])
    47  ioctl$BLKGETSIZE(fd fd_block, cmd const[BLKGETSIZE], arg ptr[out, intptr])
    48  ioctl$BLKGETSIZE64(fd fd_block, cmd const[BLKGETSIZE64], arg ptr[out, int64])
    49  ioctl$BLKGETDISKSEQ(fd fd_block, cmd const[BLKGETDISKSEQ], arg ptr[out, int64])
    50  
    51  # TODO: To properly explore zones-related ioctls, figure out how to setup zoned devices.
    52  ioctl$BLKREPORTZONE(fd fd_block, cmd const[BLKREPORTZONE], arg ptr[inout, blk_zone_report])
    53  ioctl$BLKRESETZONE(fd fd_block, cmd const[BLKRESETZONE], arg ptr[in, blk_zone_range])
    54  ioctl$BLKOPENZONE(fd fd_block, cmd const[BLKOPENZONE], arg ptr[in, blk_zone_range])
    55  ioctl$BLKCLOSEZONE(fd fd_block, cmd const[BLKCLOSEZONE], arg ptr[in, blk_zone_range])
    56  ioctl$BLKFINISHZONE(fd fd_block, cmd const[BLKFINISHZONE], arg ptr[in, blk_zone_range])
    57  ioctl$BLKGETZONESZ(fd fd_block, cmd const[BLKGETZONESZ], arg ptr[in, int32])
    58  ioctl$BLKGETNRZONES(fd fd_block, cmd const[BLKGETNRZONES], arg ptr[in, int32])
    59  
    60  # TODO: These calls may fail early on current kernel testing setups due to
    61  # uninitialized blk_crypto_profile involved in related device drivers.
    62  ioctl$BLKCRYPTOIMPORTKEY(fd fd_block, cmd const[BLKCRYPTOIMPORTKEY], arg ptr[inout, blk_crypto_import_key_arg])
    63  ioctl$BLKCRYPTOGENERATEKEY(fd fd_block, cmd const[BLKCRYPTOGENERATEKEY], arg ptr[inout, blk_crypto_generate_key_arg])
    64  ioctl$BLKCRYPTOPREPAREKEY(fd fd_block, cmd const[BLKCRYPTOPREPAREKEY], arg ptr[inout, blk_crypto_prepare_key_arg])
    65  
    66  ioctl$HDIO_GETGEO(fd fd_block, cmd const[HDIO_GETGEO], arg ptr[out, hd_geometry])
    67  
    68  ioctl$IOC_PR_REGISTER(fd fd_block, cmd const[IOC_PR_REGISTER], arg ptr[in, pr_registration])
    69  ioctl$IOC_PR_RESERVE(fd fd_block, cmd const[IOC_PR_RESERVE], arg ptr[in, pr_reservation])
    70  ioctl$IOC_PR_RELEASE(fd fd_block, cmd const[IOC_PR_RELEASE], arg ptr[in, pr_reservation])
    71  ioctl$IOC_PR_PREEMPT(fd fd_block, cmd const[IOC_PR_PREEMPT], arg ptr[in, pr_preempt])
    72  ioctl$IOC_PR_PREEMPT_ABORT(fd fd_block, cmd const[IOC_PR_PREEMPT_ABORT], arg ptr[in, pr_preempt])
    73  ioctl$IOC_PR_CLEAR(fd fd_block, cmd const[IOC_PR_CLEAR], arg ptr[in, pr_clear])
    74  
    75  blk_zone_report {
    76  	sector		int64
    77  	nr_zones	len[zones, int32]
    78  	reserved	const[0, int32]
    79  	zones		array[blk_zone]
    80  } [packed]
    81  
    82  blk_zone {
    83  	start		int64
    84  	len		int64
    85  	wp		int64
    86  	type		int8
    87  	cond		int8
    88  	non_seq		int8
    89  	reset		int8
    90  	resv		array[const[0, int8], 4]
    91  	capacity	int64
    92  	reserved	array[const[0, int8], 24]
    93  }
    94  
    95  blk_zone_range {
    96  	sector		int64
    97  	nr_sectors	int64
    98  }
    99  
   100  hd_geometry {
   101  	heads		int8
   102  	sectors		int8
   103  	cylinders	int16
   104  	start		intptr
   105  }
   106  
   107  blkpg_ioctl_arg {
   108  	op	flags[blkpg_ioctl_op, int32]
   109  	flags	const[0, int32]
   110  	datalen	bytesize[data, int32]
   111  	data	ptr[in, blkpg_partition]
   112  }
   113  
   114  blkpg_partition {
   115  	start	int64
   116  	length	int64
   117  	pno	int32[0:20]
   118  	devname	array[const[0, int8], BLKPG_DEVNAMELTH]
   119  	volname	array[const[0, int8], BLKPG_VOLNAMELTH]
   120  }
   121  
   122  blkpg_ioctl_op = BLKPG_ADD_PARTITION, BLKPG_DEL_PARTITION, BLKPG_RESIZE_PARTITION
   123  
   124  blk_user_trace_setup {
   125  	name		array[const[0, int8], BLKTRACE_BDEV_SIZE]
   126  	act_mask	int16
   127  	buf_size	int32
   128  	buf_nr		int32
   129  	start_lba	int64
   130  	end_lba		int64
   131  	pid		pid
   132  }
   133  
   134  blk_crypto_import_key_arg {
   135  	raw_key_ptr	ptr[in, array[int8, 16:BLK_CRYPTO_MAX_RAW_KEY_SIZE]]
   136  	raw_key_size	len[raw_key_ptr, int64]
   137  	lt_key_ptr	ptr[out, array[int8, 1:BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]]
   138  	lt_key_size	len[lt_key_ptr, int64]
   139  	reserved	array[const[0, int64], 4]
   140  }
   141  
   142  blk_crypto_generate_key_arg {
   143  	lt_key_ptr	ptr[out, array[int8, 1:BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]]
   144  	lt_key_size	len[lt_key_ptr, int64]
   145  	reserved	array[const[0, int64], 4]
   146  }
   147  
   148  blk_crypto_prepare_key_arg {
   149  	lt_key_ptr	ptr[in, array[int8, 1:BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]]
   150  	lt_key_size	len[lt_key_ptr, int64]
   151  	eph_key_ptr	ptr[out, array[int8, 1:BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]]
   152  	eph_key_size	len[eph_key_ptr, int64]
   153  	reserved	array[const[0, int64], 4]
   154  }
   155  
   156  pr_registration {
   157  	old_key	int64
   158  	new_key	int64
   159  	flags	bool32
   160  	pad	const[0, int32]
   161  }
   162  
   163  pr_reservation {
   164  	key	int64
   165  	type	int32
   166  	flags	bool32
   167  }
   168  
   169  pr_preempt {
   170  	old_key	int64
   171  	new_key	int64
   172  	type	int32
   173  	flags	int32
   174  }
   175  
   176  pr_clear {
   177  	key	int64
   178  	flags	const[0, int32]
   179  	pad	const[0, int32]
   180  }