aboutsummaryrefslogtreecommitdiff
path: root/linux-user/syscall.c
diff options
context:
space:
mode:
authorTobias Koch <tobias.koch@nonterra.com>2020-03-05 21:24:00 +0100
committerLaurent Vivier <laurent@vivier.eu>2020-03-20 15:51:54 +0100
commit055d92f8673c9e2bc284a5976e69664c87f18cae (patch)
tree96dbdb7026a55afa36ad09eb4decc6d6ed064e50 /linux-user/syscall.c
parente0d1673d39c1768f5372a43771d3776354eb3f96 (diff)
linux-user: do prlimit selectively
Analogous to what commit 5dfa88f7 did for setrlimit, this commit selectively ignores limits for memory-related resources in prlimit64 calls. This is to prevent too restrictive limits from causing QEMU itself to malfunction. Signed-off-by: Tobias Koch <tobias.koch@nonterra.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200305202400.27574-1-tobias.koch@nonterra.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'linux-user/syscall.c')
-rw-r--r--linux-user/syscall.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 8d27d10807..4f2f9eb12b 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11871,7 +11871,10 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
struct target_rlimit64 *target_rnew, *target_rold;
struct host_rlimit64 rnew, rold, *rnewp = 0;
int resource = target_to_host_resource(arg2);
- if (arg3) {
+
+ if (arg3 && (resource != RLIMIT_AS &&
+ resource != RLIMIT_DATA &&
+ resource != RLIMIT_STACK)) {
if (!lock_user_struct(VERIFY_READ, target_rnew, arg3, 1)) {
return -TARGET_EFAULT;
}