// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "sandbox/linux/services/resource_limits.h" #include <errno.h> #include <sys/resource.h> #include <sys/time.h> #include <unistd.h> #include "base/logging.h" #include "sandbox/linux/tests/test_utils.h" #include "sandbox/linux/tests/unit_tests.h" #include "testing/gtest/include/gtest/gtest.h" namespace sandbox { namespace { // Fails on Android: crbug.com/459158 #if !defined(OS_ANDROID) #define MAYBE_NoFork DISABLE_ON_ASAN(NoFork) #else #define MAYBE_NoFork DISABLED_NoFork #endif // OS_ANDROID // Not being able to fork breaks LeakSanitizer, so disable on // all ASAN builds. SANDBOX_TEST(ResourceLimits, MAYBE_NoFork) { // Make sure that fork will fail with EAGAIN. SANDBOX_ASSERT(ResourceLimits::Lower(RLIMIT_NPROC, 0)); errno = 0; pid_t pid = fork(); // Reap any child if fork succeeded. TestUtils::HandlePostForkReturn(pid); SANDBOX_ASSERT_EQ(-1, pid); CHECK_EQ(EAGAIN, errno); } } // namespace } // namespace sandbox