Skip to content

Commit db0aed6

Browse files
authored
Merge pull request #27 from sio2project/new-syscalls
New syscalls
2 parents 95d9e34 + 44f6af8 commit db0aed6

File tree

16 files changed

+135
-109
lines changed

16 files changed

+135
-109
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ Our sio2jail uses some external libraries and programs:
2020
* libseccomp (>= 2.3.0)
2121
* libtclap
2222
* scdoc (for generating man pages)
23+
* g++-multilib
2324

2425
some of which you can install (e.g. on Debian) with:
2526

26-
apt-get install libcap-dev libtclap-dev libseccomp-dev
27+
apt-get install libcap-dev libtclap-dev libseccomp-dev g++-multilib
2728

2829
By default sio2jail searches for this libraries in system paths and in case they
2930
aren't found their sources are downloaded and libraries are built in working

boxes/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ADD_CUSTOM_COMMAND(
22
OUTPUT
3-
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz
3+
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz compiler-python3.9.2-numpy_amd64.tar.gz
44
COMMAND
55
${CMAKE_SOURCE_DIR}/boxes/make_boxes.sh
66
DEPENDS
@@ -15,9 +15,10 @@ ADD_CUSTOM_COMMAND(
1515
&& tar -xvf busybox.tar.gz
1616
&& tar -xvf python2.tar.gz
1717
&& tar -xvf python3.tar.gz
18+
&& tar -xvf compiler-python3.9.2-numpy_amd64.tar.gz && mv compiler-python3.9.2-numpy_amd64 python3_9
1819
&& touch boxes_extraction_stamp.txt
1920
DEPENDS
20-
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz
21+
minimal.tar.gz busybox.tar.gz python2.tar.gz python3.tar.gz compiler-python3.9.2-numpy_amd64.tar.gz
2122
)
2223

2324
ADD_CUSTOM_TARGET(boxes

boxes/make_boxes.sh

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ make_busybox() {
2121
empty_box
2222
# busybox with dependencies
2323
extract_deb "busybox/busybox_1.22.0-19+b3_amd64.deb"
24-
extract_deb "glibc/libc6_2.24-11+deb9u3_amd64.deb"
24+
extract_deb "glibc/libc6_2.24-11+deb9u4_amd64.deb"
2525
extract_deb "gcc-6/libgcc1_6.3.0-18+deb9u1_amd64.deb"
2626
extract_deb "gcc-6/gcc-6-base_6.3.0-18+deb9u1_amd64.deb"
27-
2827
build_box
2928
clean_box
3029
manifest_box >> $MANIFEST
@@ -34,10 +33,10 @@ make_python2() {
3433
export BOX="python2"
3534
empty_box
3635
# python2.7 with dependencies
37-
extract_deb "python2.7/python2.7-minimal_2.7.13-2+deb9u2_amd64.deb"
38-
extract_deb "python2.7/libpython2.7-minimal_2.7.13-2+deb9u2_amd64.deb"
36+
extract_deb "python2.7/python2.7-minimal_2.7.13-2+deb9u3_amd64.deb"
37+
extract_deb "python2.7/libpython2.7-minimal_2.7.13-2+deb9u3_amd64.deb"
3938
extract_deb "zlib/zlib1g_1.2.8.dfsg-5_amd64.deb"
40-
extract_deb "glibc/libc6_2.24-11+deb9u3_amd64.deb"
39+
extract_deb "glibc/libc6_2.24-11+deb9u4_amd64.deb"
4140
extract_deb "gcc-6/libgcc1_6.3.0-18+deb9u1_amd64.deb"
4241
extract_deb "gcc-6/gcc-6-base_6.3.0-18+deb9u1_amd64.deb"
4342

@@ -50,12 +49,12 @@ make_python3() {
5049
export BOX="python3"
5150
empty_box
5251
# python3.5 with dependencies
53-
extract_deb "python3.5/python3.5-minimal_3.5.3-1_amd64.deb"
54-
extract_deb "python3.5/libpython3.5-minimal_3.5.3-1_amd64.deb"
55-
extract_deb "expat/libexpat1_2.2.0-2+deb9u1_amd64.deb"
52+
extract_deb "python3.5/python3.5-minimal_3.5.3-1+deb9u1_amd64.deb"
53+
extract_deb "python3.5/libpython3.5-minimal_3.5.3-1+deb9u1_amd64.deb"
54+
extract_deb "expat/libexpat1_2.2.0-2+deb9u3_amd64.deb"
5655
extract_deb "zlib/zlib1g_1.2.8.dfsg-5_amd64.deb"
57-
extract_deb "openssl/libssl1.1_1.1.0f-3+deb9u2_amd64.deb"
58-
extract_deb "glibc/libc6_2.24-11+deb9u3_amd64.deb"
56+
extract_deb "openssl/libssl1.1_1.1.0l-1~deb9u1_amd64.deb"
57+
extract_deb "glibc/libc6_2.24-11+deb9u4_amd64.deb"
5958
extract_deb "gcc-6/libgcc1_6.3.0-18+deb9u1_amd64.deb"
6059
extract_deb "gcc-6/gcc-6-base_6.3.0-18+deb9u1_amd64.deb"
6160

@@ -66,8 +65,33 @@ make_python3() {
6665
manifest_box >> $MANIFEST
6766
}
6867

68+
make_python3_9() {
69+
short_box_name="python3_9"
70+
box_name="compiler-python3.9.2-numpy_amd64.tar.gz"
71+
box_csum=`cat $MANIFEST | grep $BOX | awk '{ print $1 }'`
72+
URL="https://downloads.sio2project.mimuw.edu.pl/sandboxes"
73+
74+
if [ -e "$box_name" ]; then
75+
csum=`sha256sum "$box_name" | awk '{ print $1 }'`
76+
if [ "$csum" != "$box_csum" ]; then
77+
echo "** Box $box_name has changed, removing it"
78+
rm "$box_name"
79+
rm -r "$short_box_name"
80+
echo "** Downloading box $box_name"
81+
[ -e "$box_name" ] || wget "$URL/$box_name"
82+
else
83+
echo "** Box $box_name hasn't changed, using it"
84+
fi
85+
else
86+
echo "** Downloading box $box_name"
87+
[ -e "$box_name" ] || wget "$URL/$box_name"
88+
fi
89+
90+
}
91+
6992
echo -n > $MANIFEST
7093
make_minimal
7194
make_busybox
7295
make_python2
7396
make_python3
97+
make_python3_9

boxes/manifest.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
acaf98661235d1e88ebdc20b9381cbe3fc7341130e592bbda2277bedbb56834f busybox.tar.gz
33
c451406e90a6a5d906c591c563fc49dd91e11579121858e4947145d9ec7749e7 python2.tar.gz
44
b2e55c56c7ae4c1ede60681cbd5e883e4a893e1d842a63be453a63f76396e160 python3.tar.gz
5+
dd9645204fc7477130fef4ac12cdb2a7e27c73c894b52a2591aec7a1e78f2878 compiler-python3.9.2-numpy_amd64.tar.gz

external/scdoc.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ ENDIF()
1414

1515
IF((NOT DEFINED SCDOC_BUILD_OWN AND NOT EXISTS "${scdoc_BINARY_PATH}") OR SCDOC_BUILD_OWN STREQUAL "YES")
1616
ExternalProject_Add(scdoc_project
17-
URL https://git.sr.ht/%7Esircmpwn/scdoc/archive/1.5.2.tar.gz
18-
URL_HASH SHA256=5032e857da56a533dc8291012254a61bb36a0c97fe5a964347ec8286c70fdd13
17+
URL https://git.sr.ht/~sircmpwn/scdoc/archive/1.5.2.tar.gz
18+
URL_HASH SHA256=86591de3741bea5443e7fbc11ff9dc22da90621105b06be524422efd5dec3a29
1919

2020
CONFIGURE_COMMAND
2121
true

src/s2japp/ApplicationSettings.cc

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
#include "ApplicationSettings.h"
12
#include "ApplicationArguments.h"
23
#include "ApplicationException.h"
3-
#include "ApplicationSettings.h"
44

55
#include "common/Utils.h"
66
#include "printer/AugmentedOIOutputBuilder.h"
@@ -80,7 +80,7 @@ class StringOutputGenerator : public TCLAP::StdOutput {
8080
namespace s2j {
8181
namespace app {
8282

83-
const std::string ApplicationSettings::VERSION = "1.3.0";
83+
const std::string ApplicationSettings::VERSION = "1.4.1-beta";
8484

8585
const std::string ApplicationSettings::DESCRIPTION =
8686
"SIO2jail, a sandbox for programming contests.";
@@ -115,12 +115,10 @@ const std::map<std::string, std::pair<Feature, bool>>
115115
{"procfs", {Feature::MOUNT_PROCFS, false}},
116116
{"capability-drop", {Feature::CAPABILITY_DROP, true}}});
117117

118-
const std::vector<std::string> ApplicationSettings::FLAGS_ON({"on",
119-
"yes",
120-
"1"});
121-
const std::vector<std::string> ApplicationSettings::FLAGS_OFF({"off",
122-
"no",
123-
"0"});
118+
const std::vector<std::string> ApplicationSettings::FLAGS_ON(
119+
{"on", "yes", "1"});
120+
const std::vector<std::string> ApplicationSettings::FLAGS_OFF(
121+
{"off", "no", "0"});
124122

125123
ApplicationSettings::ApplicationSettings()
126124
: action(Action::PRINT_HELP)

src/seccomp/policy/DefaultPolicy.cc

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,25 @@ const std::vector<SeccompRule>& DefaultPolicy::getRules() const {
2626

2727
void DefaultPolicy::addExecutionControlRules(bool allowFork) {
2828
// Some syscalls must be enabled
29-
allowSyscalls({"restart_syscall",
30-
"getpriority",
31-
"setpriority",
32-
"sigaction",
33-
"sigaltstack",
34-
"rt_sigaction",
35-
"rt_sigprocmask",
36-
"futex",
37-
"set_tid_address",
38-
"set_robust_list",
39-
"getpid",
40-
"getrandom",
41-
"sigaltstack",
42-
"sigsuspend"});
29+
allowSyscalls(
30+
{"restart_syscall",
31+
"getpriority",
32+
"setpriority",
33+
"sigaction",
34+
"sigaltstack",
35+
"rt_sigaction",
36+
"rt_sigprocmask",
37+
"futex",
38+
"set_tid_address",
39+
"set_robust_list",
40+
"getpid",
41+
"getrandom",
42+
"sigaltstack",
43+
"sigsuspend",
44+
"clock_nanosleep",
45+
"open",
46+
"epoll_create1",
47+
"openat"});
4348

4449
rules_.emplace_back(SeccompRule(
4550
"set_thread_area", action::ActionTrace([](auto& /* tracee */) {
@@ -92,13 +97,14 @@ void DefaultPolicy::addExecutionControlRules(bool allowFork) {
9297
}
9398

9499
void DefaultPolicy::addMemoryManagementRules() {
95-
allowSyscalls({"brk",
96-
"mmap",
97-
"mmap2",
98-
"munmap",
99-
"mremap",
100-
"mprotect",
101-
"arch_prctl"});
100+
allowSyscalls(
101+
{"brk",
102+
"mmap",
103+
"mmap2",
104+
"munmap",
105+
"mremap",
106+
"mprotect",
107+
"arch_prctl"});
102108

103109
rules_.emplace_back(SeccompRule{"madvise", action::ActionErrno{EINVAL}});
104110
}

test/src/1-sec-evil.c

Lines changed: 0 additions & 16 deletions
This file was deleted.

test/src/CMakeLists.txt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
SET(CMAKE_C_FLAGS "-std=gnu99 -lm -static -O2")
22
SET(CMAKE_C_FLAGS_DEBUG "")
33
SET(CMAKE_C_FLAGS_RELEASE "")
4-
SET(CMAKE_CXX_FLAGS "-std=c++11 -lm -static -O2")
4+
SET(CMAKE_CXX_FLAGS "-std=c++17 -lm -static -O2")
55
SET(CMAKE_CXX_FLAGS_DEBUG "")
66
SET(CMAKE_CXX_FLAGS_RELEASE "")
77

88
# Time tests
99
ADD_EXECUTABLE(1-sec-prog 1-sec-prog.c)
10-
ADD_EXECUTABLE(1-sec-evil 1-sec-evil.c)
1110
ADD_EXECUTABLE(infinite-loop infinite-loop.c)
1211
SET_TARGET_PROPERTIES(1-sec-prog
13-
1-sec-evil
1412
infinite-loop
1513
PROPERTIES COMPILE_FLAGS "-m32"
1614
LINK_FLAGS "-m32")
@@ -48,7 +46,7 @@ ADD_EXECUTABLE(stderr-write stderr-write.c)
4846

4947
ADD_CUSTOM_TARGET(test-binaries
5048
DEPENDS
51-
1-sec-prog 1-sec-evil infinite-loop 1-sec-prog-th
49+
1-sec-prog infinite-loop 1-sec-prog-th
5250
leak-tiny_32 leak-huge_32 leak-dive_32
5351
leak-tiny_64 leak-huge_64 leak-dive_64
5452
sum_c sum_cxx stderr-write)

test/src/sum_python3.9.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/python3.9
2+
3+
import numpy
4+
5+
print(numpy.sum(list(map(int, input().split()))))

0 commit comments

Comments
 (0)