diff options
Diffstat (limited to 'snekbox.py')
| -rw-r--r-- | snekbox.py | 24 | 
1 files changed, 9 insertions, 15 deletions
| @@ -17,6 +17,7 @@ class Snekbox(object):          self.nsjail_binary = nsjail_binary          self.python_binary = python_binary +        self.nsjail_workaround()      env = {          'PATH': '/snekbox/.venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', @@ -26,6 +27,12 @@ class Snekbox(object):          'PYTHONDONTWRITEBYTECODE': '1',      } +    def nsjail_workaround(self): +        dirs = ['/sys/fs/cgroup/pids/NSJAIL', '/sys/fs/cgroup/memory/NSJAIL'] +        for d in dirs: +            if not os.path.exists(d): +                os.makedirs(d) +      def python3(self, cmd):          args = [self.nsjail_binary, '-Mo',                  '--rlimit_as', '700', @@ -37,7 +44,8 @@ class Snekbox(object):                  '--time_limit', '2',                  '--disable_proc',                  '--iface_no_lo', -                # '--cgroup_pids_max=1',  # This doesn't work :( +                '--cgroup_pids_max=1', +                '--cgroup_mem_max=52428800'                  '--quiet', '--',                  self.python_binary, '-ISq', '-c', cmd] @@ -82,24 +90,10 @@ class Snekbox(object):                      exchange=snekid)          exit(0) -    def stopwatch(self, process): -        log.debug(f'3 second timer started for process {process.pid}') -        for _ in range(3): -            time.sleep(1) -            if not process.is_alive(): -                log.debug(f'Clean exit on process {process.pid}') -                exit(0) - -        process.terminate() -        log.debug(f'Terminated process {process.pid} forcefully') -      def message_handler(self, ch, method, properties, body, thread_ws=None):          p = multiprocessing.Process(target=self.execute, args=(body,))          p.daemon = True          p.start() -        t = threading.Thread(target=self.stopwatch, args=(p,)) -        t.daemon = True -        t.start()          ch.basic_ack(delivery_tag=method.delivery_tag) | 
