From 05f0382bcf11d96760ee8cf9110099a1661eed7c Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Tue, 31 Aug 2010 18:17:31 -0700 Subject: When dropping privileges, check return values. setuid() and family can fail. Check return values to make sure this doesn't happen unexpectedly. Also call setgid() to drop root group permissions. Change-Id: Id06fbe6239e2ed2fe23368695e333514e0581e6d --- cmds/dumpstate/dumpstate.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'cmds/dumpstate') diff --git a/cmds/dumpstate/dumpstate.c b/cmds/dumpstate/dumpstate.c index 082e704..6e9caaf 100644 --- a/cmds/dumpstate/dumpstate.c +++ b/cmds/dumpstate/dumpstate.c @@ -218,8 +218,18 @@ int main(int argc, char *argv[]) { /* switch to non-root user and group */ gid_t groups[] = { AID_LOG, AID_SDCARD_RW, AID_MOUNT }; - setgroups(sizeof(groups)/sizeof(groups[0]), groups); - setuid(AID_SHELL); + if (setgroups(sizeof(groups)/sizeof(groups[0]), groups) != 0) { + LOGE("Unable to setgroups, aborting: %s\n", strerror(errno)); + return -1; + } + if (setgid(AID_SHELL) != 0) { + LOGE("Unable to setgid, aborting: %s\n", strerror(errno)); + return -1; + } + if (setuid(AID_SHELL) != 0) { + LOGE("Unable to setuid, aborting: %s\n", strerror(errno)); + return -1; + } char path[PATH_MAX], tmp_path[PATH_MAX]; pid_t gzip_pid = -1; -- cgit v1.1