diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-06-13 02:09:12 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-06-13 02:09:12 +0000 |
commit | d3011a00ae3c3d232b778e5139a44e22cb89d587 (patch) | |
tree | 1e00514239beb80e012935f9aa48cf5d061bc87a /init/service.cpp | |
parent | 32ab56890a47c495101d3d1a689703bbbf70a43a (diff) | |
parent | fa65517cd73ef340e9a2decc59af814ded969daa (diff) |
Snap for 6586161 from fa65517cd73ef340e9a2decc59af814ded969daa to sc-release
Change-Id: I9f9b7239342c2bb743382b58ae3a498b79d931ff
Diffstat (limited to 'init/service.cpp')
-rw-r--r-- | init/service.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/init/service.cpp b/init/service.cpp index 165b848a25..68365b3c35 100644 --- a/init/service.cpp +++ b/init/service.cpp @@ -465,6 +465,16 @@ Result<void> Service::Start() { pre_apexd_ = true; } + // For pre-apexd services, override mount namespace as "bootstrap" one before starting. + // Note: "ueventd" is supposed to be run in "default" mount namespace even if it's pre-apexd + // to support loading firmwares from APEXes. + std::optional<MountNamespace> override_mount_namespace; + if (name_ == "ueventd") { + override_mount_namespace = NS_DEFAULT; + } else if (pre_apexd_) { + override_mount_namespace = NS_BOOTSTRAP; + } + post_data_ = ServiceList::GetInstance().IsPostData(); LOG(INFO) << "starting service '" << name_ << "'..."; @@ -496,7 +506,8 @@ Result<void> Service::Start() { if (pid == 0) { umask(077); - if (auto result = EnterNamespaces(namespaces_, name_, pre_apexd_); !result.ok()) { + if (auto result = EnterNamespaces(namespaces_, name_, override_mount_namespace); + !result.ok()) { LOG(FATAL) << "Service '" << name_ << "' failed to set up namespaces: " << result.error(); } |