Message ID | 20200305202400.27574-1-tobias.koch@nonterra.com |
---|---|
State | New |
Headers | show |
Series | [v2] linux-user: do prlimit selectively | expand |
Le 05/03/2020 à 21:24, Tobias Koch a écrit : > 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> > --- > linux-user/syscall.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > 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; > } > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Le 05/03/2020 à 21:24, Tobias Koch a écrit : > 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> > --- > linux-user/syscall.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > 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; > } > Applied to my linux-user branch. Thanks, Laurent
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; }
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> --- linux-user/syscall.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)