Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b759ceeb authored by Jaekyun Seok's avatar Jaekyun Seok Committed by android-build-merger
Browse files

Merge "Apply the whitelist of actionable system properties"

am: 2c4f487d

Change-Id: I4668917ec7e27640a95a577e816afd72f37db91f
parents 3657c80c 2c4f487d
Loading
Loading
Loading
Loading
+24 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@
#include <android-base/properties.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <android-base/strings.h>


#include "stable_properties.h"
#include "util.h"
#include "util.h"


using android::base::Join;
using android::base::Join;
@@ -134,6 +135,25 @@ void Action::ExecuteCommand(const Command& command) const {
    }
    }
}
}


static bool IsActionableProperty(Subcontext* subcontext, const std::string& prop_name) {
    static bool enabled =
        android::base::GetBoolProperty("ro.actionable_compatible_property.enabled", false);

    if (subcontext == nullptr || !enabled) {
        return true;
    }

    if (kExportedActionableProperties.count(prop_name) == 1) {
        return true;
    }
    for (const auto& prefix : kPartnerPrefixes) {
        if (android::base::StartsWith(prop_name, prefix)) {
            return true;
        }
    }
    return false;
}

Result<Success> Action::ParsePropertyTrigger(const std::string& trigger) {
Result<Success> Action::ParsePropertyTrigger(const std::string& trigger) {
    const static std::string prop_str("property:");
    const static std::string prop_str("property:");
    std::string prop_name(trigger.substr(prop_str.length()));
    std::string prop_name(trigger.substr(prop_str.length()));
@@ -145,6 +165,10 @@ Result<Success> Action::ParsePropertyTrigger(const std::string& trigger) {
    std::string prop_value(prop_name.substr(equal_pos + 1));
    std::string prop_value(prop_name.substr(equal_pos + 1));
    prop_name.erase(equal_pos);
    prop_name.erase(equal_pos);


    if (!IsActionableProperty(subcontext_, prop_name)) {
        return Error() << "unexported property tigger found: " << prop_name;
    }

    if (auto [it, inserted] = property_triggers_.emplace(prop_name, prop_value); !inserted) {
    if (auto [it, inserted] = property_triggers_.emplace(prop_name, prop_value); !inserted) {
        return Error() << "multiple property triggers found for same property";
        return Error() << "multiple property triggers found for same property";
    }
    }
+46 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _INIT_STABLE_PROPERTIES_H
#define _INIT_STABLE_PROPERTIES_H

#include <set>
#include <string>

namespace android {
namespace init {

static constexpr const char* kPartnerPrefixes[] = {
    "init.svc.vendor.", "ro.vendor.", "persist.vendor.", "vendor.",
    "init.svc.odm.",    "ro.odm.",    "persist.odm.",    "odm.",
};

static const std::set<std::string> kExportedActionableProperties = {
    "init.svc.zygote",         "persist.bluetooth.btsnoopenable",
    "persist.sys.crash_rcu",   "persist.sys.zram_enabled",
    "ro.boot.revision",        "ro.bootmode",
    "ro.build.type",           "sys.boot_completed",
    "sys.retaildemo.enabled",  "sys.shutdown.requested",
    "sys.usb.config",          "sys.usb.configfs",
    "sys.usb.ffs.mtp.ready",   "sys.usb.ffs.ready",
    "sys.user.0.ce_available", "sys.vdso",
    "vts.native_server.on",
};

}  // namespace init
}  // namespace android

#endif