Tor 0.4.9.3-alpha-dev
Loading...
Searching...
No Matches
sandbox.h
Go to the documentation of this file.
1/* Copyright (c) 2001 Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5/* See LICENSE for licensing information */
6
7/**
8 * \file sandbox.h
9 * \brief Header file for sandbox.c.
10 **/
11
12#ifndef SANDBOX_H_
13#define SANDBOX_H_
14
15#include "orconfig.h"
16#include "lib/cc/torint.h"
17
18#ifndef SYS_SECCOMP
19#ifdef HAVE_SIGNAL_H
20#include <signal.h>
21#endif
22
23/**
24 * Used by SIGSYS signal handler to check if the signal was issued due to a
25 * seccomp2 filter violation.
26 */
27#define SYS_SECCOMP 1
28
29#endif /* !defined(SYS_SECCOMP) */
30
31#if defined(HAVE_SECCOMP_H) && defined(__linux__)
32#define USE_LIBSECCOMP
33#endif
34
35struct sandbox_cfg_elem_t;
36
37/** Typedef to structure used to manage a sandbox configuration. */
38typedef struct sandbox_cfg_elem_t sandbox_cfg_t;
39
40/**
41 * Linux definitions
42 */
43#ifdef USE_LIBSECCOMP
44
45#include <sys/ucontext.h>
46#include <seccomp.h>
47#include <netdb.h>
48
49#define PARAM_PTR 0
50#define PARAM_NUM 1
51
52/**
53 * Enum used to manage the type of the implementation for general purpose.
54 */
55typedef enum {
56 /** Libseccomp implementation based on seccomp2*/
57 LIBSECCOMP2 = 0
58} SB_IMPL;
59
60/**
61 * Configuration parameter structure associated with the LIBSECCOMP2
62 * implementation.
63 */
64typedef struct smp_param_t {
65 /** syscall associated with parameter. */
66 int syscall;
67
68 /** parameter value. */
69 char *value;
70 /** parameter value, second argument. */
71 char *value2;
72
73 /** parameter flag (0 = not protected, 1 = protected). */
74 int prot;
75} smp_param_t;
76
77/**
78 * Structure used to manage a sandbox configuration.
79 *
80 * It is implemented as a linked list of parameters. Currently only controls
81 * parameters for open, openat, execve, stat64.
82 */
83struct sandbox_cfg_elem_t {
84 /** Sandbox implementation which dictates the parameter type. */
85 SB_IMPL implem;
86
87 /** Configuration parameter. */
88 smp_param_t *param;
89
90 /** Next element of the configuration*/
91 struct sandbox_cfg_elem_t *next;
92};
93
94/** Function pointer defining the prototype of a filter function.*/
95typedef int (*sandbox_filter_func_t)(scmp_filter_ctx ctx,
96 sandbox_cfg_t *filter);
97
98/** Type that will be used in step 3 in order to manage multiple sandboxes.*/
99typedef struct {
100 /** function pointers associated with the filter */
101 sandbox_filter_func_t *filter_func;
102
103 /** filter function pointer parameters */
104 sandbox_cfg_t *filter_dynamic;
105} sandbox_t;
106
107#endif /* defined(USE_LIBSECCOMP) */
108
109#ifdef USE_LIBSECCOMP
110const char* sandbox_intern_string(const char *param);
111bool sandbox_interned_string_is_missing(const char *s);
112#else /* !defined(USE_LIBSECCOMP) */
113#define sandbox_intern_string(s) (s)
114#define sandbox_interned_string_is_missing(s) (false)
115#endif /* defined(USE_LIBSECCOMP) */
116
117/** Creates an empty sandbox configuration file.*/
119
120/**
121 * Function used to add a open allowed filename to a supplied configuration.
122 * The (char*) specifies the path to the allowed file; we take ownership
123 * of the pointer.
124 */
126
127int sandbox_cfg_allow_chmod_filename(sandbox_cfg_t **cfg, char *file);
128int sandbox_cfg_allow_chown_filename(sandbox_cfg_t **cfg, char *file);
129
130/* DOCDOC */
131int sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2);
132
133/**
134 * Function used to add a openat allowed filename to a supplied configuration.
135 * The (char*) specifies the path to the allowed file; we steal the pointer to
136 * that file.
137 */
139
140/**
141 * Function used to add a opendir allowed filename to a supplied configuration.
142 * The (char*) specifies the path to the allowed dir; we steal the pointer to
143 * that dir.
144 */
146
147/**
148 * Function used to add a stat/stat64 allowed filename to a configuration.
149 * The (char*) specifies the path to the allowed file; that pointer is stolen.
150 */
152
153/** Function used to initialise a sandbox configuration.*/
155
156/** Return true iff the sandbox is turned on. */
157int sandbox_is_active(void);
158
159#endif /* !defined(SANDBOX_H_) */
int sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file)
Definition sandbox.c:2322
int sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file)
Definition sandbox.c:2343
sandbox_cfg_t * sandbox_cfg_new(void)
Definition sandbox.c:2292
struct sandbox_cfg_elem_t sandbox_cfg_t
Definition sandbox.h:38
int sandbox_init(sandbox_cfg_t *cfg)
Definition sandbox.c:2298
int sandbox_is_active(void)
Definition sandbox.c:2371
int sandbox_cfg_allow_opendir_dirname(sandbox_cfg_t **cfg, char *dir)
Definition sandbox.c:2336
#define sandbox_intern_string(s)
Definition sandbox.h:113
int sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file)
Definition sandbox.c:2329
Integer definitions used throughout Tor.