diff options
-rw-r--r-- | init/host_init_stubs.h | 5 | ||||
-rw-r--r-- | init/property_service.cpp | 9 | ||||
-rw-r--r-- | init/subcontext.cpp | 9 |
3 files changed, 18 insertions, 5 deletions
diff --git a/init/host_init_stubs.h b/init/host_init_stubs.h index f31ece60c..ddfb7ae7d 100644 --- a/init/host_init_stubs.h +++ b/init/host_init_stubs.h @@ -35,6 +35,11 @@ namespace base { std::string GetProperty(const std::string& key, const std::string& default_value); bool GetBoolProperty(const std::string& key, bool default_value); +template <typename T> +T GetIntProperty(const std::string&, T default_value, T = std::numeric_limits<T>::min(), + T = std::numeric_limits<T>::max()) { + return default_value; +} } // namespace base } // namespace android diff --git a/init/property_service.cpp b/init/property_service.cpp index 95ef35c30..99d3c83b1 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -64,6 +64,7 @@ using namespace std::literals; +using android::base::GetIntProperty; using android::base::ReadFileToString; using android::base::Split; using android::base::StartsWith; @@ -541,9 +542,11 @@ static void LoadProperties(char* data, const char* filter, const char* filename) size_t flen = 0; const char* context = kInitContext.c_str(); - for (const auto& [path_prefix, secontext] : paths_and_secontexts) { - if (StartsWith(filename, path_prefix)) { - context = secontext; + if (GetIntProperty("ro.vndk.version", 28) >= 28) { + for (const auto& [path_prefix, secontext] : paths_and_secontexts) { + if (StartsWith(filename, path_prefix)) { + context = secontext; + } } } diff --git a/init/subcontext.cpp b/init/subcontext.cpp index c1846f76d..9c0c0bb4f 100644 --- a/init/subcontext.cpp +++ b/init/subcontext.cpp @@ -30,6 +30,8 @@ #include "util.h" #if defined(__ANDROID__) +#include <android-base/properties.h> + #include "property_service.h" #include "selinux.h" #else @@ -37,6 +39,7 @@ #endif using android::base::GetExecutablePath; +using android::base::GetIntProperty; using android::base::Join; using android::base::Socketpair; using android::base::Split; @@ -354,8 +357,10 @@ Result<std::vector<std::string>> Subcontext::ExpandArgs(const std::vector<std::s static std::vector<Subcontext> subcontexts; std::vector<Subcontext>* InitializeSubcontexts() { - for (const auto& [path_prefix, secontext] : paths_and_secontexts) { - subcontexts.emplace_back(path_prefix, secontext); + if (GetIntProperty("ro.vndk.version", 28) >= 28) { + for (const auto& [path_prefix, secontext] : paths_and_secontexts) { + subcontexts.emplace_back(path_prefix, secontext); + } } return &subcontexts; } |