From 419f5e495b28f1babe75770e01b6e8e617b70adf Mon Sep 17 00:00:00 2001 From: Tomoki Shirasawa Date: Mon, 12 Sep 2016 15:40:33 +0900 Subject: [PATCH] set*[ug]id: propagate credentials to thread pool --- executer/user/mcexec.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c index 0e23a95f..32a1b8a5 100644 --- a/executer/user/mcexec.c +++ b/executer/user/mcexec.c @@ -2360,6 +2360,53 @@ return_execve2: do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); break; + case __NR_setresuid: + ret = setresuid(w.sr.args[0], w.sr.args[1], w.sr.args[2]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setreuid: + ret = setreuid(w.sr.args[0], w.sr.args[1]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setuid: + ret = setuid(w.sr.args[0]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setresgid: + ret = setresgid(w.sr.args[0], w.sr.args[1], w.sr.args[2]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setregid: + ret = setregid(w.sr.args[0], w.sr.args[1]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setgid: + ret = setgid(w.sr.args[0]); + if(ret == -1) + ret = -errno; + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + + case __NR_setfsgid: + ret = setfsgid(w.sr.args[0]); + do_syscall_return(fd, cpu, ret, 0, 0, 0, 0); + break; + case __NR_close: if(w.sr.args[0] == fd) ret = -EBADF;