summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2018-04-11 15:50:00 -0700
committerTom Cherry <tomcherry@google.com>2018-04-12 15:33:15 -0700
commit125781255e34f0dd0973f22e30399ef0956d0e8b (patch)
treeb9fd524c3e8a6321a3ced22cdc5f3fc31fb93779
parentc43dd75194faa01b14250ed2f1a914187c28b3b4 (diff)
downloadcore-125781255e34f0dd0973f22e30399ef0956d0e8b.tar.gz
core-125781255e34f0dd0973f22e30399ef0956d0e8b.tar.bz2
core-125781255e34f0dd0973f22e30399ef0956d0e8b.zip
init: do not impose vendor_init restrictions on old vendor images
Do not restrict vendor_init restrictions on vendor images that were built before P, as they will not have the correct permissions. Bug: 77732028 Test: test new devices and see vendor_init still works Merged-In: I636a07b54fbfb248e1d1a68a8f3c4d047fd5a9e9 Change-Id: I636a07b54fbfb248e1d1a68a8f3c4d047fd5a9e9 (cherry picked from commit a1dbeb8d338017715ae7747e5a7a3999a54e7213)
-rw-r--r--init/host_init_stubs.h5
-rw-r--r--init/property_service.cpp9
-rw-r--r--init/subcontext.cpp9
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;
}