github.com/google/syzkaller@v0.0.0-20240517125934-c0f1611a36d6/sys/linux/fs_incfs.txt (about)

     1  # Copyright 2020 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  # incremental-fs is ChromeOS/Android-specific:
     5  # https://chromium.googlesource.com/chromiumos/third_party/kernel/+/2db8add7871ad%5E%21/
     6  
     7  # This was generated on:
     8  # https://chromium.googlesource.com/chromiumos/third_party/kernel 3a36438201f3
     9  meta noextract
    10  meta arches["386", "amd64", "arm", "arm64"]
    11  
    12  include <asm/ioctls.h>
    13  include <linux/stat.h>
    14  include <uapi/linux/fcntl.h>
    15  include <uapi/linux/incrementalfs.h>
    16  
    17  mount$incfs(src ptr[in, filename], dst ptr[in, filename], type ptr[in, string["incremental-fs"]], flags flags[mount_flags], opts ptr[in, fs_options[incfs_options]])
    18  
    19  incfs_options [
    20  	read_timeout_ms	fs_opt_dec["read_timeout_ms", int32]
    21  	readahead	fs_opt_dec["readahead", int32]
    22  	no_bf_cache	fs_opt_dec["no_bf_cache", bool32]
    23  	no_bf_readahead	fs_opt_dec["no_bf_readahead", bool32]
    24  	rlog_pages	fs_opt_dec["rlog_pages", int32]
    25  	rlog_wakeup_cnt	fs_opt_dec["rlog_wakeup_cnt", int32]
    26  ] [varlen]
    27  
    28  ioctl$INCFS_IOC_CREATE_FILE(fd fd, cmd const[INCFS_IOC_CREATE_FILE], arg ptr[in, incfs_new_file_args])
    29  ioctl$INCFS_IOC_FILL_BLOCKS(fd fd, cmd const[INCFS_IOC_FILL_BLOCKS], arg ptr[in, incfs_fill_blocks])
    30  ioctl$INCFS_IOC_PERMIT_FILL(fd fd, cmd const[INCFS_IOC_PERMIT_FILL], arg ptr[in, incfs_permit_fill])
    31  ioctl$INCFS_IOC_READ_FILE_SIGNATURE(fd fd, cmd const[INCFS_IOC_READ_FILE_SIGNATURE], arg ptr[in, incfs_get_file_sig_args])
    32  ioctl$INCFS_IOC_GET_FILLED_BLOCKS(fd fd, cmd const[INCFS_IOC_GET_FILLED_BLOCKS], arg ptr[in, incfs_get_filled_blocks_args])
    33  
    34  openat$incfs(fd fd_dir, file ptr[in, string[incfs_filename]], flags flags[open_flags], mode flags[open_mode]) fd
    35  
    36  incfs_filename = ".pending_reads", ".log"
    37  
    38  setxattr$incfs_id(path ptr[in, filename], name ptr[in, string["user.incfs.id"]], val ptr[in, incfs_uuid_str], size bytesize[val], flags flags[setxattr_flags])
    39  setxattr$incfs_size(path ptr[in, filename], name ptr[in, string["user.incfs.size"]], val ptr[in, int64], size bytesize[val], flags flags[setxattr_flags])
    40  setxattr$incfs_metadata(path ptr[in, filename], name ptr[in, string["user.incfs.metadata"]], val ptr[in, array[int8]], size bytesize[val], flags flags[setxattr_flags])
    41  
    42  incfs_uuid_t {
    43  	zeros	array[const[0, int8], 15]
    44  	id	int8[0:3]
    45  } [align[8]]
    46  
    47  incfs_uuid_str {
    48  	zeros	array[const['0', int8], 31]
    49  	id	int8['0':'3']
    50  }
    51  
    52  incfs_new_file_args {
    53  	file_id		incfs_uuid_t
    54  	size		align64[int64]
    55  	mode		flags[open_mode, int16]
    56  	reserved1	const[0, int16]
    57  	reserved2	const[0, int32]
    58  	directory_path	ptr[in, filename]
    59  	file_name	ptr[in, filename]
    60  	file_attr	ptr64[in, array[int8, 0:INCFS_MAX_FILE_ATTR_SIZE]]
    61  	file_attr_len	bytesize[file_attr, int32]
    62  	reserved4	const[0, int32]
    63  	signature_info	ptr64[in, incfs_signature_info]
    64  	signature_size	bytesize[signature_info, int64]
    65  	reserved6	const[0, int16]
    66  }
    67  
    68  incfs_signature_info {
    69  	version			const[INCFS_SIGNATURE_VERSION, int32]
    70  	hash_info_size		bytesize[hash_info, int32]
    71  	hash_info		incfs_hash_info_section
    72  	signing_info_size	bytesize[signing_info, int32]
    73  	signing_info		array[int8]
    74  } [packed]
    75  
    76  incfs_hash_info_section {
    77  	hash_algorithm	flags[incfs_hash_tree_algorithm, int32]
    78  	log2_blocksize	const[12, int8]
    79  	salt_size	bytesize[salt, int32]
    80  	salt		array[int8]
    81  	hash_size	bytesize[root_hash, int32]
    82  	root_hash	array[int8]
    83  } [packed]
    84  
    85  incfs_hash_tree_algorithm = INCFS_HASH_TREE_NONE, INCFS_HASH_TREE_SHA256
    86  
    87  incfs_fill_blocks {
    88  	count		len[fill_blocks, int64]
    89  	fill_blocks	ptr64[in, array[incfs_fill_block]]
    90  }
    91  
    92  incfs_fill_block {
    93  	block_index	int32
    94  	data_len	bytesize[data, int32]
    95  	data		ptr64[in, array[int8]]
    96  	compression	flags[incfs_compression_alg, int8]
    97  	flags		flags[incfs_block_flags, int8]
    98  	reserved1	const[0, int16]
    99  	reserved2	const[0, int32]
   100  	reserved3	const[0, int64]
   101  }
   102  
   103  incfs_compression_alg = COMPRESSION_NONE, COMPRESSION_LZ4
   104  incfs_block_flags = INCFS_BLOCK_FLAGS_NONE, INCFS_BLOCK_FLAGS_HASH
   105  
   106  incfs_permit_fill {
   107  	incfs_permit_fill	fd
   108  }
   109  
   110  incfs_get_file_sig_args {
   111  	file_signature		ptr64[out, array[int8]]
   112  	file_signature_buf_size	bytesize[file_signature, int32]
   113  	file_signature_len_out	const[0, int32]
   114  }
   115  
   116  incfs_get_filled_blocks_args {
   117  	range_buffer		ptr64[out, array[int8]]
   118  	range_buffer_size	bytesize[range_buffer, int32]
   119  	start_index		int32
   120  	end_index		int32
   121  	total_blocks_out	const[0, int32]
   122  	data_blocks_out		const[0, int32]
   123  	range_buffer_size_out	const[0, int32]
   124  	index_out		const[0, int32]
   125  }