| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/zygote/zygote_main.h" | 5 #include "content/zygote/zygote_main.h" |
| 6 | 6 |
| 7 #include <dlfcn.h> | 7 #include <dlfcn.h> |
| 8 #include <fcntl.h> | 8 #include <fcntl.h> |
| 9 #include <pthread.h> | 9 #include <pthread.h> |
| 10 #include <signal.h> | 10 #include <signal.h> |
| (...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 526 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 527 switches::kNoSandbox)) { | 527 switches::kNoSandbox)) { |
| 528 // This will pre-initialize the various sandboxes that need it. | 528 // This will pre-initialize the various sandboxes that need it. |
| 529 linux_sandbox->PreinitializeSandbox(); | 529 linux_sandbox->PreinitializeSandbox(); |
| 530 } | 530 } |
| 531 | 531 |
| 532 const bool using_setuid_sandbox = | 532 const bool using_setuid_sandbox = |
| 533 linux_sandbox->setuid_sandbox_client()->IsSuidSandboxChild(); | 533 linux_sandbox->setuid_sandbox_client()->IsSuidSandboxChild(); |
| 534 const bool using_namespace_sandbox = | 534 const bool using_namespace_sandbox = |
| 535 sandbox::NamespaceSandbox::InNewUserNamespace(); | 535 sandbox::NamespaceSandbox::InNewUserNamespace(); |
| 536 const bool using_layer1_sandbox = |
| 537 using_setuid_sandbox || using_namespace_sandbox; |
| 536 | 538 |
| 537 if (using_setuid_sandbox) { | 539 if (using_setuid_sandbox) { |
| 538 linux_sandbox->setuid_sandbox_client()->CloseDummyFile(); | 540 linux_sandbox->setuid_sandbox_client()->CloseDummyFile(); |
| 541 } |
| 539 | 542 |
| 543 if (using_layer1_sandbox) { |
| 540 // Let the ZygoteHost know we're booting up. | 544 // Let the ZygoteHost know we're booting up. |
| 541 CHECK(UnixDomainSocket::SendMsg(kZygoteSocketPairFd, | 545 CHECK(UnixDomainSocket::SendMsg(kZygoteSocketPairFd, |
| 542 kZygoteBootMessage, | 546 kZygoteBootMessage, |
| 543 sizeof(kZygoteBootMessage), | 547 sizeof(kZygoteBootMessage), |
| 544 std::vector<int>())); | 548 std::vector<int>())); |
| 545 } | 549 } |
| 546 | 550 |
| 547 VLOG(1) << "ZygoteMain: initializing " << fork_delegates.size() | 551 VLOG(1) << "ZygoteMain: initializing " << fork_delegates.size() |
| 548 << " fork delegates"; | 552 << " fork delegates"; |
| 549 const bool using_layer1_sandbox = | |
| 550 using_setuid_sandbox || using_namespace_sandbox; | |
| 551 for (ZygoteForkDelegate* fork_delegate : fork_delegates) { | 553 for (ZygoteForkDelegate* fork_delegate : fork_delegates) { |
| 552 fork_delegate->Init(GetSandboxFD(), using_layer1_sandbox); | 554 fork_delegate->Init(GetSandboxFD(), using_layer1_sandbox); |
| 553 } | 555 } |
| 554 | 556 |
| 555 const std::vector<int> sandbox_fds_to_close_post_fork = | 557 const std::vector<int> sandbox_fds_to_close_post_fork = |
| 556 linux_sandbox->GetFileDescriptorsToClose(); | 558 linux_sandbox->GetFileDescriptorsToClose(); |
| 557 | 559 |
| 558 fds_to_close_post_fork.insert(fds_to_close_post_fork.end(), | 560 fds_to_close_post_fork.insert(fds_to_close_post_fork.end(), |
| 559 sandbox_fds_to_close_post_fork.begin(), | 561 sandbox_fds_to_close_post_fork.begin(), |
| 560 sandbox_fds_to_close_post_fork.end()); | 562 sandbox_fds_to_close_post_fork.end()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 const bool namespace_sandbox_engaged = sandbox_flags & kSandboxLinuxUserNS; | 595 const bool namespace_sandbox_engaged = sandbox_flags & kSandboxLinuxUserNS; |
| 594 CHECK_EQ(using_namespace_sandbox, namespace_sandbox_engaged); | 596 CHECK_EQ(using_namespace_sandbox, namespace_sandbox_engaged); |
| 595 | 597 |
| 596 Zygote zygote(sandbox_flags, fork_delegates.Pass(), extra_children, | 598 Zygote zygote(sandbox_flags, fork_delegates.Pass(), extra_children, |
| 597 extra_fds); | 599 extra_fds); |
| 598 // This function call can return multiple times, once per fork(). | 600 // This function call can return multiple times, once per fork(). |
| 599 return zygote.ProcessRequests(); | 601 return zygote.ProcessRequests(); |
| 600 } | 602 } |
| 601 | 603 |
| 602 } // namespace content | 604 } // namespace content |
| OLD | NEW |