summaryrefslogtreecommitdiff
path: root/src/common/sandbox.c
AgeCommit message (Collapse)Author
2014-04-18Improved message when running sandbox on Linux without libseccompNick Mathewson
Previously we said "Sandbox is not implemented on this platform" on Linux boxes without libseccomp. Now we say that you need to build Tor built with libseccomp. Fixes bug 11543; bugfix on 0.2.5.1-alpha.
2014-04-17Remove spurious libevent include in sandbox.cNick Mathewson
2014-04-16Log the name of the failing syscall on failureNick Mathewson
2014-04-16Sandbox: permit O_NONBLOCK and O_NOCTTY for files we refuseNick Mathewson
OpenSSL needs this, or RAND_poll() will kill the process. Also, refuse with EACCESS, not errno==-1 (!).
2014-04-16Don't allow change to ConnLimit while sandbox is activeNick Mathewson
2014-04-16Use SCMP_CMP_MASKED_EQ to allow flags, not force themNick Mathewson
Older versions of Libevent are happy to open SOCK_DGRAM sockets non-cloexec and non-nonblocking, and then set those flags afterwards. It's nice to be able to allow a flag to be on or off in the sandbox without having to enumerate all its values. Also, permit PF_INET6 sockets. (D'oh!)
2014-04-16Get Libevent's PRNG functioning under the linux sandboxNick Mathewson
Libevent uses an arc4random implementation (I know, I know) to generate DNS transaction IDs and capitalization. But it liked to initialize it either with opening /dev/urandom (which won't work under the sandbox if it doesn't use the right pointer), or with sysctl({CTL_KERN,KERN_RANDOM,RANDOM_UUIC}). To make _that_ work, we were permitting sysctl unconditionally. That's not such a great idea. Instead, we try to initialize the libevent PRNG _before_ installing the sandbox, and make sysctl always fail with EPERM under the sandbox.
2014-04-16Introduce arg-counting macros to wrap seccomp_rule_add()Nick Mathewson
The compiler doesn't warn about this code: rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat), 1, SCMP_CMP(0, SCMP_CMP_EQ, AT_FDCWD), SCMP_CMP(1, SCMP_CMP_EQ, param->value), SCMP_CMP(2, SCMP_CMP_EQ, O_RDONLY|...)); but note that the arg_cnt argument above is only 1. This means that only the first filter (argument 0 == AT_FDCWD) is actually checked! This patch also fixes the above error in the openat() filter. Earlier I fixed corresponding errors in filters for rename() and mprotect().
2014-04-16Fix sandbox protection for renameNick Mathewson
(We were only checking the first parameter of each rename call.)
2014-04-16Upgrade warning about missing interned string for sandboxNick Mathewson
2014-04-16Have sandbox string protection include multi-valued parmeters.Nick Mathewson
2014-04-16Clean up sandbox structures a bitNick Mathewson
Drop pindex,pindex2 as unused. Admit a type to avoid using a void*
2014-04-16Add missing rename function for non-linux platformsNick Mathewson
2014-04-16Drop 'fr' parameter from sandbox code.Nick Mathewson
Appearently, the majority of the filenames we pass to sandbox_cfg_allow() functions are "freeable right after". So, consider _all_ of them safe-to-steal, and add a tor_strdup() in the few cases that aren't. (Maybe buggy; revise when I can test.)
2014-04-16Add 'rename' to the sandboxed syscallsNick Mathewson
(If we don't restrict rename, there's not much point in restricting open, since an attacker could always use rename to make us open whatever they want.)
2014-04-16Only intern one copy of each magic string for the sandboxNick Mathewson
If we intern two copies of a string, later calls to sandbox_intern_string will give the wrong one sometimes.
2014-04-16Fix some initial sandbox issues.Nick Mathewson
Allow files that weren't in the list; Allow the _sysctl syscall; allow accept4 with CLOEXEC and NONBLOCK.
2014-04-10Log a backtrace when the sandbox finds a failureNick Mathewson
This involves some duplicate code between backtrace.c and sandbox.c, but I don't see a way around it: calling more functions would mean adding more steps to our call stack, and running clean_backtrace() against the wrong point on the stack.
2014-04-10Make the sandbox code allow the writev() syscall.Nick Mathewson
Tor doesn't use it directly, but the glibc backtrace-to-fd code does
2014-03-13Fix some leaks/missed checks in the unit testsNick Mathewson
Coverity spotted these.
2014-02-02Add a sandbox rule to allow IP_TRANSPARENTNick Mathewson
2014-01-17whitespace fixesNick Mathewson
2014-01-06Fix some seccomp2 issuesNick Mathewson
Fix for #10563. This is a compatibility issue with libseccomp-2.1. I guess you could call it a bugfix on 0.2.5.1?
2013-11-18Merge branch 'backtrace_squashed'Nick Mathewson
Conflicts: src/common/sandbox.c src/common/sandbox.h src/common/util.c src/or/main.c src/test/include.am src/test/test.c
2013-11-18Add a sighandler-safe logging mechanismNick Mathewson
We had accidentially grown two fake ones: one for backtrace.c, and one for sandbox.c. Let's do this properly instead. Now, when we configure logs, we keep track of fds that should get told about bad stuff happening from signal handlers. There's another entry point for these that avoids using non-signal-handler-safe functions.
2013-09-16Fix a memory leak on getaddrinfo in sandbox. Found by coverityNick Mathewson
2013-09-16Clean up malloc issues in sandbox.cNick Mathewson
tor_malloc returns void *; in C, it is not necessary to cast a void* to another pointer type before assigning it. tor_malloc fails with an error rather than returning NULL; it's not necessary to check its output. (In one case, doing so annoyed Coverity.)
2013-09-13Merge remote-tracking branch 'ctoader/gsoc-cap-stage2'Nick Mathewson
Conflicts: src/common/sandbox.c
2013-09-12fixed compilation bug on i386 due to previous fixCristian Toader
2013-09-12bug fix: syscalls send and recv not supported for x86_64 with libseccomp 1.0.1Cristian Toader
2013-09-12remove debugging codeCristian Toader
2013-09-12added extra buffer and limit to mprotect not to exceed the length of that bufferCristian Toader
2013-09-10added filter protection for string parameter memoryCristian Toader
2013-09-10fixed socket syscall bugCristian Toader
2013-09-09Fix check-spacesNick Mathewson
2013-09-09Fix compilation on OSXNick Mathewson
2013-09-09Do not try to add non-existent syscalls.Nick Mathewson
2013-09-09Fix a warning related to SCMP_CMP definition in header.Nick Mathewson
SCMP_CMP(a,b,c) leaves the fourth field of the structure undefined, giving a missing-initializer error. All of our uses are three-argument, so I'm overriding the default.
2013-09-09Fix most of the --enable-gcc-warnings warnings in the sandbox codeNick Mathewson
2013-09-09Remove a usage of free()Nick Mathewson
2013-09-09Basic compilation fixes.Nick Mathewson
2013-09-06added missing documentation for sandbox functionsCristian Toader
2013-09-06passing hints as a const pointer to sandbox_getaddrinfo(), also one tor_free ↵Cristian Toader
macro fails to compile..
2013-09-06replaced strdup with tor_strdupCristian Toader
2013-09-06replaced malloc/free with tor_malloc/tor_freeCristian Toader
2013-09-06switched string lengths from int to size_t in prot_strings()Cristian Toader
2013-09-03fixed bug where sandbox_getaddrinfo() would fail when -Sandbox is 0Cristian Toader
2013-09-02switched to a more generic way of handling the sandbox configurationCristian Toader
2013-09-02added contingency message to test for sandbox_getaddrinfoCristian Toader
2013-09-02make check-spaces fixCristian Toader