blob: 0158139bbaec4b5b607a753a455751818d21571a [file] [log] [blame]
// 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.
#ifndef SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_
#define SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_
#include <sys/resource.h>
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "sandbox/sandbox_export.h"
namespace sandbox {
// This class provides a small wrapper around setrlimit().
class SANDBOX_EXPORT ResourceLimits {
public:
// Lower the soft and hard limit of |resource| to |limit|. If the current
// limit is lower than |limit|, keep it. Returns 0 on success, or |errno|.
static int Lower(int resource, rlim_t limit) WARN_UNUSED_RESULT;
// Lower the soft limit of |resource| to |limit| and the hard limit to |max|.
// If the current limit is lower than the new values, keep it. Returns 0 on
// success, or |errno|.
static int LowerSoftAndHardLimits(int resource,
rlim_t soft_limit,
rlim_t hard_limit) WARN_UNUSED_RESULT;
// Change soft limit of |resource| to the current limit plus |change|. If
// |resource + change| is larger than the hard limit, the soft limit is set to
// be the same as the hard limit. Fails and returns false if the underlying
// call to setrlimit fails. Returns 0 on success, or |errno|.
static int AdjustCurrent(int resource,
long long int change) WARN_UNUSED_RESULT;
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(ResourceLimits);
};
} // namespace sandbox
#endif // SANDBOX_LINUX_SERVICES_RESOURCE_LIMITS_H_