diff options
author | Nick Mathewson <nickm@torproject.org> | 2016-07-13 09:19:35 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2016-07-13 09:19:35 -0400 |
commit | 9932544297e02dc4f79d70317f214bcbb2dd8e9a (patch) | |
tree | 278aeea0af6549f4743fe496df0f28b23533bbbb | |
parent | 3ac434104af0a40e75bfb5116046eae1cd51f6d3 (diff) | |
parent | c1bfa65211257e5efb89c5ebc534339d52fa77c4 (diff) | |
download | tor-9932544297e02dc4f79d70317f214bcbb2dd8e9a.tar.gz tor-9932544297e02dc4f79d70317f214bcbb2dd8e9a.zip |
Merge branch 'maint-0.2.8'
-rw-r--r-- | changes/bug18397 | 7 | ||||
-rw-r--r-- | src/common/sandbox.c | 20 |
2 files changed, 27 insertions, 0 deletions
diff --git a/changes/bug18397 b/changes/bug18397 new file mode 100644 index 0000000000..53993da4e6 --- /dev/null +++ b/changes/bug18397 @@ -0,0 +1,7 @@ + o Minor bugfixes (Linux seccomp2 sandbox): + - Add a few missing syscalls to the seccomp2 sandbox: sysinfo, + getsockopt(SO_SNDBUF), and setsockopt(SO_SNDBUFFORCE). On + some systems, these are required for Tor to start with + "Sandbox 1" enabled. + Fixes bug 18397; bugfix on 0.2.5.1-alpha. Patch from + Daniel Pinto. diff --git a/src/common/sandbox.c b/src/common/sandbox.c index 838b267ab4..db3054d8d0 100644 --- a/src/common/sandbox.c +++ b/src/common/sandbox.c @@ -210,6 +210,10 @@ static int filter_nopar_gen[] = { SCMP_SYS(getrandom), #endif +#ifdef __NR_sysinfo + // qsort uses this.. + SCMP_SYS(sysinfo), +#endif /* * These socket syscalls are not required on x86_64 and not supported with * some libseccomp versions (eg: 1.0.1) @@ -699,6 +703,14 @@ sb_setsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter) if (rc) return rc; +#ifdef HAVE_SYSTEMD + rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt), + SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET), + SCMP_CMP(2, SCMP_CMP_EQ, SO_SNDBUFFORCE)); + if (rc) + return rc; +#endif + #ifdef IP_TRANSPARENT rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt), SCMP_CMP(1, SCMP_CMP_EQ, SOL_IP), @@ -732,6 +744,14 @@ sb_getsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter) if (rc) return rc; +#ifdef HAVE_SYSTEMD + rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt), + SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET), + SCMP_CMP(2, SCMP_CMP_EQ, SO_SNDBUF)); + if (rc) + return rc; +#endif + #ifdef HAVE_LINUX_NETFILTER_IPV4_H rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt), SCMP_CMP(1, SCMP_CMP_EQ, SOL_IP), |