diff --git a/init/service.cpp b/init/service.cpp index 833473295..a6330484a 100644 --- a/init/service.cpp +++ b/init/service.cpp @@ -340,9 +340,18 @@ void Service::Reap(const siginfo_t& siginfo) { siginfo.si_status == BIONIC_SIGNAL_ART_PROFILER && !upgraded_mte_; if (should_upgrade_mte) { - LOG(INFO) << "Upgrading service " << name_ << " to sync MTE"; - once_environment_vars_.emplace_back("BIONIC_MEMTAG_UPGRADE_SECS", "60"); - upgraded_mte_ = true; + constexpr int kDefaultUpgradeSecs = 60; + int secs = GetIntProperty("persist.device_config.memory_safety_native.upgrade_secs.default", + kDefaultUpgradeSecs); + secs = GetIntProperty( + "persist.device_config.memory_safety_native.upgrade_secs.service." + name_, secs); + if (secs > 0) { + LOG(INFO) << "Upgrading service " << name_ << " to sync MTE for " << secs << " seconds"; + once_environment_vars_.emplace_back("BIONIC_MEMTAG_UPGRADE_SECS", std::to_string(secs)); + upgraded_mte_ = true; + } else { + LOG(INFO) << "Not upgrading service " << name_ << " to sync MTE due to device config"; + } } #endif