Prechádzať zdrojové kódy

fixed openssl open syscall, fixed sandbox_getaddrinfo

Cristian Toader 12 rokov pred
rodič
commit
71612f00ae
1 zmenil súbory, kde vykonal 12 pridanie a 8 odobranie
  1. 12 8
      src/common/sandbox.c

+ 12 - 8
src/common/sandbox.c

@@ -264,13 +264,13 @@ sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
   }
 
   // problem: required by getaddrinfo
-//  rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 1,
-//        SCMP_CMP(1, SCMP_CMP_EQ, O_RDONLY|O_CLOEXEC));
-//  if (rc != 0) {
-//    log_err(LD_BUG,"(Sandbox) failed to add open syscall, received libseccomp "
-//        "error %d", rc);
-//    return rc;
-//  }
+  rc = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(1), SCMP_SYS(open), 1,
+        SCMP_CMP(1, SCMP_CMP_EQ, O_RDONLY|O_CLOEXEC));
+  if (rc != 0) {
+    log_err(LD_BUG,"(Sandbox) failed to add open syscall, received libseccomp "
+        "error %d", rc);
+    return rc;
+  }
 
   return 0;
 }
@@ -872,6 +872,10 @@ int sandbox_getaddrinfo(const char *name, struct addrinfo **res)
     return -2;
   }
   *res = NULL;
+  *res = (struct addrinfo *) malloc (sizeof(struct addrinfo));
+  if (!res) {
+    return -2;
+  }
 
   if (gethostname(hname, sizeof(hname)) < 0) {
     return -1;
@@ -882,7 +886,7 @@ int sandbox_getaddrinfo(const char *name, struct addrinfo **res)
     return -1;
   }
 
-  *res = sb_addr_info;
+  memcpy(*res, sb_addr_info, sizeof(struct addrinfo));
   return 0;
 }