blob: 019f3f09485a404dfb1ec75a86995304f0b3d215 [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 Obese1a86892019-06-10 16:17:03 -040032enum block_action { ACTION_RET_KILL = 0, ACTION_RET_TRAP, ACTION_RET_LOG };
33
34struct filter_options {
35 enum block_action action;
36 int allow_logging;
37 int allow_syscalls_for_logging;
38};
39
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080040struct bpf_labels;
41
Luis Hector Chavez7624e712017-08-28 19:30:59 -070042struct filter_block *compile_policy_line(struct parser_state *state, int nr,
43 const char *policy_line,
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040044 unsigned int label_id,
45 struct bpf_labels *labels,
Jorge Lucangeli Obese1a86892019-06-10 16:17:03 -040046 enum block_action action);
47
Luis Hector Chavez7624e712017-08-28 19:30:59 -070048int compile_file(const char *filename, FILE *policy_file,
49 struct filter_block *head, struct filter_block **arg_blocks,
Jorge Lucangeli Obese1a86892019-06-10 16:17:03 -040050 struct bpf_labels *labels,
51 const struct filter_options *filteropts,
Jorge Lucangeli Obesbce4ccb2017-03-20 13:38:43 -040052 unsigned int include_level);
Jorge Lucangeli Obese1a86892019-06-10 16:17:03 -040053
Luis Hector Chavez7624e712017-08-28 19:30:59 -070054int compile_filter(const char *filename, FILE *policy_file,
Jorge Lucangeli Obese1a86892019-06-10 16:17:03 -040055 struct sock_fprog *prog,
56 const struct filter_options *filteropts);
Jorge Lucangeli Obesd4467262012-03-23 16:19:59 -070057
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040058struct filter_block *new_filter_block(void);
Jorge Lucangeli Obesd4467262012-03-23 16:19:59 -070059int flatten_block_list(struct filter_block *head, struct sock_filter *filter,
Jorge Lucangeli Obes565e9782016-08-05 11:03:19 -040060 size_t index, size_t cap);
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070061void free_block_list(struct filter_block *head);
62
Jorge Lucangeli Obes45932a52017-03-15 17:02:58 -040063int seccomp_can_softfail(void);
Jorge Lucangeli Obes7b2e29c2016-08-04 12:21:03 -040064
Jorge Lucangeli Obesa67bd6a2016-08-19 15:33:48 -040065#ifdef __cplusplus
66}; /* extern "C" */
67#endif
68
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070069#endif /* SYSCALL_FILTER_H */