blob: 737ef499de601f3dd6a0bec116c199ee59a4a3c6 [file] [log] [blame]
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -07001/* 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 "bpf.h"
13
Jorge Lucangeli Obesa67bd6a2016-08-19 15:33:48 -040014#ifdef __cplusplus
15extern "C" {
16#endif
17
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070018struct filter_block {
19 struct sock_filter *instrs;
20 size_t len;
21
22 struct filter_block *next;
23 struct filter_block *last;
24 size_t total_len;
25};
26
Luis Hector Chavez7624e712017-08-28 19:30:59 -070027struct parser_state {
28 const char *filename;
29 size_t line_number;
30};
31
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080032struct bpf_labels;
33
Luis Hector Chavez7624e712017-08-28 19:30:59 -070034struct filter_block *compile_policy_line(struct parser_state *state, int nr,
35 const char *policy_line,
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040036 unsigned int label_id,
37 struct bpf_labels *labels,
38 int do_ret_trap);
Luis Hector Chavez7624e712017-08-28 19:30:59 -070039int compile_file(const char *filename, FILE *policy_file,
40 struct filter_block *head, struct filter_block **arg_blocks,
41 struct bpf_labels *labels, int use_ret_trap, int allow_logging,
Jorge Lucangeli Obesbce4ccb2017-03-20 13:38:43 -040042 unsigned int include_level);
Luis Hector Chavez7624e712017-08-28 19:30:59 -070043int compile_filter(const char *filename, FILE *policy_file,
44 struct sock_fprog *prog, int do_ret_trap,
Jorge Lucangeli Obes713f6fb2016-10-03 13:03:25 -040045 int add_logging_syscalls);
Jorge Lucangeli Obesd4467262012-03-23 16:19:59 -070046
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040047struct filter_block *new_filter_block(void);
Jorge Lucangeli Obesd4467262012-03-23 16:19:59 -070048int flatten_block_list(struct filter_block *head, struct sock_filter *filter,
Jorge Lucangeli Obes565e9782016-08-05 11:03:19 -040049 size_t index, size_t cap);
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070050void free_block_list(struct filter_block *head);
51
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040052int seccomp_can_softfail(void);
Jorge Lucangeli Obes7b2e29c2016-08-04 12:21:03 -040053
Jorge Lucangeli Obesa67bd6a2016-08-19 15:33:48 -040054#ifdef __cplusplus
55}; /* extern "C" */
56#endif
57
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070058#endif /* SYSCALL_FILTER_H */