summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-08-03 22:39:12 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-08-03 22:39:12 +0000
commit2147dc738bcbe00d82c3296f577687576d605b15 (patch)
treeda416e2c3c8ca2535c1dd2730164fb68d0847078
parentc1e9a49b189b383f1cfa95d96713c5d9f6506333 (diff)
parent140f65189fd2aaa43bc991556a9678a4ff981731 (diff)
downloadnative-2147dc738bcbe00d82c3296f577687576d605b15.tar.gz
Merge "GpuService: secure setUpdatableDriverPath" into rvc-dev am: 916c766b31 am: 140f65189f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/12257974 Change-Id: I925d222edd02bee881630b5199dde18c95c3735c
-rw-r--r--services/gpuservice/GpuService.cpp16
-rw-r--r--services/gpuservice/GpuService.h3
2 files changed, 16 insertions, 3 deletions
diff --git a/services/gpuservice/GpuService.cpp b/services/gpuservice/GpuService.cpp
index 304f1d059e..81b0a46e0c 100644
--- a/services/gpuservice/GpuService.cpp
+++ b/services/gpuservice/GpuService.cpp
@@ -63,11 +63,23 @@ void GpuService::setTargetStats(const std::string& appPackageName, const uint64_
}
void GpuService::setUpdatableDriverPath(const std::string& driverPath) {
- developerDriverPath = driverPath;
+ IPCThreadState* ipc = IPCThreadState::self();
+ const int pid = ipc->getCallingPid();
+ const int uid = ipc->getCallingUid();
+
+ // only system_server is allowed to set updatable driver path
+ if (uid != AID_SYSTEM) {
+ ALOGE("Permission Denial: can't set updatable driver path from pid=%d, uid=%d\n", pid, uid);
+ return;
+ }
+
+ std::lock_guard<std::mutex> lock(mLock);
+ mDeveloperDriverPath = driverPath;
}
std::string GpuService::getUpdatableDriverPath() {
- return developerDriverPath;
+ std::lock_guard<std::mutex> lock(mLock);
+ return mDeveloperDriverPath;
}
status_t GpuService::shellCommand(int /*in*/, int out, int err, std::vector<String16>& args) {
diff --git a/services/gpuservice/GpuService.h b/services/gpuservice/GpuService.h
index ba44fe04d4..d1c3aabcce 100644
--- a/services/gpuservice/GpuService.h
+++ b/services/gpuservice/GpuService.h
@@ -75,7 +75,8 @@ private:
* Attributes
*/
std::unique_ptr<GpuStats> mGpuStats;
- std::string developerDriverPath;
+ std::mutex mLock;
+ std::string mDeveloperDriverPath;
};
} // namespace android