Zygote: Additional whitelists for runtime overlay / other static resources.
Partially cherry picked from commit1c15c63578. These files are safe to reopen for the same reason that files in /system/framework are. They're regular files and will not change after the first zygote fork. (cherry picked from commit25cd01cc69) Bug: 32618130 Test: m Change-Id: I119e0bfcbf397cb331064adf148d92a5cd3ea92f
This commit is contained in:
committed by
Andreas Gampe
parent
6a9ad14172
commit
0ff7ef60f5
@@ -241,6 +241,18 @@ class FileDescriptorInfo {
|
|||||||
is_sock(false) {
|
is_sock(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool StartsWith(const std::string& str, const std::string& prefix) {
|
||||||
|
return str.compare(0, prefix.size(), prefix) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool EndsWith(const std::string& str, const std::string& suffix) {
|
||||||
|
if (suffix.size() > str.size()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns true iff. a given path is whitelisted. A path is whitelisted
|
// Returns true iff. a given path is whitelisted. A path is whitelisted
|
||||||
// if it belongs to the whitelist (see kPathWhitelist) or if it's a path
|
// if it belongs to the whitelist (see kPathWhitelist) or if it's a path
|
||||||
// under /system/framework that ends with ".jar" or if it is a system
|
// under /system/framework that ends with ".jar" or if it is a system
|
||||||
@@ -252,31 +264,34 @@ class FileDescriptorInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* kFrameworksPrefix = "/system/framework/";
|
static const std::string kFrameworksPrefix = "/system/framework/";
|
||||||
static const char* kJarSuffix = ".jar";
|
static const std::string kJarSuffix = ".jar";
|
||||||
if (android::base::StartsWith(path, kFrameworksPrefix)
|
if (StartsWith(path, kFrameworksPrefix) && EndsWith(path, kJarSuffix)) {
|
||||||
&& android::base::EndsWith(path, kJarSuffix)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Whitelist files needed for Runtime Resource Overlay, like these:
|
// Whitelist files needed for Runtime Resource Overlay, like these:
|
||||||
// /system/vendor/overlay/framework-res.apk
|
// /system/vendor/overlay/framework-res.apk
|
||||||
// /system/vendor/overlay/PG/android-framework-runtime-resource-overlay.apk
|
// /system/vendor/overlay-subdir/pg/framework-res.apk
|
||||||
// /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap
|
// /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap
|
||||||
// /data/resource-cache/system@vendor@overlay@PG@framework-res.apk@idmap
|
// /data/resource-cache/system@vendor@overlay-subdir@pg@framework-res.apk@idmap
|
||||||
static const char* kOverlayDir = "/system/vendor/overlay/";
|
// See AssetManager.cpp for more details on overlay-subdir.
|
||||||
static const char* kApkSuffix = ".apk";
|
static const std::string kOverlayDir = "/system/vendor/overlay/";
|
||||||
|
static const std::string kVendorOverlayDir = "/vendor/overlay";
|
||||||
|
static const std::string kOverlaySubdir = "/system/vendor/overlay-subdir/";
|
||||||
|
static const std::string kApkSuffix = ".apk";
|
||||||
|
|
||||||
if (android::base::StartsWith(path, kOverlayDir)
|
if ((StartsWith(path, kOverlayDir) || StartsWith(path, kOverlaySubdir)
|
||||||
&& android::base::EndsWith(path, kApkSuffix)
|
|| StartsWith(path, kVendorOverlayDir))
|
||||||
|
&& EndsWith(path, kApkSuffix)
|
||||||
&& path.find("/../") == std::string::npos) {
|
&& path.find("/../") == std::string::npos) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* kOverlayIdmapPrefix = "/data/resource-cache/";
|
static const std::string kOverlayIdmapPrefix = "/data/resource-cache/";
|
||||||
static const char* kOverlayIdmapSuffix = ".apk@idmap";
|
static const std::string kOverlayIdmapSuffix = ".apk@idmap";
|
||||||
if (android::base::StartsWith(path, kOverlayIdmapPrefix)
|
if (StartsWith(path, kOverlayIdmapPrefix) && EndsWith(path, kOverlayIdmapSuffix)
|
||||||
&& android::base::EndsWith(path, kOverlayIdmapSuffix)) {
|
&& path.find("/../") == std::string::npos) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user