| Index: sandbox.cc
|
| ===================================================================
|
| --- sandbox.cc (revision 179)
|
| +++ sandbox.cc (working copy)
|
| @@ -11,6 +11,7 @@
|
| namespace playground {
|
|
|
| // Global variables
|
| +int Sandbox::proc_self_ = -1;
|
| int Sandbox::proc_self_maps_ = -1;
|
| enum Sandbox::SandboxStatus Sandbox::status_ = STATUS_UNKNOWN;
|
| int Sandbox::pid_;
|
| @@ -193,7 +194,7 @@
|
| }
|
| }
|
|
|
| -int Sandbox::supportsSeccompSandbox(int proc_fd) {
|
| +int Sandbox::supportsSeccompSandbox(int proc_self) {
|
| if (status_ != STATUS_UNKNOWN) {
|
| return status_ != STATUS_UNSUPPORTED;
|
| }
|
| @@ -216,8 +217,8 @@
|
| sys.dup2(devnull, 2);
|
| sys.close(devnull);
|
| }
|
| - if (proc_fd >= 0) {
|
| - setProcSelfMaps(sys.openat(proc_fd, "self/maps", O_RDONLY, 0));
|
| + if (proc_self >= 0) {
|
| + setProcSelf(sys.dup(proc_self));
|
| }
|
| startSandbox();
|
| write(sys, fds[1], "", 1);
|
| @@ -250,8 +251,8 @@
|
| }
|
| }
|
|
|
| -void Sandbox::setProcSelfMaps(int proc_self_maps) {
|
| - proc_self_maps_ = proc_self_maps;
|
| +void Sandbox::setProcSelf(int proc_self) {
|
| + proc_self_ = proc_self;
|
| }
|
|
|
| void Sandbox::startSandbox() {
|
| @@ -262,6 +263,13 @@
|
| }
|
|
|
| SysCalls sys;
|
| + if (proc_self_ >= 0) {
|
| + proc_self_maps_ = sys.openat(proc_self_, "maps", O_RDONLY, 0);
|
| + if (NOINTR_SYS(sys.close(proc_self_))) {
|
| + die("Failed to close proc_self_");
|
| + }
|
| + proc_self_ = -1;
|
| + }
|
| if (proc_self_maps_ < 0) {
|
| proc_self_maps_ = sys.open("/proc/self/maps", O_RDONLY, 0);
|
| if (proc_self_maps_ < 0) {
|
|
|