From 1cf8d699a41d23f8c1437b4dacb0e71c0fec65ff Mon Sep 17 00:00:00 2001 From: Tom Cherry Date: Tue, 10 Oct 2017 13:35:01 -0700 Subject: [PATCH] Allow setting read-only properties with value length > 92 characters Bug: 23102347 Bug: 34954705 Test: read and write properties with value length > 92 characters Change-Id: Ie196c1fdacc0489508c633e98fe9f4ad7a27dc6e --- init/property_service.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/init/property_service.cpp b/init/property_service.cpp index 0df96bfff..223d34e8a 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) {