]> git.ipfire.org Git - thirdparty/glibc.git/blame - resource/vlimit.c
elf: Refuse to dlopen PIE objects [BZ #24323]
[thirdparty/glibc.git] / resource / vlimit.c
CommitLineData
04277e02 1/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
478b92f0
UD
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
478b92f0
UD
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 12 Lesser General Public License for more details.
478b92f0 13
41bdb6e2 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
28f540f4
RM
17
18/* This is generic in the sense that it will work with the BSD, SYSV,
19 or stub versions of getrlimit. Separate versions could be written
20 for efficiency, but it's probably not worth it. */
21
28f540f4
RM
22#include <sys/vlimit.h>
23#include <sys/resource.h>
24#include <errno.h>
25
26/* Set the soft limit for RESOURCE to be VALUE.
27 Returns 0 for success, -1 for failure. */
28int
9d46370c 29vlimit (enum __vlimit_resource resource, int value)
28f540f4
RM
30{
31 if (resource >= LIM_CPU && resource <= LIM_MAXRSS)
32 {
33 /* The rlimit codes happen to each be one less
34 than the corresponding vlimit codes. */
35 enum __rlimit_resource rlimit_res =
36 (enum __rlimit_resource) ((int) resource - 1);
37 struct rlimit lims;
38
50304ef0 39 if (__getrlimit (rlimit_res, &lims) < 0)
28f540f4
RM
40 return -1;
41
42 lims.rlim_cur = value;
4aebaa6b 43 return __setrlimit (rlimit_res, &lims);
28f540f4
RM
44 }
45
c4029823 46 __set_errno (EINVAL);
28f540f4
RM
47 return -1;
48}