| Index: sandbox/linux/suid/sandbox.c
|
| diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c
|
| index d91c147daeaa495aa4d9dac507ba17a7339ce042..7410b71c315baa77ab857bf853f2b5e4579ada9d 100644
|
| --- a/sandbox/linux/suid/sandbox.c
|
| +++ b/sandbox/linux/suid/sandbox.c
|
| @@ -4,7 +4,7 @@
|
|
|
| // http://code.google.com/p/chromium/wiki/LinuxSUIDSandbox
|
|
|
| -#include "common/sandbox.h"
|
| +#include "sandbox/linux/suid/common/sandbox.h"
|
|
|
| #define _GNU_SOURCE
|
| #include <asm/unistd.h>
|
| @@ -29,9 +29,9 @@
|
| #include <sys/wait.h>
|
| #include <unistd.h>
|
|
|
| -#include "linux_util.h"
|
| -#include "process_util.h"
|
| -#include "common/suid_unsafe_environment_variables.h"
|
| +#include "sandbox/linux/suid/common/suid_unsafe_environment_variables.h"
|
| +#include "sandbox/linux/suid/linux_util.h"
|
| +#include "sandbox/linux/suid/process_util.h"
|
|
|
| #if !defined(CLONE_NEWPID)
|
| #define CLONE_NEWPID 0x20000000
|
| @@ -44,10 +44,10 @@ static bool DropRoot();
|
|
|
| #define HANDLE_EINTR(x) TEMP_FAILURE_RETRY(x)
|
|
|
| -static void FatalError(const char *msg, ...)
|
| +static void FatalError(const char* msg, ...)
|
| __attribute__((noreturn, format(printf, 1, 2)));
|
|
|
| -static void FatalError(const char *msg, ...) {
|
| +static void FatalError(const char* msg, ...) {
|
| va_list ap;
|
| va_start(ap, msg);
|
|
|
| @@ -85,20 +85,18 @@ static bool SpawnChrootHelper() {
|
| return false;
|
| }
|
|
|
| - char *safedir = NULL;
|
| + char* safedir = NULL;
|
| struct stat sdir_stat;
|
| - if (!stat(SAFE_DIR, &sdir_stat) && S_ISDIR(sdir_stat.st_mode))
|
| + if (!stat(SAFE_DIR, &sdir_stat) && S_ISDIR(sdir_stat.st_mode)) {
|
| safedir = SAFE_DIR;
|
| - else
|
| - if (!stat(SAFE_DIR2, &sdir_stat) && S_ISDIR(sdir_stat.st_mode))
|
| - safedir = SAFE_DIR2;
|
| - else {
|
| - fprintf(stderr, "Could not find %s\n", SAFE_DIR2);
|
| - return false;
|
| - }
|
| + } else if (!stat(SAFE_DIR2, &sdir_stat) && S_ISDIR(sdir_stat.st_mode)) {
|
| + safedir = SAFE_DIR2;
|
| + } else {
|
| + fprintf(stderr, "Could not find %s\n", SAFE_DIR2);
|
| + return false;
|
| + }
|
|
|
| - const pid_t pid = syscall(
|
| - __NR_clone, CLONE_FS | SIGCHLD, 0, 0, 0);
|
| + const pid_t pid = syscall(__NR_clone, CLONE_FS | SIGCHLD, 0, 0, 0);
|
|
|
| if (pid == -1) {
|
| perror("clone");
|
| @@ -214,7 +212,7 @@ static void WaitForChildAndExit(pid_t child_pid) {
|
| }
|
|
|
| int wait_ret =
|
| - HANDLE_EINTR(waitid(P_PID, child_pid, &reaped_child_info, WEXITED));
|
| + HANDLE_EINTR(waitid(P_PID, child_pid, &reaped_child_info, WEXITED));
|
|
|
| if (!wait_ret && reaped_child_info.si_pid == child_pid) {
|
| if (reaped_child_info.si_code == CLD_EXITED) {
|
| @@ -229,10 +227,7 @@ static void WaitForChildAndExit(pid_t child_pid) {
|
|
|
| static bool MoveToNewNamespaces() {
|
| // These are the sets of flags which we'll try, in order.
|
| - const int kCloneExtraFlags[] = {
|
| - CLONE_NEWPID | CLONE_NEWNET,
|
| - CLONE_NEWPID,
|
| - };
|
| + const int kCloneExtraFlags[] = {CLONE_NEWPID | CLONE_NEWNET, CLONE_NEWPID, };
|
|
|
| // We need to close kZygoteIdFd before the child can continue. We use this
|
| // socketpair to tell the child when to continue;
|
| @@ -241,8 +236,7 @@ static bool MoveToNewNamespaces() {
|
| FatalError("Failed to create a socketpair");
|
| }
|
|
|
| - for (size_t i = 0;
|
| - i < sizeof(kCloneExtraFlags) / sizeof(kCloneExtraFlags[0]);
|
| + for (size_t i = 0; i < sizeof(kCloneExtraFlags) / sizeof(kCloneExtraFlags[0]);
|
| i++) {
|
| pid_t pid = syscall(__NR_clone, SIGCHLD | kCloneExtraFlags[i], 0, 0, 0);
|
| const int clone_errno = errno;
|
| @@ -386,7 +380,7 @@ bool CheckAndExportApiVersion() {
|
| // Check the environment to see if a specific API version was requested.
|
| // assume version 0 if none.
|
| long api_number = -1;
|
| - char *api_string = getenv(kSandboxEnvironmentApiRequest);
|
| + char* api_string = getenv(kSandboxEnvironmentApiRequest);
|
| if (!api_string) {
|
| api_number = 0;
|
| } else {
|
| @@ -399,20 +393,22 @@ bool CheckAndExportApiVersion() {
|
|
|
| // Warn only for now.
|
| if (api_number != kSUIDSandboxApiNumber) {
|
| - fprintf(stderr, "The setuid sandbox provides API version %ld, "
|
| - "but you need %ld\n"
|
| - "Please read "
|
| - "https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment."
|
| - "\n\n",
|
| - kSUIDSandboxApiNumber,
|
| - api_number);
|
| + fprintf(
|
| + stderr,
|
| + "The setuid sandbox provides API version %ld, "
|
| + "but you need %ld\n"
|
| + "Please read "
|
| + "https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment."
|
| + "\n\n",
|
| + kSUIDSandboxApiNumber,
|
| + api_number);
|
| }
|
|
|
| // Export our version so that the sandboxed process can verify it did not
|
| // use an old sandbox.
|
| char version_string[64];
|
| - snprintf(version_string, sizeof(version_string), "%ld",
|
| - kSUIDSandboxApiNumber);
|
| + snprintf(
|
| + version_string, sizeof(version_string), "%ld", kSUIDSandboxApiNumber);
|
| if (setenv(kSandboxEnvironmentApiProvides, version_string, 1)) {
|
| perror("setenv");
|
| return false;
|
| @@ -421,7 +417,7 @@ bool CheckAndExportApiVersion() {
|
| return true;
|
| }
|
|
|
| -int main(int argc, char **argv) {
|
| +int main(int argc, char** argv) {
|
| if (argc <= 1) {
|
| if (argc <= 0) {
|
| return 1;
|
| @@ -476,9 +472,10 @@ int main(int argc, char **argv) {
|
| endptr = NULL;
|
| errno = 0;
|
| score = strtol(argv[3], &endptr, 10);
|
| - if (score == LONG_MAX || score == LONG_MIN ||
|
| - !endptr || *endptr || errno != 0)
|
| + if (score == LONG_MAX || score == LONG_MIN || !endptr || *endptr ||
|
| + errno != 0) {
|
| return 1;
|
| + }
|
| return AdjustOOMScore(pid, score);
|
| }
|
|
|
| @@ -489,9 +486,9 @@ int main(int argc, char **argv) {
|
|
|
| if (geteuid() != 0) {
|
| fprintf(stderr,
|
| - "The setuid sandbox is not running as root. Common causes:\n"
|
| - " * An unprivileged process using ptrace on it, like a debugger.\n"
|
| - " * A parent process set prctl(PR_SET_NO_NEW_PRIVS, ...)\n");
|
| + "The setuid sandbox is not running as root. Common causes:\n"
|
| + " * An unprivileged process using ptrace on it, like a debugger.\n"
|
| + " * A parent process set prctl(PR_SET_NO_NEW_PRIVS, ...)\n");
|
| }
|
|
|
| if (!MoveToNewNamespaces())
|
|
|