code-intelligence.com/cifuzz@v0.40.0/third-party/minijail/syscall_filter.h (about)

     1  /* syscall_filter.h
     2   * Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
     3   * Use of this source code is governed by a BSD-style license that can be
     4   * found in the LICENSE file.
     5   *
     6   * Syscall filter functions.
     7   */
     8  
     9  #ifndef SYSCALL_FILTER_H
    10  #define SYSCALL_FILTER_H
    11  
    12  #include <stdbool.h>
    13  
    14  #include "bpf.h"
    15  
    16  #ifdef __cplusplus
    17  extern "C" {
    18  #endif
    19  
    20  struct filter_block {
    21  	struct sock_filter *instrs;
    22  	size_t len;
    23  
    24  	struct filter_block *next;
    25  	struct filter_block *last;
    26  	size_t total_len;
    27  };
    28  
    29  struct parser_state {
    30  	const char *filename;
    31  	size_t line_number;
    32  };
    33  
    34  enum block_action {
    35  	ACTION_RET_KILL = 0,
    36  	ACTION_RET_TRAP,
    37  	ACTION_RET_LOG,
    38  	ACTION_RET_KILL_PROCESS,
    39  };
    40  
    41  struct filter_options {
    42  	enum block_action action;
    43  	int allow_logging;
    44  	int allow_syscalls_for_logging;
    45  	bool allow_duplicate_syscalls;
    46  };
    47  
    48  struct bpf_labels;
    49  
    50  struct filter_block *compile_policy_line(struct parser_state *state, int nr,
    51  					 const char *policy_line,
    52  					 unsigned int label_id,
    53  					 struct bpf_labels *labels,
    54  					 enum block_action action);
    55  
    56  int compile_file(const char *filename, FILE *policy_file,
    57  		 struct filter_block *head, struct filter_block **arg_blocks,
    58  		 struct bpf_labels *labels,
    59  		 const struct filter_options *filteropts,
    60  		 struct parser_state **previous_syscalls,
    61  		 unsigned int include_level);
    62  
    63  int compile_filter(const char *filename, FILE *policy_file,
    64  		   struct sock_fprog *prog,
    65  		   const struct filter_options *filteropts);
    66  
    67  struct filter_block *new_filter_block(void);
    68  int flatten_block_list(struct filter_block *head, struct sock_filter *filter,
    69  		       size_t index, size_t cap);
    70  void free_block_list(struct filter_block *head);
    71  void free_previous_syscalls(struct parser_state **previous_syscalls);
    72  
    73  int seccomp_can_softfail(void);
    74  static inline bool allow_duplicate_syscalls(void)
    75  {
    76  #if defined(ALLOW_DUPLICATE_SYSCALLS)
    77  	return true;
    78  #endif
    79  	return false;
    80  }
    81  
    82  #ifdef __cplusplus
    83  }; /* extern "C" */
    84  #endif
    85  
    86  #endif /* SYSCALL_FILTER_H */