diff --git a/init/property_service.cpp b/init/property_service.cpp index 6321fb209..d70185094 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -57,6 +57,7 @@ #include "persistent_properties.h" #include "util.h" +using android::base::StartsWith; using android::base::StringPrintf; using android::base::Timer; @@ -153,7 +154,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu return PROP_ERROR_INVALID_NAME; } - if (valuelen >= PROP_VALUE_MAX) { + if (valuelen >= PROP_VALUE_MAX && !StartsWith(name, "ro.")) { LOG(ERROR) << "property_set(\"" << name << "\", \"" << value << "\") failed: " << "value too long"; return PROP_ERROR_INVALID_VALUE; @@ -162,7 +163,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu prop_info* pi = (prop_info*) __system_property_find(name.c_str()); if (pi != nullptr) { // ro.* properties are actually "write-once". - if (android::base::StartsWith(name, "ro.")) { + if (StartsWith(name, "ro.")) { LOG(ERROR) << "property_set(\"" << name << "\", \"" << value << "\") failed: " << "property already set"; return PROP_ERROR_READ_ONLY_PROPERTY; @@ -180,7 +181,7 @@ static uint32_t PropertySetImpl(const std::string& name, const std::string& valu // Don't write properties to disk until after we have read all default // properties to prevent them from being overwritten by default values. - if (persistent_properties_loaded && android::base::StartsWith(name, "persist.")) { + if (persistent_properties_loaded && StartsWith(name, "persist.")) { WritePersistentProperty(name, value); } property_changed(name, value); @@ -401,7 +402,7 @@ static void handle_property_set(SocketConnection& socket, char* source_ctx = nullptr; getpeercon(socket.socket(), &source_ctx); - if (android::base::StartsWith(name, "ctl.")) { + if (StartsWith(name, "ctl.")) { if (check_control_mac_perms(value.c_str(), source_ctx, &cr)) { handle_control_message(name.c_str() + 4, value.c_str()); if (!legacy_protocol) {