summaryrefslogtreecommitdiff
path: root/libs/androidfw/PosixUtils.cpp
diff options
context:
space:
mode:
author Xin Li <delphij@google.com> 2019-09-04 13:33:59 -0700
committer Xin Li <delphij@google.com> 2019-09-04 13:33:59 -0700
commite199ca954dff7fdfb06e6280695d34a957ed5efc (patch)
tree78be7fa3d9855c2a536e80ed4e7360845a968791 /libs/androidfw/PosixUtils.cpp
parent1bc876bb5b2b8506fe5e47421456c36ba4eefdea (diff)
parent9e89d13906739e856ed809ba81c32415770717c6 (diff)
DO NOT MERGE - Merge Android 10 into master
Bug: 139893257 Change-Id: I9e3c4fe5406c9913d50fe3b07d7f7cef7a246b96
Diffstat (limited to 'libs/androidfw/PosixUtils.cpp')
-rw-r--r--libs/androidfw/PosixUtils.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/libs/androidfw/PosixUtils.cpp b/libs/androidfw/PosixUtils.cpp
index df0dd7ce463d..f1ab1493012a 100644
--- a/libs/androidfw/PosixUtils.cpp
+++ b/libs/androidfw/PosixUtils.cpp
@@ -64,6 +64,9 @@ std::unique_ptr<ProcResult> ExecuteBinary(const std::vector<std::string>& argv)
return nullptr;
}
+ auto gid = getgid();
+ auto uid = getuid();
+
char const** argv0 = (char const**)malloc(sizeof(char*) * (argv.size() + 1));
for (size_t i = 0; i < argv.size(); i++) {
argv0[i] = argv[i].c_str();
@@ -75,6 +78,16 @@ std::unique_ptr<ProcResult> ExecuteBinary(const std::vector<std::string>& argv)
PLOG(ERROR) << "fork";
return nullptr;
case 0: // child
+ if (setgid(gid) != 0) {
+ PLOG(ERROR) << "setgid";
+ exit(1);
+ }
+
+ if (setuid(uid) != 0) {
+ PLOG(ERROR) << "setuid";
+ exit(1);
+ }
+
close(stdout[0]);
if (dup2(stdout[1], STDOUT_FILENO) == -1) {
abort();