PATH:
usr
/
src
/
kernels
/
5.14.0-611.49.2.el9_7.x86_64
/
include
/
linux
/* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com */ #ifndef _LINUX_BPF_VERIFIER_H #define _LINUX_BPF_VERIFIER_H 1 #include <linux/bpf.h> /* for enum bpf_reg_type */ #include <linux/btf.h> /* for struct btf and btf_id() */ #include <linux/filter.h> /* for MAX_BPF_STACK */ #include <linux/tnum.h> /* Maximum variable offset umax_value permitted when resolving memory accesses. * In practice this is far bigger than any realistic pointer offset; this limit * ensures that umax_value + (int)off + (int)size cannot overflow a u64. */ #define BPF_MAX_VAR_OFF (1 << 29) /* Maximum variable size permitted for ARG_CONST_SIZE[_OR_ZERO]. This ensures * that converting umax_value to int cannot overflow. */ #define BPF_MAX_VAR_SIZ (1 << 29) /* size of tmp_str_buf in bpf_verifier. * we need at least 306 bytes to fit full stack mask representation * (in the "-8,-16,...,-512" form) */ #define TMP_STR_BUF_LEN 320 /* Patch buffer size */ #define INSN_BUF_SIZE 32 /* Liveness marks, used for registers and spilled-regs (in stack slots). * Read marks propagate upwards until they find a write mark; they record that * "one of this state's descendants read this reg" (and therefore the reg is * relevant for states_equal() checks). * Write marks collect downwards and do not propagate; they record that "the * straight-line code that reached this state (from its parent) wrote this reg" * (and therefore that reads propagated from this state or its descendants * should not propagate to its parent). * A state with a write mark can receive read marks; it just won't propagate * them to its parent, since the write mark is a property, not of the state, * but of the link between it and its parent. See mark_reg_read() and * mark_stack_slot_read() in kernel/bpf/verifier.c. */ enum bpf_reg_liveness { REG_LIVE_NONE = 0, /* reg hasn't been read or written this branch */ REG_LIVE_READ32 = 0x1, /* reg was read, so we're sensitive to initial value */ REG_LIVE_READ64 = 0x2, /* likewise, but full 64-bit content matters */ REG_LIVE_READ = REG_LIVE_READ32 | REG_LIVE_READ64, REG_LIVE_WRITTEN = 0x4, /* reg was written first, screening off later reads */ REG_LIVE_DONE = 0x8, /* liveness won't be updating this register anymore */ }; /* For every reg representing a map value or allocated object pointer, * we consider the tuple of (ptr, id) for them to be unique in verifier * context and conside them to not alias each other for the purposes of * tracking lock state. */ struct bpf_active_lock { /* This can either be reg->map_ptr or reg->btf. If ptr is NULL, * there's no active lock held, and other fields have no * meaning. If non-NULL, it indicates that a lock is held and * id member has the reg->id of the register which can be >= 0. */ void *ptr; /* This will be reg->id */ u32 id; }; #define ITER_PREFIX "bpf_iter_" enum bpf_iter_state { BPF_ITER_STATE_INVALID, /* for non-first slot */ BPF_ITER_STATE_ACTIVE, BPF_ITER_STATE_DRAINED, }; struct bpf_reg_state { /* Ordering of fields matters. See states_equal() */ enum bpf_reg_type type; /* * Fixed part of pointer offset, pointer types only. * Or constant delta between "linked" scalars with the same ID. */ s32 off; union { /* valid when type == PTR_TO_PACKET */ int range; /* valid when type == CONST_PTR_TO_MAP | PTR_TO_MAP_VALUE | * PTR_TO_MAP_VALUE_OR_NULL */ struct { struct bpf_map *map_ptr; /* To distinguish map lookups from outer map * the map_uid is non-zero for registers * pointing to inner maps. */ u32 map_uid; }; /* for PTR_TO_BTF_ID */ struct { struct btf *btf; u32 btf_id; }; struct { /* for PTR_TO_MEM | PTR_TO_MEM_OR_NULL */ u32 mem_size; u32 dynptr_id; /* for dynptr slices */ }; /* For dynptr stack slots */ struct { enum bpf_dynptr_type type; /* A dynptr is 16 bytes so it takes up 2 stack slots. * We need to track which slot is the first slot * to protect against cases where the user may try to * pass in an address starting at the second slot of the * dynptr. */ bool first_slot; } dynptr; /* For bpf_iter stack slots */ struct { /* BTF container and BTF type ID describing * struct bpf_iter_<type> of an iterator state */ struct btf *btf; u32 btf_id; /* packing following two fields to fit iter state into 16 bytes */ enum bpf_iter_state state:2; int depth:30; } iter; /* Max size from any of the above. */ struct { unsigned long raw1; unsigned long raw2; } raw; u32 subprogno; /* for PTR_TO_FUNC */ }; /* For scalar types (SCALAR_VALUE), this represents our knowledge of * the actual value. * For pointer types, this represents the variable part of the offset * from the pointed-to object, and is shared with all bpf_reg_states * with the same id as us. */ struct tnum var_off; /* Used to determine if any memory access using this register will * result in a bad access. * These refer to the same value as var_off, not necessarily the actual * contents of the register. */ s64 smin_value; /* minimum possible (s64)value */ s64 smax_value; /* maximum possible (s64)value */ u64 umin_value; /* minimum possible (u64)value */ u64 umax_value; /* maximum possible (u64)value */ s32 s32_min_value; /* minimum possible (s32)value */ s32 s32_max_value; /* maximum possible (s32)value */ u32 u32_min_value; /* minimum possible (u32)value */ u32 u32_max_value; /* maximum possible (u32)value */ /* For PTR_TO_PACKET, used to find other pointers with the same variable * offset, so they can share range knowledge. * For PTR_TO_MAP_VALUE_OR_NULL this is used to share which map value we * came from, when one is tested for != NULL. * For PTR_TO_MEM_OR_NULL this is used to identify memory allocation * for the purpose of tracking that it's freed. * For PTR_TO_SOCKET this is used to share which pointers retain the * same reference to the socket, to determine proper reference freeing. * For stack slots that are dynptrs, this is used to track references to * the dynptr to determine proper reference freeing. * Similarly to dynptrs, we use ID to track "belonging" of a reference * to a specific instance of bpf_iter. */ /* * Upper bit of ID is used to remember relationship between "linked" * registers. Example: * r1 = r2; both will have r1->id == r2->id == N * r1 += 10; r1->id == N | BPF_ADD_CONST and r1->off == 10 */ #define BPF_ADD_CONST (1U << 31) u32 id; /* PTR_TO_SOCKET and PTR_TO_TCP_SOCK could be a ptr returned * from a pointer-cast helper, bpf_sk_fullsock() and * bpf_tcp_sock(). * * Consider the following where "sk" is a reference counted * pointer returned from "sk = bpf_sk_lookup_tcp();": * * 1: sk = bpf_sk_lookup_tcp(); * 2: if (!sk) { return 0; } * 3: fullsock = bpf_sk_fullsock(sk); * 4: if (!fullsock) { bpf_sk_release(sk); return 0; } * 5: tp = bpf_tcp_sock(fullsock); * 6: if (!tp) { bpf_sk_release(sk); return 0; } * 7: bpf_sk_release(sk); * 8: snd_cwnd = tp->snd_cwnd; // verifier will complain * * After bpf_sk_release(sk) at line 7, both "fullsock" ptr and * "tp" ptr should be invalidated also. In order to do that, * the reg holding "fullsock" and "sk" need to remember * the original refcounted ptr id (i.e. sk_reg->id) in ref_obj_id * such that the verifier can reset all regs which have * ref_obj_id matching the sk_reg->id. * * sk_reg->ref_obj_id is set to sk_reg->id at line 1. * sk_reg->id will stay as NULL-marking purpose only. * After NULL-marking is done, sk_reg->id can be reset to 0. * * After "fullsock = bpf_sk_fullsock(sk);" at line 3, * fullsock_reg->ref_obj_id is set to sk_reg->ref_obj_id. * * After "tp = bpf_tcp_sock(fullsock);" at line 5, * tp_reg->ref_obj_id is set to fullsock_reg->ref_obj_id * which is the same as sk_reg->ref_obj_id. * * From the verifier perspective, if sk, fullsock and tp * are not NULL, they are the same ptr with different * reg->type. In particular, bpf_sk_release(tp) is also * allowed and has the same effect as bpf_sk_release(sk). */ u32 ref_obj_id; /* parentage chain for liveness checking */ struct bpf_reg_state *parent; /* Inside the callee two registers can be both PTR_TO_STACK like * R1=fp-8 and R2=fp-8, but one of them points to this function stack * while another to the caller's stack. To differentiate them 'frameno' * is used which is an index in bpf_verifier_state->frame[] array * pointing to bpf_func_state. */ u32 frameno; /* Tracks subreg definition. The stored value is the insn_idx of the * writing insn. This is safe because subreg_def is used before any insn * patching which only happens after main verification finished. */ s32 subreg_def; enum bpf_reg_liveness live; /* if (!precise && SCALAR_VALUE) min/max/tnum don't affect safety */ bool precise; }; enum bpf_stack_slot_type { STACK_INVALID, /* nothing was stored in this stack slot */ STACK_SPILL, /* register spilled into stack */ STACK_MISC, /* BPF program wrote some data into this slot */ STACK_ZERO, /* BPF program wrote constant zero */ /* A dynptr is stored in this stack slot. The type of dynptr * is stored in bpf_stack_state->spilled_ptr.dynptr.type */ STACK_DYNPTR, STACK_ITER, }; #define BPF_REG_SIZE 8 /* size of eBPF register in bytes */ #define BPF_REGMASK_ARGS ((1 << BPF_REG_1) | (1 << BPF_REG_2) | \ (1 << BPF_REG_3) | (1 << BPF_REG_4) | \ (1 << BPF_REG_5)) #define BPF_DYNPTR_SIZE sizeof(struct bpf_dynptr_kern) #define BPF_DYNPTR_NR_SLOTS (BPF_DYNPTR_SIZE / BPF_REG_SIZE) struct bpf_stack_state { struct bpf_reg_state spilled_ptr; u8 slot_type[BPF_REG_SIZE]; }; struct bpf_reference_state { /* Track each reference created with a unique id, even if the same * instruction creates the reference multiple times (eg, via CALL). */ int id; /* Instruction where the allocation of this reference occurred. This * is used purely to inform the user of a reference leak. */ int insn_idx; /* There can be a case like: * main (frame 0) * cb (frame 1) * func (frame 3) * cb (frame 4) * Hence for frame 4, if callback_ref just stored boolean, it would be * impossible to distinguish nested callback refs. Hence store the * frameno and compare that to callback_ref in check_reference_leak when * exiting a callback function. */ int callback_ref; }; struct bpf_retval_range { s32 minval; s32 maxval; }; /* state of the program: * type of all registers and stack info */ struct bpf_func_state { struct bpf_reg_state regs[MAX_BPF_REG]; /* index of call instruction that called into this func */ int callsite; /* stack frame number of this function state from pov of * enclosing bpf_verifier_state. * 0 = main function, 1 = first callee. */ u32 frameno; /* subprog number == index within subprog_info * zero == main subprog */ u32 subprogno; /* Every bpf_timer_start will increment async_entry_cnt. * It's used to distinguish: * void foo(void) { for(;;); } * void foo(void) { bpf_timer_set_callback(,foo); } */ u32 async_entry_cnt; struct bpf_retval_range callback_ret_range; bool in_callback_fn; bool in_async_callback_fn; bool in_exception_callback_fn; /* For callback calling functions that limit number of possible * callback executions (e.g. bpf_loop) keeps track of current * simulated iteration number. * Value in frame N refers to number of times callback with frame * N+1 was simulated, e.g. for the following call: * * bpf_loop(..., fn, ...); | suppose current frame is N * | fn would be simulated in frame N+1 * | number of simulations is tracked in frame N */ u32 callback_depth; /* The following fields should be last. See copy_func_state() */ int acquired_refs; struct bpf_reference_state *refs; /* The state of the stack. Each element of the array describes BPF_REG_SIZE * (i.e. 8) bytes worth of stack memory. * stack[0] represents bytes [*(r10-8)..*(r10-1)] * stack[1] represents bytes [*(r10-16)..*(r10-9)] * ... * stack[allocated_stack/8 - 1] represents [*(r10-allocated_stack)..*(r10-allocated_stack+7)] */ struct bpf_stack_state *stack; /* Size of the current stack, in bytes. The stack state is tracked below, in * `stack`. allocated_stack is always a multiple of BPF_REG_SIZE. */ int allocated_stack; }; #define MAX_CALL_FRAMES 8 /* instruction history flags, used in bpf_jmp_history_entry.flags field */ enum { /* instruction references stack slot through PTR_TO_STACK register; * we also store stack's frame number in lower 3 bits (MAX_CALL_FRAMES is 8) * and accessed stack slot's index in next 6 bits (MAX_BPF_STACK is 512, * 8 bytes per slot, so slot index (spi) is [0, 63]) */ INSN_F_FRAMENO_MASK = 0x7, /* 3 bits */ INSN_F_SPI_MASK = 0x3f, /* 6 bits */ INSN_F_SPI_SHIFT = 3, /* shifted 3 bits to the left */ INSN_F_STACK_ACCESS = BIT(9), /* we need 10 bits total */ }; static_assert(INSN_F_FRAMENO_MASK + 1 >= MAX_CALL_FRAMES); static_assert(INSN_F_SPI_MASK + 1 >= MAX_BPF_STACK / 8); struct bpf_jmp_history_entry { u32 idx; /* insn idx can't be bigger than 1 million */ u32 prev_idx : 22; /* special flags, e.g., whether insn is doing register stack spill/load */ u32 flags : 10; /* additional registers that need precision tracking when this * jump is backtracked, vector of six 10-bit records */ u64 linked_regs; }; /* Maximum number of register states that can exist at once */ #define BPF_ID_MAP_SIZE ((MAX_BPF_REG + MAX_BPF_STACK / BPF_REG_SIZE) * MAX_CALL_FRAMES) struct bpf_verifier_state { /* call stack tracking */ struct bpf_func_state *frame[MAX_CALL_FRAMES]; struct bpf_verifier_state *parent; /* * 'branches' field is the number of branches left to explore: * 0 - all possible paths from this state reached bpf_exit or * were safely pruned * 1 - at least one path is being explored. * This state hasn't reached bpf_exit * 2 - at least two paths are being explored. * This state is an immediate parent of two children. * One is fallthrough branch with branches==1 and another * state is pushed into stack (to be explored later) also with * branches==1. The parent of this state has branches==1. * The verifier state tree connected via 'parent' pointer looks like: * 1 * 1 * 2 -> 1 (first 'if' pushed into stack) * 1 * 2 -> 1 (second 'if' pushed into stack) * 1 * 1 * 1 bpf_exit. * * Once do_check() reaches bpf_exit, it calls update_branch_counts() * and the verifier state tree will look: * 1 * 1 * 2 -> 1 (first 'if' pushed into stack) * 1 * 1 -> 1 (second 'if' pushed into stack) * 0 * 0 * 0 bpf_exit. * After pop_stack() the do_check() will resume at second 'if'. * * If is_state_visited() sees a state with branches > 0 it means * there is a loop. If such state is exactly equal to the current state * it's an infinite loop. Note states_equal() checks for states * equivalency, so two states being 'states_equal' does not mean * infinite loop. The exact comparison is provided by * states_maybe_looping() function. It's a stronger pre-check and * much faster than states_equal(). * * This algorithm may not find all possible infinite loops or * loop iteration count may be too high. * In such cases BPF_COMPLEXITY_LIMIT_INSNS limit kicks in. */ u32 branches; u32 insn_idx; u32 curframe; struct bpf_active_lock active_lock; bool speculative; bool active_rcu_lock; u32 active_preempt_lock; /* If this state was ever pointed-to by other state's loop_entry field * this flag would be set to true. Used to avoid freeing such states * while they are still in use. */ bool used_as_loop_entry; bool in_sleepable; /* first and last insn idx of this verifier state */ u32 first_insn_idx; u32 last_insn_idx; /* If this state is a part of states loop this field points to some * parent of this state such that: * - it is also a member of the same states loop; * - DFS states traversal starting from initial state visits loop_entry * state before this state. * Used to compute topmost loop entry for state loops. * State loops might appear because of open coded iterators logic. * See get_loop_entry() for more information. */ struct bpf_verifier_state *loop_entry; /* jmp history recorded from first to last. * backtracking is using it to go from last to first. * For most states jmp_history_cnt is [0-3]. * For loops can go up to ~40. */ struct bpf_jmp_history_entry *jmp_history; u32 jmp_history_cnt; u32 dfs_depth; u32 callback_unroll_depth; u32 may_goto_depth; }; #define bpf_get_spilled_reg(slot, frame, mask) \ (((slot < frame->allocated_stack / BPF_REG_SIZE) && \ ((1 << frame->stack[slot].slot_type[BPF_REG_SIZE - 1]) & (mask))) \ ? &frame->stack[slot].spilled_ptr : NULL) /* Iterate over 'frame', setting 'reg' to either NULL or a spilled register. */ #define bpf_for_each_spilled_reg(iter, frame, reg, mask) \ for (iter = 0, reg = bpf_get_spilled_reg(iter, frame, mask); \ iter < frame->allocated_stack / BPF_REG_SIZE; \ iter++, reg = bpf_get_spilled_reg(iter, frame, mask)) #define bpf_for_each_reg_in_vstate_mask(__vst, __state, __reg, __mask, __expr) \ ({ \ struct bpf_verifier_state *___vstate = __vst; \ int ___i, ___j; \ for (___i = 0; ___i <= ___vstate->curframe; ___i++) { \ struct bpf_reg_state *___regs; \ __state = ___vstate->frame[___i]; \ ___regs = __state->regs; \ for (___j = 0; ___j < MAX_BPF_REG; ___j++) { \ __reg = &___regs[___j]; \ (void)(__expr); \ } \ bpf_for_each_spilled_reg(___j, __state, __reg, __mask) { \ if (!__reg) \ continue; \ (void)(__expr); \ } \ } \ }) /* Invoke __expr over regsiters in __vst, setting __state and __reg */ #define bpf_for_each_reg_in_vstate(__vst, __state, __reg, __expr) \ bpf_for_each_reg_in_vstate_mask(__vst, __state, __reg, 1 << STACK_SPILL, __expr) /* linked list of verifier states used to prune search */ struct bpf_verifier_state_list { struct bpf_verifier_state state; struct bpf_verifier_state_list *next; int miss_cnt, hit_cnt; }; struct bpf_loop_inline_state { unsigned int initialized:1; /* set to true upon first entry */ unsigned int fit_for_inline:1; /* true if callback function is the same * at each call and flags are always zero */ u32 callback_subprogno; /* valid when fit_for_inline is true */ }; /* pointer and state for maps */ struct bpf_map_ptr_state { struct bpf_map *map_ptr; bool poison; bool unpriv; }; /* Possible states for alu_state member. */ #define BPF_ALU_SANITIZE_SRC (1U << 0) #define BPF_ALU_SANITIZE_DST (1U << 1) #define BPF_ALU_NEG_VALUE (1U << 2) #define BPF_ALU_NON_POINTER (1U << 3) #define BPF_ALU_IMMEDIATE (1U << 4) #define BPF_ALU_SANITIZE (BPF_ALU_SANITIZE_SRC | \ BPF_ALU_SANITIZE_DST) struct bpf_insn_aux_data { union { enum bpf_reg_type ptr_type; /* pointer type for load/store insns */ struct bpf_map_ptr_state map_ptr_state; s32 call_imm; /* saved imm field of call insn */ u32 alu_limit; /* limit for add/sub register with pointer */ struct { u32 map_index; /* index into used_maps[] */ u32 map_off; /* offset from value base address */ }; struct { enum bpf_reg_type reg_type; /* type of pseudo_btf_id */ union { struct { struct btf *btf; u32 btf_id; /* btf_id for struct typed var */ }; u32 mem_size; /* mem_size for non-struct typed var */ }; } btf_var; /* if instruction is a call to bpf_loop this field tracks * the state of the relevant registers to make decision about inlining */ struct bpf_loop_inline_state loop_inline_state; }; union { /* remember the size of type passed to bpf_obj_new to rewrite R1 */ u64 obj_new_size; /* remember the offset of node field within type to rewrite */ u64 insert_off; }; struct btf_struct_meta *kptr_struct_meta; u64 map_key_state; /* constant (32 bit) key tracking for maps */ int ctx_field_size; /* the ctx field size for load insn, maybe 0 */ u32 seen; /* this insn was processed by the verifier at env->pass_cnt */ bool sanitize_stack_spill; /* subject to Spectre v4 sanitation */ bool zext_dst; /* this insn zero extends dst reg */ bool needs_zext; /* alu op needs to clear upper bits */ bool storage_get_func_atomic; /* bpf_*_storage_get() with atomic memory alloc */ bool is_iter_next; /* bpf_iter_<type>_next() kfunc call */ bool call_with_percpu_alloc_ptr; /* {this,per}_cpu_ptr() with prog percpu alloc */ u8 alu_state; /* used in combination with alu_limit */ /* true if STX or LDX instruction is a part of a spill/fill * pattern for a bpf_fastcall call. */ u8 fastcall_pattern:1; /* for CALL instructions, a number of spill/fill pairs in the * bpf_fastcall pattern. */ u8 fastcall_spills_num:3; /* below fields are initialized once */ unsigned int orig_idx; /* original instruction index */ bool jmp_point; bool prune_point; /* ensure we check state equivalence and save state checkpoint and * this instruction, regardless of any heuristics */ bool force_checkpoint; /* true if instruction is a call to a helper function that * accepts callback function as a parameter. */ bool calls_callback; }; #define MAX_USED_MAPS 64 /* max number of maps accessed by one eBPF program */ #define MAX_USED_BTFS 64 /* max number of BTFs accessed by one BPF program */ #define BPF_VERIFIER_TMP_LOG_SIZE 1024 struct bpf_verifier_log { /* Logical start and end positions of a "log window" of the verifier log. * start_pos == 0 means we haven't truncated anything. * Once truncation starts to happen, start_pos + len_total == end_pos, * except during log reset situations, in which (end_pos - start_pos) * might get smaller than len_total (see bpf_vlog_reset()). * Generally, (end_pos - start_pos) gives number of useful data in * user log buffer. */ u64 start_pos; u64 end_pos; char __user *ubuf; u32 level; u32 len_total; u32 len_max; char kbuf[BPF_VERIFIER_TMP_LOG_SIZE]; }; #define BPF_LOG_LEVEL1 1 #define BPF_LOG_LEVEL2 2 #define BPF_LOG_STATS 4 #define BPF_LOG_FIXED 8 #define BPF_LOG_LEVEL (BPF_LOG_LEVEL1 | BPF_LOG_LEVEL2) #define BPF_LOG_MASK (BPF_LOG_LEVEL | BPF_LOG_STATS | BPF_LOG_FIXED) #define BPF_LOG_KERNEL (BPF_LOG_MASK + 1) /* kernel internal flag */ #define BPF_LOG_MIN_ALIGNMENT 8U #define BPF_LOG_ALIGNMENT 40U static inline bool bpf_verifier_log_needed(const struct bpf_verifier_log *log) { return log && log->level; } #define BPF_MAX_SUBPROGS 256 struct bpf_subprog_arg_info { enum bpf_arg_type arg_type; union { u32 mem_size; u32 btf_id; }; }; struct bpf_subprog_info { /* 'start' has to be the first field otherwise find_subprog() won't work */ u32 start; /* insn idx of function entry point */ u32 linfo_idx; /* The idx to the main_prog->aux->linfo */ u16 stack_depth; /* max. stack depth used by this function */ u16 stack_extra; /* offsets in range [stack_depth .. fastcall_stack_off) * are used for bpf_fastcall spills and fills. */ s16 fastcall_stack_off; bool has_tail_call: 1; bool tail_call_reachable: 1; bool has_ld_abs: 1; bool is_cb: 1; bool is_async_cb: 1; bool is_exception_cb: 1; bool args_cached: 1; /* true if bpf_fastcall stack region is used by functions that can't be inlined */ bool keep_fastcall_stack: 1; u8 arg_cnt; struct bpf_subprog_arg_info args[MAX_BPF_FUNC_REG_ARGS]; }; struct bpf_verifier_env; struct backtrack_state { struct bpf_verifier_env *env; u32 frame; u32 reg_masks[MAX_CALL_FRAMES]; u64 stack_masks[MAX_CALL_FRAMES]; }; struct bpf_id_pair { u32 old; u32 cur; }; struct bpf_idmap { u32 tmp_id_gen; struct bpf_id_pair map[BPF_ID_MAP_SIZE]; }; struct bpf_idset { u32 count; u32 ids[BPF_ID_MAP_SIZE]; }; /* single container for all structs * one verifier_env per bpf_check() call */ struct bpf_verifier_env { u32 insn_idx; u32 prev_insn_idx; struct bpf_prog *prog; /* eBPF program being verified */ const struct bpf_verifier_ops *ops; struct module *attach_btf_mod; /* The owner module of prog->aux->attach_btf */ struct bpf_verifier_stack_elem *head; /* stack of verifier states to be processed */ int stack_size; /* number of states to be processed */ bool strict_alignment; /* perform strict pointer alignment checks */ bool test_state_freq; /* test verifier with different pruning frequency */ bool test_reg_invariants; /* fail verification on register invariants violations */ struct bpf_verifier_state *cur_state; /* current verifier state */ struct bpf_verifier_state_list **explored_states; /* search pruning optimization */ struct bpf_verifier_state_list *free_list; struct bpf_map *used_maps[MAX_USED_MAPS]; /* array of map's used by eBPF program */ struct btf_mod_pair used_btfs[MAX_USED_BTFS]; /* array of BTF's used by BPF program */ u32 used_map_cnt; /* number of used maps */ u32 used_btf_cnt; /* number of used BTF objects */ u32 id_gen; /* used to generate unique reg IDs */ u32 hidden_subprog_cnt; /* number of hidden subprogs */ int exception_callback_subprog; bool explore_alu_limits; bool allow_ptr_leaks; /* Allow access to uninitialized stack memory. Writes with fixed offset are * always allowed, so this refers to reads (with fixed or variable offset), * to writes with variable offset and to indirect (helper) accesses. */ bool allow_uninit_stack; bool bpf_capable; bool bypass_spec_v1; bool bypass_spec_v4; bool seen_direct_write; bool seen_exception; struct bpf_insn_aux_data *insn_aux_data; /* array of per-insn state */ const struct bpf_line_info *prev_linfo; struct bpf_verifier_log log; struct bpf_subprog_info subprog_info[BPF_MAX_SUBPROGS + 2]; /* max + 2 for the fake and exception subprogs */ union { struct bpf_idmap idmap_scratch; struct bpf_idset idset_scratch; }; struct { int *insn_state; int *insn_stack; int cur_stack; } cfg; struct backtrack_state bt; struct bpf_jmp_history_entry *cur_hist_ent; u32 pass_cnt; /* number of times do_check() was called */ u32 subprog_cnt; /* number of instructions analyzed by the verifier */ u32 prev_insn_processed, insn_processed; /* number of jmps, calls, exits analyzed so far */ u32 prev_jmps_processed, jmps_processed; /* total verification time */ u64 verification_time; /* maximum number of verifier states kept in 'branching' instructions */ u32 max_states_per_insn; /* total number of allocated verifier states */ u32 total_states; /* some states are freed during program analysis. * this is peak number of states. this number dominates kernel * memory consumption during verification */ u32 peak_states; /* longest register parentage chain walked for liveness marking */ u32 longest_mark_read_walk; bpfptr_t fd_array; /* bit mask to keep track of whether a register has been accessed * since the last time the function state was printed */ u32 scratched_regs; /* Same as scratched_regs but for stack slots */ u64 scratched_stack_slots; u64 prev_log_pos, prev_insn_print_pos; /* buffer used to temporary hold constants as scalar registers */ struct bpf_reg_state fake_reg[2]; /* buffer used to generate temporary string representations, * e.g., in reg_type_str() to generate reg_type string */ char tmp_str_buf[TMP_STR_BUF_LEN]; struct bpf_insn insn_buf[INSN_BUF_SIZE]; struct bpf_insn epilogue_buf[INSN_BUF_SIZE]; }; static inline struct bpf_func_info_aux *subprog_aux(struct bpf_verifier_env *env, int subprog) { return &env->prog->aux->func_info_aux[subprog]; } static inline struct bpf_subprog_info *subprog_info(struct bpf_verifier_env *env, int subprog) { return &env->subprog_info[subprog]; } __printf(2, 0) void bpf_verifier_vlog(struct bpf_verifier_log *log, const char *fmt, va_list args); __printf(2, 3) void bpf_verifier_log_write(struct bpf_verifier_env *env, const char *fmt, ...); __printf(2, 3) void bpf_log(struct bpf_verifier_log *log, const char *fmt, ...); int bpf_vlog_init(struct bpf_verifier_log *log, u32 log_level, char __user *log_buf, u32 log_size); void bpf_vlog_reset(struct bpf_verifier_log *log, u64 new_pos); int bpf_vlog_finalize(struct bpf_verifier_log *log, u32 *log_size_actual); __printf(3, 4) void verbose_linfo(struct bpf_verifier_env *env, u32 insn_off, const char *prefix_fmt, ...); static inline struct bpf_func_state *cur_func(struct bpf_verifier_env *env) { struct bpf_verifier_state *cur = env->cur_state; return cur->frame[cur->curframe]; } static inline struct bpf_reg_state *cur_regs(struct bpf_verifier_env *env) { return cur_func(env)->regs; } int bpf_prog_offload_verifier_prep(struct bpf_prog *prog); int bpf_prog_offload_verify_insn(struct bpf_verifier_env *env, int insn_idx, int prev_insn_idx); int bpf_prog_offload_finalize(struct bpf_verifier_env *env); void bpf_prog_offload_replace_insn(struct bpf_verifier_env *env, u32 off, struct bpf_insn *insn); void bpf_prog_offload_remove_insns(struct bpf_verifier_env *env, u32 off, u32 cnt); /* this lives here instead of in bpf.h because it needs to dereference tgt_prog */ static inline u64 bpf_trampoline_compute_key(const struct bpf_prog *tgt_prog, struct btf *btf, u32 btf_id) { if (tgt_prog) return ((u64)tgt_prog->aux->id << 32) | btf_id; else return ((u64)btf_obj_id(btf) << 32) | 0x80000000 | btf_id; } /* unpack the IDs from the key as constructed above */ static inline void bpf_trampoline_unpack_key(u64 key, u32 *obj_id, u32 *btf_id) { if (obj_id) *obj_id = key >> 32; if (btf_id) *btf_id = key & 0x7FFFFFFF; } int bpf_check_attach_target(struct bpf_verifier_log *log, const struct bpf_prog *prog, const struct bpf_prog *tgt_prog, u32 btf_id, struct bpf_attach_target_info *tgt_info); void bpf_free_kfunc_btf_tab(struct bpf_kfunc_btf_tab *tab); int mark_chain_precision(struct bpf_verifier_env *env, int regno); #define BPF_BASE_TYPE_MASK GENMASK(BPF_BASE_TYPE_BITS - 1, 0) /* extract base type from bpf_{arg, return, reg}_type. */ static inline u32 base_type(u32 type) { return type & BPF_BASE_TYPE_MASK; } /* extract flags from an extended type. See bpf_type_flag in bpf.h. */ static inline u32 type_flag(u32 type) { return type & ~BPF_BASE_TYPE_MASK; } /* only use after check_attach_btf_id() */ static inline enum bpf_prog_type resolve_prog_type(const struct bpf_prog *prog) { return (prog->type == BPF_PROG_TYPE_EXT && prog->aux->saved_dst_prog_type) ? prog->aux->saved_dst_prog_type : prog->type; } static inline bool bpf_prog_check_recur(const struct bpf_prog *prog) { switch (resolve_prog_type(prog)) { case BPF_PROG_TYPE_TRACING: return prog->expected_attach_type != BPF_TRACE_ITER; case BPF_PROG_TYPE_STRUCT_OPS: case BPF_PROG_TYPE_LSM: return false; default: return true; } } #define BPF_REG_TRUSTED_MODIFIERS (MEM_ALLOC | PTR_TRUSTED | NON_OWN_REF) static inline bool bpf_type_has_unsafe_modifiers(u32 type) { return type_flag(type) & ~BPF_REG_TRUSTED_MODIFIERS; } static inline bool type_is_ptr_alloc_obj(u32 type) { return base_type(type) == PTR_TO_BTF_ID && type_flag(type) & MEM_ALLOC; } static inline bool type_is_non_owning_ref(u32 type) { return type_is_ptr_alloc_obj(type) && type_flag(type) & NON_OWN_REF; } static inline bool type_is_pkt_pointer(enum bpf_reg_type type) { type = base_type(type); return type == PTR_TO_PACKET || type == PTR_TO_PACKET_META; } static inline bool type_is_sk_pointer(enum bpf_reg_type type) { return type == PTR_TO_SOCKET || type == PTR_TO_SOCK_COMMON || type == PTR_TO_TCP_SOCK || type == PTR_TO_XDP_SOCK; } static inline bool type_may_be_null(u32 type) { return type & PTR_MAYBE_NULL; } static inline void mark_reg_scratched(struct bpf_verifier_env *env, u32 regno) { env->scratched_regs |= 1U << regno; } static inline void mark_stack_slot_scratched(struct bpf_verifier_env *env, u32 spi) { env->scratched_stack_slots |= 1ULL << spi; } static inline bool reg_scratched(const struct bpf_verifier_env *env, u32 regno) { return (env->scratched_regs >> regno) & 1; } static inline bool stack_slot_scratched(const struct bpf_verifier_env *env, u64 regno) { return (env->scratched_stack_slots >> regno) & 1; } static inline bool verifier_state_scratched(const struct bpf_verifier_env *env) { return env->scratched_regs || env->scratched_stack_slots; } static inline void mark_verifier_state_clean(struct bpf_verifier_env *env) { env->scratched_regs = 0U; env->scratched_stack_slots = 0ULL; } /* Used for printing the entire verifier state. */ static inline void mark_verifier_state_scratched(struct bpf_verifier_env *env) { env->scratched_regs = ~0U; env->scratched_stack_slots = ~0ULL; } static inline bool bpf_stack_narrow_access_ok(int off, int fill_size, int spill_size) { #ifdef __BIG_ENDIAN off -= spill_size - fill_size; #endif return !(off % BPF_REG_SIZE); } const char *reg_type_str(struct bpf_verifier_env *env, enum bpf_reg_type type); const char *dynptr_type_str(enum bpf_dynptr_type type); const char *iter_type_str(const struct btf *btf, u32 btf_id); const char *iter_state_str(enum bpf_iter_state state); void print_verifier_state(struct bpf_verifier_env *env, const struct bpf_func_state *state, bool print_all); void print_insn_state(struct bpf_verifier_env *env, const struct bpf_func_state *state); #endif /* _LINUX_BPF_VERIFIER_H */
[+]
..
[-] node.h
[edit]
[-] via.h
[edit]
[-] ks0108.h
[edit]
[-] vfio.h
[edit]
[-] rbtree.h
[edit]
[-] stacktrace.h
[edit]
[-] list.h
[edit]
[-] mroute.h
[edit]
[-] psp.h
[edit]
[-] evm.h
[edit]
[-] interconnect.h
[edit]
[-] context_tracking_irq.h
[edit]
[-] phy_fixed.h
[edit]
[-] typecheck.h
[edit]
[-] rio_ids.h
[edit]
[-] sem.h
[edit]
[-] instrumented.h
[edit]
[-] count_zeros.h
[edit]
[-] fs.h
[edit]
[-] keyctl.h
[edit]
[-] rtc.h
[edit]
[-] mmu_context.h
[edit]
[+]
dsa
[-] virtio_caif.h
[edit]
[-] atalk.h
[edit]
[-] rndis.h
[edit]
[-] virtio_anchor.h
[edit]
[-] posix_acl.h
[edit]
[-] rhashtable-types.h
[edit]
[-] swap.h
[edit]
[-] purgatory.h
[edit]
[-] rtsx_pci.h
[edit]
[-] aio.h
[edit]
[-] rv.h
[edit]
[-] nvme-auth.h
[edit]
[-] args.h
[edit]
[-] license.h
[edit]
[-] bpfilter.h
[edit]
[-] tty_flip.h
[edit]
[-] crash_reserve.h
[edit]
[-] compiler_attributes.h
[edit]
[-] omap-dma.h
[edit]
[-] range.h
[edit]
[-] dfl.h
[edit]
[-] if_ltalk.h
[edit]
[-] attribute_container.h
[edit]
[-] gfp_types.h
[edit]
[-] hashtable_api.h
[edit]
[-] dynamic_debug.h
[edit]
[-] a.out.h
[edit]
[-] cpuset.h
[edit]
[-] ftrace.h
[edit]
[-] export-internal.h
[edit]
[-] vmalloc.h
[edit]
[-] nd.h
[edit]
[-] gfp.h
[edit]
[-] kdb.h
[edit]
[-] namei.h
[edit]
[-] lockref.h
[edit]
[-] in6.h
[edit]
[-] skbuff.h
[edit]
[-] ti-emif-sram.h
[edit]
[-] logic_iomem.h
[edit]
[-] phy_led_triggers.h
[edit]
[-] trace_events.h
[edit]
[-] radix-tree.h
[edit]
[-] mount.h
[edit]
[-] font.h
[edit]
[-] tc.h
[edit]
[-] dirent.h
[edit]
[-] io-64-nonatomic-lo-hi.h
[edit]
[-] crc7.h
[edit]
[-] pstore_ram.h
[edit]
[-] stmp_device.h
[edit]
[-] mm_api.h
[edit]
[-] mdev.h
[edit]
[-] percpu.h
[edit]
[-] once.h
[edit]
[-] mdio-gpio.h
[edit]
[-] ktime.h
[edit]
[-] ata_platform.h
[edit]
[-] tnum.h
[edit]
[-] verification.h
[edit]
[-] regmap.h
[edit]
[-] lsm_count.h
[edit]
[-] eventpoll.h
[edit]
[-] cgroup_subsys.h
[edit]
[-] arm-smccc.h
[edit]
[-] debugobjects.h
[edit]
[-] leds-regulator.h
[edit]
[-] printk.h
[edit]
[-] i2c-algo-pcf.h
[edit]
[-] signal_types.h
[edit]
[-] page-flags.h
[edit]
[-] rpmsg.h
[edit]
[-] wait.h
[edit]
[-] blk-integrity.h
[edit]
[-] bug.h
[edit]
[-] ppp_channel.h
[edit]
[-] kstrtox.h
[edit]
[-] prefetch.h
[edit]
[-] adxl.h
[edit]
[-] serial_8250.h
[edit]
[-] mnt_idmapping.h
[edit]
[-] kgdb.h
[edit]
[-] hdlcdrv.h
[edit]
[-] bcm47xx_wdt.h
[edit]
[-] irqhandler.h
[edit]
[-] fwnode.h
[edit]
[-] mc6821.h
[edit]
[-] fwnode_mdio.h
[edit]
[-] buildid.h
[edit]
[-] amd-pmf-io.h
[edit]
[+]
irqchip
[-] netdevice.h
[edit]
[-] root_dev.h
[edit]
[-] leds-lp3952.h
[edit]
[-] f75375s.h
[edit]
[-] nl802154.h
[edit]
[-] if_vlan.h
[edit]
[-] list_bl.h
[edit]
[-] elfnote-lto.h
[edit]
[-] mdio-mux.h
[edit]
[-] dma-fence-chain.h
[edit]
[-] workqueue.h
[edit]
[-] delayacct.h
[edit]
[-] spinlock_types.h
[edit]
[-] smp_types.h
[edit]
[-] interval_tree.h
[edit]
[-] oom.h
[edit]
[-] phy_link_topology.h
[edit]
[-] sysfb.h
[edit]
[-] crc32.h
[edit]
[-] mbus.h
[edit]
[-] indirect_call_wrapper.h
[edit]
[-] netfilter_bridge.h
[edit]
[-] percpu-refcount.h
[edit]
[-] cookie.h
[edit]
[-] flex_proportions.h
[edit]
[-] sonet.h
[edit]
[-] entry-kvm.h
[edit]
[-] migrate.h
[edit]
[-] leds-ti-lmu-common.h
[edit]
[-] map_benchmark.h
[edit]
[-] kthread.h
[edit]
[-] t10-pi.h
[edit]
[-] dlm_plock.h
[edit]
[-] vdpa.h
[edit]
[-] spmi.h
[edit]
[-] joystick.h
[edit]
[-] rodata_test.h
[edit]
[-] i2c-dev.h
[edit]
[-] irq.h
[edit]
[-] dma-mapping.h
[edit]
[-] inet_diag.h
[edit]
[-] blk-crypto.h
[edit]
[-] fileattr.h
[edit]
[-] stmmac.h
[edit]
[-] pci-epf.h
[edit]
[-] seqlock_types.h
[edit]
[-] entry-common.h
[edit]
[-] hwmon-sysfs.h
[edit]
[-] moxtet.h
[edit]
[-] ppp-comp.h
[edit]
[-] cordic.h
[edit]
[-] eisa.h
[edit]
[-] reset.h
[edit]
[-] pcs-lynx.h
[edit]
[+]
netfilter
[-] mxm-wmi.h
[edit]
[-] generic-radix-tree.h
[edit]
[-] llist.h
[edit]
[-] dma-buf.h
[edit]
[-] bitfield.h
[edit]
[-] vt_kern.h
[edit]
[-] consolemap.h
[edit]
[-] module_symbol.h
[edit]
[-] jbd2.h
[edit]
[-] bit_spinlock.h
[edit]
[-] dasd_mod.h
[edit]
[-] ipmi_smi.h
[edit]
[-] seqno-fence.h
[edit]
[-] rcupdate.h
[edit]
[-] netpoll.h
[edit]
[-] llist_api.h
[edit]
[-] badblocks.h
[edit]
[-] libps2.h
[edit]
[-] visorbus.h
[edit]
[-] swap_slots.h
[edit]
[-] rtnetlink.h
[edit]
[-] mm_inline.h
[edit]
[-] trace.h
[edit]
[-] xarray.h
[edit]
[-] seq_file.h
[edit]
[-] hugetlb_inline.h
[edit]
[-] pid.h
[edit]
[-] libfdt.h
[edit]
[-] wait_api.h
[edit]
[-] siox.h
[edit]
[-] omap-mailbox.h
[edit]
[-] uuid.h
[edit]
[-] parman.h
[edit]
[-] nfs_page.h
[edit]
[-] util_macros.h
[edit]
[-] psp-platform-access.h
[edit]
[-] rcutree.h
[edit]
[-] mailbox_controller.h
[edit]
[-] cgroup_rdma.h
[edit]
[-] static_call_types.h
[edit]
[-] memfd.h
[edit]
[-] lz4.h
[edit]
[-] omapfb.h
[edit]
[-] base64.h
[edit]
[-] termios_internal.h
[edit]
[-] led-class-multicolor.h
[edit]
[-] hwspinlock.h
[edit]
[-] cfi.h
[edit]
[-] seq_file_net.h
[edit]
[-] misc_cgroup.h
[edit]
[-] string_helpers.h
[edit]
[-] sxgbe_platform.h
[edit]
[-] clockchips.h
[edit]
[-] tty_buffer.h
[edit]
[-] tca6416_keypad.h
[edit]
[-] brcmphy.h
[edit]
[-] scs.h
[edit]
[-] sock_diag.h
[edit]
[-] freezer.h
[edit]
[-] netfilter.h
[edit]
[-] zconf.h
[edit]
[-] stackdepot.h
[edit]
[-] build-salt.h
[edit]
[-] seg6.h
[edit]
[-] cm4000_cs.h
[edit]
[-] gameport.h
[edit]
[-] tpm_svsm.h
[edit]
[-] hpet.h
[edit]
[-] pata_arasan_cf_data.h
[edit]
[-] restart_block.h
[edit]
[-] nfs_fs.h
[edit]
[-] of_fdt.h
[edit]
[-] mem_encrypt.h
[edit]
[-] dpll.h
[edit]
[-] proc_fs.h
[edit]
[-] ahci-remap.h
[edit]
[-] topology.h
[edit]
[-] ssbi.h
[edit]
[-] randomize_kstack.h
[edit]
[-] configfs.h
[edit]
[-] iscsi_boot_sysfs.h
[edit]
[-] netfs.h
[edit]
[-] security.h
[edit]
[-] bpf_lsm.h
[edit]
[-] spinlock_rt.h
[edit]
[+]
soundwire
[-] acpi_viot.h
[edit]
[-] cn_proc.h
[edit]
[-] genl_magic_struct.h
[edit]
[-] thermal.h
[edit]
[-] scatterlist.h
[edit]
[-] ahci_platform.h
[edit]
[-] dma-resv.h
[edit]
[-] spinlock_api_up.h
[edit]
[-] backing-dev-defs.h
[edit]
[-] hash.h
[edit]
[-] pvclock_gtod.h
[edit]
[-] kconfig.h
[edit]
[+]
mmc
[-] uidgid.h
[edit]
[-] s3c_adc_battery.h
[edit]
[-] cdrom.h
[edit]
[-] parport_pc.h
[edit]
[-] random.h
[edit]
[-] fscache.h
[edit]
[-] watch_queue.h
[edit]
[-] tty_ldisc.h
[edit]
[-] btree-128.h
[edit]
[-] mm_types.h
[edit]
[-] pwm_backlight.h
[edit]
[-] usbdevice_fs.h
[edit]
[-] libfdt_env.h
[edit]
[-] firmware.h
[edit]
[-] miscdevice.h
[edit]
[-] kmsan_string.h
[edit]
[-] threads.h
[edit]
[-] mpi.h
[edit]
[-] ip.h
[edit]
[-] kbd_diacr.h
[edit]
[+]
regulator
[-] jz4740-adc.h
[edit]
[-] bma150.h
[edit]
[-] bio.h
[edit]
[-] bpf_lirc.h
[edit]
[-] nvme-fc-driver.h
[edit]
[-] rmi.h
[edit]
[-] ds2782_battery.h
[edit]
[-] mhi_ep.h
[edit]
[-] tick.h
[edit]
[-] isa.h
[edit]
[-] srcutiny.h
[edit]
[-] cnt32_to_63.h
[edit]
[-] extcon.h
[edit]
[-] intel_vsec.h
[edit]
[-] etherdevice.h
[edit]
[-] apple_bl.h
[edit]
[-] of_platform.h
[edit]
[-] iommu-dma.h
[edit]
[+]
pse-pd
[-] dm-verity-loadpin.h
[edit]
[-] nfs_fs_sb.h
[edit]
[-] flat.h
[edit]
[-] libnvdimm.h
[edit]
[-] fsl_devices.h
[edit]
[-] scc.h
[edit]
[-] olpc-ec.h
[edit]
[+]
avf
[-] auto_dev-ioctl.h
[edit]
[-] ioprio.h
[edit]
[-] compiler-gcc.h
[edit]
[-] sh_clk.h
[edit]
[-] spinlock_api.h
[edit]
[-] init_task.h
[edit]
[-] sys.h
[edit]
[-] virtio_dma_buf.h
[edit]
[-] once_lite.h
[edit]
[-] ascii85.h
[edit]
[-] lockdep_api.h
[edit]
[-] dns_resolver.h
[edit]
[-] transport_class.h
[edit]
[-] if_pppol2tp.h
[edit]
[-] devfreq_cooling.h
[edit]
[-] pm.h
[edit]
[-] mroute6.h
[edit]
[-] kernel.h
[edit]
[-] module.h
[edit]
[-] scpi_protocol.h
[edit]
[-] io-64-nonatomic-hi-lo.h
[edit]
[-] counter.h
[edit]
[-] dtlk.h
[edit]
[-] devm-helpers.h
[edit]
[-] rwlock_rt.h
[edit]
[-] ratelimit_types.h
[edit]
[-] kmsg_dump.h
[edit]
[-] memcontrol.h
[edit]
[-] pstore.h
[edit]
[+]
mlx5
[-] scx200.h
[edit]
[-] rational.h
[edit]
[-] fwctl.h
[edit]
[-] filter.h
[edit]
[+]
remoteproc
[-] l2tp.h
[edit]
[-] rio_drv.h
[edit]
[-] lis3lv02d.h
[edit]
[-] aer.h
[edit]
[-] string_choices.h
[edit]
[-] ata.h
[edit]
[-] stdarg.h
[edit]
[-] phylib_stubs.h
[edit]
[-] pgtable_api.h
[edit]
[-] local_lock_internal.h
[edit]
[-] gcd.h
[edit]
[-] stringhash.h
[edit]
[-] icmpv6.h
[edit]
[-] bpf_trace.h
[edit]
[-] arm_sdei.h
[edit]
[-] nvme-tcp.h
[edit]
[-] min_heap.h
[edit]
[-] drbd_genl_api.h
[edit]
[-] stmp3xxx_rtc_wdt.h
[edit]
[-] pm_domain.h
[edit]
[-] prime_numbers.h
[edit]
[-] if_fddi.h
[edit]
[-] ucb1400.h
[edit]
[-] mnt_namespace.h
[edit]
[-] if_macvlan.h
[edit]
[-] posix-clock.h
[edit]
[-] isapnp.h
[edit]
[-] pm_opp.h
[edit]
[-] memory.h
[edit]
[-] if_link.h
[edit]
[-] vt.h
[edit]
[-] libgcc.h
[edit]
[-] tifm.h
[edit]
[-] rcu_node_tree.h
[edit]
[-] mISDNif.h
[edit]
[-] tracepoint-defs.h
[edit]
[-] wm97xx.h
[edit]
[-] nfsacl.h
[edit]
[-] exportfs.h
[edit]
[-] skb_array.h
[edit]
[-] i2c-mux.h
[edit]
[-] filelock.h
[edit]
[-] errqueue.h
[edit]
[-] of_graph.h
[edit]
[-] of_mdio.h
[edit]
[-] nospec.h
[edit]
[-] tracefs.h
[edit]
[-] jiffies.h
[edit]
[-] dca.h
[edit]
[-] i2c-algo-pca.h
[edit]
[-] igmp.h
[edit]
[-] edd.h
[edit]
[+]
decompress
[-] isa-dma.h
[edit]
[-] wwan.h
[edit]
[-] numa.h
[edit]
[-] spinlock_api_smp.h
[edit]
[-] 8250_pci.h
[edit]
[-] ipv6_route.h
[edit]
[-] dma-map-ops.h
[edit]
[-] minmax.h
[edit]
[-] if_tunnel.h
[edit]
[-] devcoredump.h
[edit]
[-] via-core.h
[edit]
[-] bootmem_info.h
[edit]
[+]
device
[-] kmsan-checks.h
[edit]
[-] user.h
[edit]
[-] most.h
[edit]
[-] sony-laptop.h
[edit]
[+]
fsl
[+]
mdio
[-] ww_mutex.h
[edit]
[-] workqueue_api.h
[edit]
[-] seq_buf.h
[edit]
[+]
isdn
[-] io_uring.h
[edit]
[-] kmod.h
[edit]
[-] rculist.h
[edit]
[-] regset.h
[edit]
[-] logic_pio.h
[edit]
[-] mman.h
[edit]
[-] memblock.h
[edit]
[-] if_tun.h
[edit]
[+]
extcon
[-] dmi.h
[edit]
[-] union_find.h
[edit]
[-] page_idle.h
[edit]
[-] page_reporting.h
[edit]
[-] openvswitch.h
[edit]
[-] if_eql.h
[edit]
[-] cgroup.h
[edit]
[-] atm_tcp.h
[edit]
[-] pci-doe.h
[edit]
[-] nls.h
[edit]
[-] led-lm3530.h
[edit]
[-] iversion.h
[edit]
[-] kmemleak.h
[edit]
[-] rhashtable.h
[edit]
[-] tsacct_kern.h
[edit]
[-] coresight-stm.h
[edit]
[-] smscphy.h
[edit]
[-] smc911x.h
[edit]
[-] watchdog.h
[edit]
[-] kcov.h
[edit]
[-] dm-region-hash.h
[edit]
[-] sysrq.h
[edit]
[-] wmi.h
[edit]
[-] clk.h
[edit]
[-] bitmap.h
[edit]
[-] smp.h
[edit]
[-] hashtable.h
[edit]
[-] adreno-smmu-priv.h
[edit]
[-] videodev2.h
[edit]
[-] taskstats_kern.h
[edit]
[-] errname.h
[edit]
[-] array_size.h
[edit]
[-] objtool_types.h
[edit]
[-] if_team.h
[edit]
[+]
io_uring
[-] device-mapper.h
[edit]
[-] blk_types.h
[edit]
[-] async.h
[edit]
[-] audit.h
[edit]
[-] blk-mq.h
[edit]
[-] damon.h
[edit]
[+]
power
[-] vmw_vmci_defs.h
[edit]
[-] acpi_pmtmr.h
[edit]
[-] pldmfw.h
[edit]
[-] journal-head.h
[edit]
[-] swapops.h
[edit]
[-] ipmi.h
[edit]
[-] kref_api.h
[edit]
[-] netfilter_ipv6.h
[edit]
[-] nfs3.h
[edit]
[-] padata.h
[edit]
[-] cred.h
[edit]
[-] syscalls.h
[edit]
[-] srcu.h
[edit]
[-] ntb_transport.h
[edit]
[-] apm_bios.h
[edit]
[-] efi.h
[edit]
[-] elf.h
[edit]
[-] ntb.h
[edit]
[-] lsm_hooks.h
[edit]
[-] altera_uart.h
[edit]
[-] uio.h
[edit]
[-] nubus.h
[edit]
[-] jhash.h
[edit]
[-] iommufd.h
[edit]
[-] align.h
[edit]
[-] fsnotify_backend.h
[edit]
[-] screen_info.h
[edit]
[-] devfreq.h
[edit]
[-] synclink.h
[edit]
[-] vmpressure.h
[edit]
[-] spinlock_types_raw.h
[edit]
[-] rcutiny.h
[edit]
[-] kexec.h
[edit]
[-] netlink.h
[edit]
[-] xxhash.h
[edit]
[-] unroll.h
[edit]
[-] scmi_protocol.h
[edit]
[-] srcutree.h
[edit]
[-] stm.h
[edit]
[-] utsname.h
[edit]
[-] ring_buffer.h
[edit]
[-] pm_wakeup.h
[edit]
[-] initrd.h
[edit]
[-] dma-direct.h
[edit]
[-] micrel_phy.h
[edit]
[-] latencytop.h
[edit]
[-] phonet.h
[edit]
[-] mv643xx_i2c.h
[edit]
[-] packing.h
[edit]
[-] lcd.h
[edit]
[-] tpm.h
[edit]
[-] dm-io.h
[edit]
[-] dqblk_v2.h
[edit]
[-] local_lock.h
[edit]
[-] of_reserved_mem.h
[edit]
[-] host1x_context_bus.h
[edit]
[-] sdb.h
[edit]
[-] path.h
[edit]
[-] async_tx.h
[edit]
[-] rslib.h
[edit]
[-] limits.h
[edit]
[-] shdma-base.h
[edit]
[-] cb710.h
[edit]
[-] hardirq.h
[edit]
[-] fsi-sbefifo.h
[edit]
[-] group_cpus.h
[edit]
[-] hid-over-i2c.h
[edit]
[-] nodemask.h
[edit]
[-] of_address.h
[edit]
[-] posix_acl_xattr.h
[edit]
[-] atomic.h
[edit]
[-] find.h
[edit]
[-] mpls_iptunnel.h
[edit]
[+]
platform_data
[-] compaction.h
[edit]
[-] eeprom_93cx6.h
[edit]
[-] zorro.h
[edit]
[-] timb_dma.h
[edit]
[-] interval_tree_generic.h
[edit]
[-] pda_power.h
[edit]
[-] kobject_api.h
[edit]
[-] lru_cache.h
[edit]
[-] libata.h
[edit]
[-] earlycpio.h
[edit]
[-] debug_locks.h
[edit]
[-] maple.h
[edit]
[-] cpuidle.h
[edit]
[-] fs_types.h
[edit]
[+]
firmware
[-] ksm.h
[edit]
[-] backlight.h
[edit]
[-] pagevec.h
[edit]
[-] goldfish.h
[edit]
[-] mpls.h
[edit]
[-] connector.h
[edit]
[-] instrumentation.h
[edit]
[-] zswap.h
[edit]
[-] fs_context.h
[edit]
[-] gpio_keys.h
[edit]
[-] qnx6_fs.h
[edit]
[-] sunxi-rsb.h
[edit]
[-] msg.h
[edit]
[-] intel_rapl.h
[edit]
[-] surface_acpi_notify.h
[edit]
[-] bpf_mprog.h
[edit]
[-] eeprom_93xx46.h
[edit]
[-] khugepaged.h
[edit]
[-] cuda.h
[edit]
[-] hmm.h
[edit]
[-] hil_mlc.h
[edit]
[-] pm-trace.h
[edit]
[-] intel_tpmi.h
[edit]
[-] preempt.h
[edit]
[-] zlib.h
[edit]
[-] dma-fence-unwrap.h
[edit]
[-] container_of.h
[edit]
[-] ns_common.h
[edit]
[-] pl320-ipc.h
[edit]
[-] pti.h
[edit]
[-] eventfd.h
[edit]
[-] pkeys.h
[edit]
[-] leds.h
[edit]
[-] fd.h
[edit]
[-] irqflags.h
[edit]
[-] nvram.h
[edit]
[-] trace_clock.h
[edit]
[-] tboot.h
[edit]
[-] unicode.h
[edit]
[-] irqdomain_defs.h
[edit]
[-] sched_clock.h
[edit]
[-] seccomp.h
[edit]
[-] quotaops.h
[edit]
[-] cfi_types.h
[edit]
[-] firmware-map.h
[edit]
[-] vermagic.h
[edit]
[-] uaccess.h
[edit]
[-] sm501-regs.h
[edit]
[-] hid-roccat.h
[edit]
[-] list_sort.h
[edit]
[-] linear_range.h
[edit]
[-] sram.h
[edit]
[+]
mux
[-] elfnote.h
[edit]
[-] anon_inodes.h
[edit]
[-] fs_api.h
[edit]
[-] page_ref.h
[edit]
[-] tracehook.h
[edit]
[+]
atomic
[-] rmap.h
[edit]
[-] mpage.h
[edit]
[-] if_ether.h
[edit]
[-] instruction_pointer.h
[edit]
[-] davinci_emac.h
[edit]
[-] pci_ids.h
[edit]
[-] ethtool_netlink.h
[edit]
[-] virtio_pci_legacy.h
[edit]
[-] cleanup.h
[edit]
[-] mii_timestamper.h
[edit]
[-] dim.h
[edit]
[-] efs_vh.h
[edit]
[-] bio-integrity.h
[edit]
[-] parser.h
[edit]
[-] refcount_api.h
[edit]
[-] vga_switcheroo.h
[edit]
[-] reset-controller.h
[edit]
[-] average.h
[edit]
[-] pm_wakeirq.h
[edit]
[-] crc8.h
[edit]
[-] trace_seq.h
[edit]
[-] of_dma.h
[edit]
[-] fixp-arith.h
[edit]
[-] bpf_verifier.h
[edit]
[-] ptr_ring.h
[edit]
[-] cma.h
[edit]
[-] drbd_genl.h
[edit]
[-] nvme-rdma.h
[edit]
[-] ftrace_irq.h
[edit]
[-] sh_timer.h
[edit]
[-] pmu.h
[edit]
[-] writeback.h
[edit]
[-] i2c.h
[edit]
[-] bits.h
[edit]
[-] inetdevice.h
[edit]
[-] mmzone.h
[edit]
[-] bcd.h
[edit]
[-] zstd_lib.h
[edit]
[-] blk-crypto-profile.h
[edit]
[-] fsi.h
[edit]
[-] uacce.h
[edit]
[-] elf-fdpic.h
[edit]
[-] fsi-occ.h
[edit]
[+]
surface_aggregator
[-] yam.h
[edit]
[-] set_memory.h
[edit]
[-] timekeeping.h
[edit]
[-] prmt.h
[edit]
[-] dev_printk.h
[edit]
[-] extcon-provider.h
[edit]
[-] selection.h
[edit]
[-] smsc911x.h
[edit]
[-] uts.h
[edit]
[+]
spi
[-] pxa168_eth.h
[edit]
[-] aperture.h
[edit]
[-] leds-lp3944.h
[edit]
[-] serial_s3c.h
[edit]
[-] mv643xx_eth.h
[edit]
[-] ihex.h
[edit]
[-] hugetlb.h
[edit]
[-] toshiba.h
[edit]
[-] lsm_audit.h
[edit]
[-] virtio_byteorder.h
[edit]
[-] console_struct.h
[edit]
[-] if_bridge.h
[edit]
[-] bitrev.h
[edit]
[-] vm_event_item.h
[edit]
[-] statfs.h
[edit]
[-] clocksource.h
[edit]
[-] parport.h
[edit]
[-] fscrypt.h
[edit]
[-] cpuidle_haltpoll.h
[edit]
[-] textsearch_fsm.h
[edit]
[-] fcntl.h
[edit]
[-] build_bug.h
[edit]
[-] icmp.h
[edit]
[-] swiotlb.h
[edit]
[-] cciss_ioctl.h
[edit]
[-] smpboot.h
[edit]
[-] page_owner.h
[edit]
[-] leds-pca9532.h
[edit]
[-] zstd.h
[edit]
[-] ptrace.h
[edit]
[-] dlm.h
[edit]
[-] umh.h
[edit]
[-] glob.h
[edit]
[-] swapfile.h
[edit]
[-] blkdev.h
[edit]
[-] crc64.h
[edit]
[-] buffer_head.h
[edit]
[-] input.h
[edit]
[-] sys_soc.h
[edit]
[-] adb.h
[edit]
[-] atmel-ssc.h
[edit]
[-] efi-bgrt.h
[edit]
[-] greybus.h
[edit]
[-] lockdep.h
[edit]
[-] syslog.h
[edit]
[-] altera_jtaguart.h
[edit]
[-] stackprotector.h
[edit]
[-] err.h
[edit]
[-] powercap.h
[edit]
[-] virtio_console.h
[edit]
[-] psci.h
[edit]
[-] ctype.h
[edit]
[-] pktcdvd.h
[edit]
[-] usb.h
[edit]
[-] cache.h
[edit]
[-] stringify.h
[edit]
[-] virtio_config.h
[edit]
[-] bcm47xx_nvram.h
[edit]
[-] socket.h
[edit]
[-] adfs_fs.h
[edit]
[-] stat.h
[edit]
[-] hidraw.h
[edit]
[-] mmdebug.h
[edit]
[-] ethtool.h
[edit]
[-] refcount.h
[edit]
[-] console.h
[edit]
[-] static_key.h
[edit]
[-] sctp.h
[edit]
[-] pnfs_osd_xdr.h
[edit]
[-] irqnr.h
[edit]
[-] slab.h
[edit]
[-] fortify-string.h
[edit]
[-] cfag12864b.h
[edit]
[-] rwlock_types.h
[edit]
[-] extable.h
[edit]
[-] rcuwait_api.h
[edit]
[-] interrupt.h
[edit]
[-] irqbypass.h
[edit]
[-] swap_cgroup.h
[edit]
[-] irqchip.h
[edit]
[-] kvm_para.h
[edit]
[-] dm-dirty-log.h
[edit]
[-] if_pppox.h
[edit]
[-] iommu.h
[edit]
[-] nvme.h
[edit]
[-] lcm.h
[edit]
[-] sprintf.h
[edit]
[-] io-mapping.h
[edit]
[-] uprobes.h
[edit]
[-] module_signature.h
[edit]
[-] component.h
[edit]
[-] resource_ext.h
[edit]
[-] rwlock.h
[edit]
[-] clkdev.h
[edit]
[-] serial_core.h
[edit]
[-] gpio-pxa.h
[edit]
[-] pr.h
[edit]
[-] of_gpio.h
[edit]
[-] pstore_blk.h
[edit]
[-] pruss_driver.h
[edit]
[-] soundcard.h
[edit]
[-] coredump.h
[edit]
[-] nvmem-provider.h
[edit]
[-] asn1_encoder.h
[edit]
[-] memregion.h
[edit]
[-] zpool.h
[edit]
[-] kfence.h
[edit]
[-] int_log.h
[edit]
[-] list_lru.h
[edit]
[-] ecryptfs.h
[edit]
[-] dqblk_qtree.h
[edit]
[-] cpumask_api.h
[edit]
[-] kmsan.h
[edit]
[-] if_rmnet.h
[edit]
[-] device.h
[edit]
[-] digsig.h
[edit]
[-] kernel-page-flags.h
[edit]
[-] cacheflush.h
[edit]
[-] acpi.h
[edit]
[-] w1-gpio.h
[edit]
[+]
greybus
[-] auxiliary_bus.h
[edit]
[-] userfaultfd_k.h
[edit]
[-] sysctl.h
[edit]
[-] bpf-cgroup.h
[edit]
[-] gfp_api.h
[edit]
[-] elfcore-compat.h
[edit]
[-] pci-ats.h
[edit]
[-] linkmode.h
[edit]
[-] cpuhotplug.h
[edit]
[-] bpf_mem_alloc.h
[edit]
[-] page-flags-layout.h
[edit]
[-] dynamic_queue_limits.h
[edit]
[-] ptp_classify.h
[edit]
[-] i8253.h
[edit]
[-] lapb.h
[edit]
[-] led-class-flash.h
[edit]
[-] dma-fence-array.h
[edit]
[-] htcpld.h
[edit]
[-] switchtec.h
[edit]
[-] psi_types.h
[edit]
[-] sh_dma.h
[edit]
[-] msi.h
[edit]
[-] fsl-diu-fb.h
[edit]
[-] rethook.h
[edit]
[-] perf_regs.h
[edit]
[+]
amba
[-] xattr.h
[edit]
[-] acpi_mdio.h
[edit]
[-] kvm_dirty_ring.h
[edit]
[-] kref.h
[edit]
[-] kmsan_types.h
[edit]
[-] auto_fs.h
[edit]
[-] bcm47xx_sprom.h
[edit]
[-] signalfd.h
[edit]
[-] kobj_map.h
[edit]
[-] sync_file.h
[edit]
[-] notifier.h
[edit]
[-] ks8851_mll.h
[edit]
[-] delayed_call.h
[edit]
[-] tee_core.h
[edit]
[-] swait.h
[edit]
[-] projid.h
[edit]
[-] pwm.h
[edit]
[-] cgroup-defs.h
[edit]
[-] bottom_half.h
[edit]
[-] key.h
[edit]
[-] virtio_net.h
[edit]
[-] iopoll.h
[edit]
[-] bcm963xx_tag.h
[edit]
[-] kernel_stat.h
[edit]
[-] cpu_cooling.h
[edit]
[-] syscalls_api.h
[edit]
[-] mempolicy.h
[edit]
[-] fprobe.h
[edit]
[-] linkage.h
[edit]
[-] win_minmax.h
[edit]
[-] balloon_compaction.h
[edit]
[-] const.h
[edit]
[-] vgaarb.h
[edit]
[-] rwlock_api_smp.h
[edit]
[-] ism.h
[edit]
[+]
rpmsg
[-] mm.h
[edit]
[-] objtool.h
[edit]
[-] timex.h
[edit]
[-] timecounter.h
[edit]
[-] time_namespace.h
[edit]
[-] nsproxy.h
[edit]
[-] iova_bitmap.h
[edit]
[-] polynomial.h
[edit]
[-] sm501.h
[edit]
[-] kbuild.h
[edit]
[-] key-type.h
[edit]
[-] timer.h
[edit]
[-] iova.h
[edit]
[-] seg6_local.h
[edit]
[-] vtime.h
[edit]
[-] rbtree_augmented.h
[edit]
[-] panic.h
[edit]
[-] llc.h
[edit]
[-] cpu_rmap.h
[edit]
[-] amd-iommu.h
[edit]
[-] phy.h
[edit]
[-] fs_enet_pd.h
[edit]
[+]
iio
[-] wl12xx.h
[edit]
[-] alcor_pci.h
[edit]
[-] stop_machine.h
[edit]
[-] hp_sdc.h
[edit]
[-] lwq.h
[edit]
[-] bpf.h
[edit]
[-] pim.h
[edit]
[-] vt_buffer.h
[edit]
[-] raid_class.h
[edit]
[-] shmem_fs.h
[edit]
[+]
netfilter_bridge
[-] types.h
[edit]
[-] of_net.h
[edit]
[+]
mtd
[-] bpf_types.h
[edit]
[-] siphash.h
[edit]
[-] inotify.h
[edit]
[-] fips.h
[edit]
[-] devpts_fs.h
[edit]
[-] ucs2_string.h
[edit]
[-] pci-p2pdma.h
[edit]
[-] panic_notifier.h
[edit]
[-] uio_driver.h
[edit]
[-] crc-ccitt.h
[edit]
[-] zsmalloc.h
[edit]
[-] pe.h
[edit]
[-] sed-opal.h
[edit]
[-] shrinker.h
[edit]
[-] c2port.h
[edit]
[-] poll.h
[edit]
[-] genl_magic_func.h
[edit]
[-] ratelimit.h
[edit]
[-] pps_kernel.h
[edit]
[-] textsearch.h
[edit]
[-] ieee802154.h
[edit]
[-] reciprocal_div.h
[edit]
[-] trace_recursion.h
[edit]
[-] mISDNhw.h
[edit]
[-] reboot.h
[edit]
[-] ccp.h
[edit]
[-] btree-type.h
[edit]
[-] btrfs.h
[edit]
[-] posix-timers.h
[edit]
[-] fault-inject-usercopy.h
[edit]
[-] kasan.h
[edit]
[-] if_arp.h
[edit]
[-] sort.h
[edit]
[-] gpio.h
[edit]
[-] fs_stack.h
[edit]
[-] dm-kcopyd.h
[edit]
[-] crash_dump.h
[edit]
[-] start_kernel.h
[edit]
[-] sonypi.h
[edit]
[-] spinlock_types_up.h
[edit]
[-] cdev.h
[edit]
[-] w1.h
[edit]
[-] slimbus.h
[edit]
[-] pci-acpi.h
[edit]
[-] percpu-defs.h
[edit]
[-] workqueue_types.h
[edit]
[-] assoc_array.h
[edit]
[-] usb_usual.h
[edit]
[-] linux_logo.h
[edit]
[-] z2_battery.h
[edit]
[-] math.h
[edit]
[-] agp_backend.h
[edit]
[-] kdev_t.h
[edit]
[-] user-return-notifier.h
[edit]
[-] slab_def.h
[edit]
[-] quota.h
[edit]
[-] of_irq.h
[edit]
[-] dmaengine.h
[edit]
[-] mdio.h
[edit]
[+]
sunrpc
[-] errno.h
[edit]
[-] fec.h
[edit]
[-] drbd_config.h
[edit]
[-] kernel_read_file.h
[edit]
[-] u64_stats_sync_api.h
[edit]
[+]
pinctrl
[-] kfifo.h
[edit]
[-] capability.h
[edit]
[-] bpf-cgroup-defs.h
[edit]
[-] highmem.h
[edit]
[-] mutex.h
[edit]
[-] ipack.h
[edit]
[-] timer_types.h
[edit]
[-] rcu_segcblist.h
[edit]
[-] seqlock.h
[edit]
[-] bch.h
[edit]
[-] hil.h
[edit]
[-] ptp_clock_kernel.h
[edit]
[-] arm_ffa.h
[edit]
[+]
mlx4
[-] hyperv.h
[edit]
[-] kasan-checks.h
[edit]
[-] plist.h
[edit]
[-] pipe_fs_i.h
[edit]
[-] firewire.h
[edit]
[-] ima.h
[edit]
[-] if_tap.h
[edit]
[-] coresight.h
[edit]
[-] sed-opal-key.h
[edit]
[-] property.h
[edit]
[-] net_tstamp.h
[edit]
[+]
soc
[-] nfs_ssc.h
[edit]
[-] nvme-keyring.h
[edit]
[-] hid.h
[edit]
[-] netfilter_ipv4.h
[edit]
[-] stddef.h
[edit]
[-] hid-sensor-ids.h
[edit]
[-] intel-ish-client-if.h
[edit]
[-] kobject.h
[edit]
[-] psi.h
[edit]
[-] cpu_smt.h
[edit]
[-] iosys-map.h
[edit]
[-] ext2_fs.h
[edit]
[-] acpi_dma.h
[edit]
[-] btf_ids.h
[edit]
[-] mvebu-pmsu.h
[edit]
[-] dma-fence.h
[edit]
[-] of_iommu.h
[edit]
[-] kvm_types.h
[edit]
[-] fb.h
[edit]
[-] coresight-pmu.h
[edit]
[-] svga.h
[edit]
[-] mei_aux.h
[edit]
[+]
reset
[-] swait_api.h
[edit]
[-] vme.h
[edit]
[-] remoteproc.h
[edit]
[-] pstore_zone.h
[edit]
[-] cpu.h
[edit]
[-] i8042.h
[edit]
[-] vmw_vmci_api.h
[edit]
[-] atmel_pdc.h
[edit]
[-] platform_profile.h
[edit]
[-] asn1_ber_bytecode.h
[edit]
[-] nmi.h
[edit]
[-] rcupdate_wait.h
[edit]
[+]
qat
[-] fw_table.h
[edit]
[-] seg6_genl.h
[edit]
[-] device_cgroup.h
[edit]
[-] tty_port.h
[edit]
[-] tcp.h
[edit]
[-] irqdesc.h
[edit]
[-] edac.h
[edit]
[-] coda.h
[edit]
[-] fsnotify.h
[edit]
[-] pci.h
[edit]
[-] seqlock_api.h
[edit]
[-] timerqueue.h
[edit]
[-] mmu_notifier.h
[edit]
[-] msdos_fs.h
[edit]
[+]
qed
[-] virtio.h
[edit]
[-] pmbus.h
[edit]
[-] percpu_counter.h
[edit]
[-] hid_bpf.h
[edit]
[-] dmapool.h
[edit]
[-] time64.h
[edit]
[-] sbitmap.h
[edit]
[-] fbcon.h
[edit]
[-] pci-dma-compat.h
[edit]
[-] iscsi_ibft.h
[edit]
[-] pfn_t.h
[edit]
[-] serial_bcm63xx.h
[edit]
[-] context_tracking_state.h
[edit]
[-] cpuhplock.h
[edit]
[-] seg6_iptunnel.h
[edit]
[-] xz.h
[edit]
[-] fscache-cache.h
[edit]
[-] apple-gmux.h
[edit]
[-] efi_embedded_fw.h
[edit]
[-] io-pgtable.h
[edit]
[-] nfs_iostat.h
[edit]
[-] timerfd.h
[edit]
[-] hwmon-vid.h
[edit]
[-] hid-sensor-hub.h
[edit]
[-] zutil.h
[edit]
[-] jump_label.h
[edit]
[-] atm.h
[edit]
[-] sync_core.h
[edit]
[-] rculist_bl.h
[edit]
[-] ipv6.h
[edit]
[-] hrtimer.h
[edit]
[-] syscall_user_dispatch.h
[edit]
[-] sunserialcore.h
[edit]
[+]
clk
[-] blk-cgroup.h
[edit]
[-] atmel-isc-media.h
[edit]
[-] msdos_partition.h
[edit]
[-] skmsg.h
[edit]
[-] devfreq-event.h
[edit]
[-] ti_wilink_st.h
[edit]
[-] lockdep_types.h
[edit]
[-] usermode_driver.h
[edit]
[-] tpm_eventlog.h
[edit]
[-] hdmi.h
[edit]
[-] futex.h
[edit]
[-] pfn.h
[edit]
[-] ras.h
[edit]
[-] crc16.h
[edit]
[-] kernfs.h
[edit]
[-] serial.h
[edit]
[-] hippidevice.h
[edit]
[-] lp.h
[edit]
[-] ptp_mock.h
[edit]
[-] bsg.h
[edit]
[-] processor.h
[edit]
[-] apm-emulation.h
[edit]
[+]
mailbox
[-] armada-37xx-rwtm-mailbox.h
[edit]
[-] patchkey.h
[edit]
[-] freelist.h
[edit]
[-] serdev.h
[edit]
[-] mmap_lock.h
[edit]
[-] spinlock.h
[edit]
[-] fault-inject.h
[edit]
[-] msi_api.h
[edit]
[-] sound.h
[edit]
[-] vhost_iotlb.h
[edit]
[-] proc_ns.h
[edit]
[-] crc-itu-t.h
[edit]
[-] delay.h
[edit]
[-] shm.h
[edit]
[+]
mfd
[-] power_supply.h
[edit]
[-] platform_device.h
[edit]
[-] rtmutex.h
[edit]
[-] ipc.h
[edit]
[-] mv643xx.h
[edit]
[-] maple_tree.h
[edit]
[-] page_table_check.h
[edit]
[-] cacheinfo.h
[edit]
[-] rfkill.h
[edit]
[-] rcuref.h
[edit]
[-] cpufeature.h
[edit]
[-] mmiotrace.h
[edit]
[-] semaphore.h
[edit]
[-] wkup_m3_ipc.h
[edit]
[-] pagemap.h
[edit]
[-] mailbox_client.h
[edit]
[-] sw842.h
[edit]
[-] sockptr.h
[edit]
[-] dma-heap.h
[edit]
[-] leds-bd2802.h
[edit]
[-] intel_th.h
[edit]
[-] auxvec.h
[edit]
[-] imx-media.h
[edit]
[-] thread_info.h
[edit]
[-] serial_max3100.h
[edit]
[-] mroute_base.h
[edit]
[-] cgroup_api.h
[edit]
[-] vfio_pci_core.h
[edit]
[-] hte.h
[edit]
[+]
can
[-] i2c-smbus.h
[edit]
[-] jump_label_ratelimit.h
[edit]
[-] energy_model.h
[edit]
[-] pm_runtime.h
[edit]
[-] static_call.h
[edit]
[-] genalloc.h
[edit]
[-] fddidevice.h
[edit]
[-] fsldma.h
[edit]
[-] poison.h
[edit]
[+]
sched
[-] fs_struct.h
[edit]
[-] hw_random.h
[edit]
[-] getcpu.h
[edit]
[-] hw_breakpoint.h
[edit]
[-] zstd_errors.h
[edit]
[-] fsverity.h
[edit]
[-] dax.h
[edit]
[-] in.h
[edit]
[-] if_phonet.h
[edit]
[-] livepatch.h
[edit]
[-] keyboard.h
[edit]
[-] drbd_limits.h
[edit]
[-] virtio_ring.h
[edit]
[-] nfs_fs_i.h
[edit]
[-] crc32poly.h
[edit]
[-] udp.h
[edit]
[-] signal.h
[edit]
[-] iocontext.h
[edit]
[-] nitro_enclaves.h
[edit]
[+]
phy
[-] lantiq.h
[edit]
[-] compiler.h
[edit]
[+]
ssb
[-] osq_lock.h
[edit]
[-] hrtimer_defs.h
[edit]
[-] pci-ep-cfs.h
[edit]
[-] irqreturn.h
[edit]
[-] blockgroup_lock.h
[edit]
[-] wireless.h
[edit]
[-] vfs.h
[edit]
[-] init.h
[edit]
[-] pci-tph.h
[edit]
[-] dm-bufio.h
[edit]
[-] irq_work.h
[edit]
[-] i2c-algo-bit.h
[edit]
[-] sungem_phy.h
[edit]
[-] mISDNdsp.h
[edit]
[-] hid-debug.h
[edit]
[-] cs5535.h
[edit]
[-] of.h
[edit]
[-] dma-direction.h
[edit]
[-] rculist_nulls.h
[edit]
[+]
i3c
[-] tegra-icc.h
[edit]
[-] error-injection.h
[edit]
[-] clocksource_ids.h
[edit]
[+]
pcs
[-] file.h
[edit]
[-] overflow.h
[edit]
[-] wait_bit.h
[edit]
[+]
rtc
[-] timb_gpio.h
[edit]
[-] sh_intc.h
[edit]
[-] sysv_fs.h
[edit]
[-] task_io_accounting_ops.h
[edit]
[-] kbd_kern.h
[edit]
[-] netdev_features.h
[edit]
[-] dtpm.h
[edit]
[-] cper.h
[edit]
[-] if_hsr.h
[edit]
[-] rtsx_usb.h
[edit]
[-] irqdomain.h
[edit]
[-] string.h
[edit]
[-] rwbase_rt.h
[edit]
[-] percpu-rwsem.h
[edit]
[-] context_tracking.h
[edit]
[-] ioremap.h
[edit]
[-] memory_hotplug.h
[edit]
[-] pci-epc.h
[edit]
[-] io_uring_types.h
[edit]
[-] alarmtimer.h
[edit]
[+]
raid
[-] acct.h
[edit]
[-] page_counter.h
[edit]
[-] page_ext.h
[edit]
[-] perf_event.h
[edit]
[-] bsearch.h
[edit]
[-] dqblk_v1.h
[edit]
[-] pageblock-flags.h
[edit]
[-] mii.h
[edit]
[-] page-isolation.h
[edit]
[-] kernelcapi.h
[edit]
[-] elf-randomize.h
[edit]
[-] resctrl.h
[edit]
[-] fs_pin.h
[edit]
[-] crc32c.h
[edit]
[-] smc91x.h
[edit]
[+]
lockd
[-] thunderbolt.h
[edit]
[-] kvm_irqfd.h
[edit]
[-] hiddev.h
[edit]
[-] pid_namespace.h
[edit]
[-] kallsyms.h
[edit]
[-] inet.h
[edit]
[-] sfp.h
[edit]
[-] tracepoint.h
[edit]
[-] serio.h
[edit]
[-] fs_parser.h
[edit]
[-] completion.h
[edit]
[-] moduleloader.h
[edit]
[-] acpi_iort.h
[edit]
[+]
netfilter_ipv6
[-] dm9000.h
[edit]
[-] vexpress.h
[edit]
[-] task_io_accounting.h
[edit]
[-] io.h
[edit]
[-] phylink.h
[edit]
[-] fsl_hypervisor.h
[edit]
[-] swab.h
[edit]
[-] hdlc.h
[edit]
[-] resume_user_mode.h
[edit]
[-] microchipphy.h
[edit]
[-] iomap.h
[edit]
[-] relay.h
[edit]
[-] bitops.h
[edit]
[-] of_clk.h
[edit]
[-] securebits.h
[edit]
[-] part_stat.h
[edit]
[-] tee_drv.h
[edit]
[-] dw_apb_timer.h
[edit]
[-] asn1.h
[edit]
[-] nvme-fc.h
[edit]
[-] profile.h
[edit]
[-] tfrc.h
[edit]
[-] tty.h
[edit]
[-] vmstat.h
[edit]
[-] tpm_command.h
[edit]
[-] objagg.h
[edit]
[-] mutex_types.h
[edit]
[-] interconnect-provider.h
[edit]
[-] pm_qos.h
[edit]
[-] pagewalk.h
[edit]
[-] iommu-helper.h
[edit]
[-] vlynq.h
[edit]
[+]
dma
[-] btf.h
[edit]
[-] mcb.h
[edit]
[-] rbtree_types.h
[edit]
[-] pci_hotplug.h
[edit]
[-] mhi.h
[edit]
[-] kprobes.h
[edit]
[-] of_pdt.h
[edit]
[-] nfs.h
[edit]
[-] hugetlb_cgroup.h
[edit]
[+]
fpga
[-] mutex_api.h
[edit]
[-] sizes.h
[edit]
[-] bootconfig.h
[edit]
[+]
unaligned
[-] pch_dma.h
[edit]
[-] crypto.h
[edit]
[-] rh_kabi.h
[edit]
[-] fanotify.h
[edit]
[-] units.h
[edit]
[-] f2fs_fs.h
[edit]
[-] dnotify.h
[edit]
[-] rbtree_latch.h
[edit]
[-] compat.h
[edit]
[-] irq_poll.h
[edit]
[-] klist.h
[edit]
[-] lsm_hook_defs.h
[edit]
[-] ramfs.h
[edit]
[-] nfs4.h
[edit]
[-] acpi_amd_wbrf.h
[edit]
[-] blkpg.h
[edit]
[-] audit_arch.h
[edit]
[-] kasan-tags.h
[edit]
[-] agpgart.h
[edit]
[-] compiler-clang.h
[edit]
[-] splice.h
[edit]
[-] crash_core.h
[edit]
[-] vmcore_info.h
[edit]
[-] arch_topology.h
[edit]
[-] mm_types_task.h
[edit]
[-] compiler-version.h
[edit]
[-] binfmts.h
[edit]
[+]
bcma
[-] timekeeper_internal.h
[edit]
[-] syscore_ops.h
[edit]
[-] kobject_ns.h
[edit]
[-] drbd.h
[edit]
[-] ioport.h
[edit]
[-] idle_inject.h
[edit]
[-] ks8842.h
[edit]
[-] bsg-lib.h
[edit]
[-] dcache.h
[edit]
[-] rio.h
[edit]
[-] net.h
[edit]
[-] crc4.h
[edit]
[-] pci-ecam.h
[edit]
[-] rcupdate_trace.h
[edit]
[-] dccp.h
[edit]
[+]
netfilter_arp
[-] memory-tiers.h
[edit]
[+]
input
[-] ts-nbus.h
[edit]
[-] spinlock_up.h
[edit]
[-] kvm_host.h
[edit]
[-] omap-iommu.h
[edit]
[-] vringh.h
[edit]
[-] serial_sci.h
[edit]
[-] pm_clock.h
[edit]
[-] seg6_hmac.h
[edit]
[-] netfilter_defs.h
[edit]
[-] mbcache.h
[edit]
[-] init_syscalls.h
[edit]
[-] cxl_err.h
[edit]
[-] u64_stats_sync.h
[edit]
[-] memremap.h
[edit]
[-] ptdump.h
[edit]
[-] hid-over-spi.h
[edit]
[-] jz4780-nemc.h
[edit]
[-] time32.h
[edit]
[-] mdio-bitbang.h
[edit]
[-] psp-sev.h
[edit]
[-] fdtable.h
[edit]
[-] suspend.h
[edit]
[-] ktime_api.h
[edit]
[-] atmdev.h
[edit]
[-] bcm963xx_nvram.h
[edit]
[-] fiemap.h
[edit]
[-] fsl_ifc.h
[edit]
[-] asn1_decoder.h
[edit]
[-] netfilter_netdev.h
[edit]
[-] resource.h
[edit]
[-] cpumask.h
[edit]
[+]
gpio
[-] hidden.h
[edit]
[-] clk-provider.h
[edit]
[-] elfcore.h
[edit]
[-] bpfptr.h
[edit]
[-] bpf_local_storage.h
[edit]
[-] errseq.h
[edit]
[+]
perf
[-] ppp_defs.h
[edit]
[-] marvell_phy.h
[edit]
[-] psp-tee.h
[edit]
[-] livepatch_sched.h
[edit]
[-] rw_hint.h
[edit]
[-] pnp.h
[edit]
[-] kcore.h
[edit]
[-] arm-cci.h
[edit]
[-] rio_regs.h
[edit]
[-] init_ohci1394_dma.h
[edit]
[-] moduleparam.h
[edit]
[-] backing-dev.h
[edit]
[-] export.h
[edit]
[-] highuid.h
[edit]
[-] bpf-netns.h
[edit]
[+]
hsi
[-] fcdevice.h
[edit]
[-] blktrace_api.h
[edit]
[-] rcu_notifier.h
[edit]
[-] hypervisor.h
[edit]
[-] falloc.h
[edit]
[+]
net
[-] reboot-mode.h
[edit]
[-] container.h
[edit]
[-] dio.h
[edit]
[-] kcsan-checks.h
[edit]
[-] nvmem-consumer.h
[edit]
[-] kdebug.h
[edit]
[-] softirq.h
[edit]
[-] personality.h
[edit]
[-] nsc_gpio.h
[edit]
[-] rtsx_common.h
[edit]
[-] task_work.h
[edit]
[-] sched.h
[edit]
[-] litex.h
[edit]
[-] secretmem.h
[edit]
[-] nfs_xdr.h
[edit]
[-] ptp_pch.h
[edit]
[-] pgtable.h
[edit]
[-] sysfs.h
[edit]
[-] hrtimer_api.h
[edit]
[-] pseudo_fs.h
[edit]
[-] mempool.h
[edit]
[-] via_i2c.h
[edit]
[-] pxa2xx_ssp.h
[edit]
[-] virtio_pci_modern.h
[edit]
[-] log2.h
[edit]
[-] highmem-internal.h
[edit]
[-] host1x.h
[edit]
[-] mc146818rtc.h
[edit]
[-] dmar.h
[edit]
[-] rcuwait.h
[edit]
[-] assoc_array_priv.h
[edit]
[-] vbox_utils.h
[edit]
[-] scx200_gpio.h
[edit]
[-] timeriomem-rng.h
[edit]
[-] sh_eth.h
[edit]
[-] counter_enum.h
[edit]
[-] memstick.h
[edit]
[-] torture.h
[edit]
[-] math64.h
[edit]
[-] blk-pm.h
[edit]
[-] kasan-enabled.h
[edit]
[-] intel_tcc.h
[edit]
[-] oid_registry.h
[edit]
[-] crc-t10dif.h
[edit]
[-] ref_tracker.h
[edit]
[-] rwsem.h
[edit]
[-] bvec.h
[edit]
[-] gnss.h
[edit]
[-] ipc_namespace.h
[edit]
[-] ndctl.h
[edit]
[+]
byteorder
[-] cgroup_refcnt.h
[edit]
[-] compiler_types.h
[edit]
[-] enclosure.h
[edit]
[-] stackleak.h
[edit]
[-] perf_event_api.h
[edit]
[-] via-gpio.h
[edit]
[+]
ceph
[-] kern_levels.h
[edit]
[-] cpufreq.h
[edit]
[-] time.h
[edit]
[-] superhyway.h
[edit]
[+]
crush
[-] debugfs.h
[edit]
[-] scmi_imx_protocol.h
[edit]
[-] of_pci.h
[edit]
[-] hwmon.h
[edit]
[-] virtio_vsock.h
[edit]
[-] lzo.h
[edit]
[-] of_device.h
[edit]
[-] tty_driver.h
[edit]
[-] circ_buf.h
[edit]
[+]
netfilter_ipv4
[-] ieee80211.h
[edit]
[-] idr.h
[edit]
[-] mod_devicetable.h
[edit]
[-] tsm.h
[edit]
[-] cc_platform.h
[edit]
[-] integrity.h
[edit]
[-] omap-gpmc.h
[edit]
[-] mei_cl_bus.h
[edit]
[-] ptp_kvm.h
[edit]
[-] cpu_pm.h
[edit]
[-] mtio.h
[edit]
[-] irq_sim.h
[edit]
[+]
ulpi
[-] ptrace_api.h
[edit]
[-] rcu_sync.h
[edit]
[-] huge_mm.h
[edit]
[-] user_namespace.h
[edit]
[-] list_nulls.h
[edit]
[-] kcsan.h
[edit]
[-] prandom.h
[edit]
[+]
usb
[-] migrate_mode.h
[edit]
[-] btree.h
[edit]