summaryrefslogtreecommitdiffstats
path: root/cmds
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2010-08-31 18:17:31 -0700
committerNick Kralevich <nnk@google.com>2010-09-01 14:44:54 -0700
commit05f0382bcf11d96760ee8cf9110099a1661eed7c (patch)
tree985953553de3b1b525757b5110f0aab261c9f123 /cmds
parent81f339bcfeee5dccb284cdeac6941179f91fe08b (diff)
downloadframeworks_base-05f0382bcf11d96760ee8cf9110099a1661eed7c.zip
frameworks_base-05f0382bcf11d96760ee8cf9110099a1661eed7c.tar.gz
frameworks_base-05f0382bcf11d96760ee8cf9110099a1661eed7c.tar.bz2
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
Diffstat (limited to 'cmds')
-rw-r--r--cmds/dumpstate/dumpstate.c14
1 files changed, 12 insertions, 2 deletions
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;