1f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Copyright 2015 The Chromium Authors. All rights reserved.
2f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// Use of this source code is governed by a BSD-style license that can be
3f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// found in the LICENSE file.
4f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
5f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#ifndef SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_
6f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#define SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_
7f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
8f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include <sys/resource.h>
9f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
10f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "base/compiler_specific.h"
11f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "base/macros.h"
12f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#include "sandbox/sandbox_export.h"
13f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
14f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenkonamespace sandbox {
15f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
16f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko// This class provides a small wrapper around setrlimit().
17f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenkoclass SANDBOX_EXPORT ResourceLimits {
18f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko public:
19f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko  // Lower the soft and hard limit of |resource| to |limit|. If the current
20f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko  // limit is lower than |limit|, keep it.
21f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko  static bool Lower(int resource, rlim_t limit) WARN_UNUSED_RESULT;
22f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
23f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko private:
24f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko  DISALLOW_IMPLICIT_CONSTRUCTORS(ResourceLimits);
25f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko};
26f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
27f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko}  // namespace sandbox
28f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko
29f6024733c0d1eed88f68520b5e6a20b96e212ad6Alex Vakulenko#endif  // SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_
30