diff options
author | Paul Lawrence <paullawrence@google.com> | 2023-07-17 16:51:58 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-07-17 16:51:58 +0000 |
commit | af594059f43953388c5e2c9c8058f813e1815532 (patch) | |
tree | 6baba7328151044f116f8e1064bf572ec8d687e3 | |
parent | ace36e9ce77f1c2b171559a324c9c97c139c29ef (diff) | |
parent | d1076eb72871c7d5c8c921bcc6fa23b1349d50d1 (diff) | |
download | bionic-af594059f43953388c5e2c9c8058f813e1815532.tar.gz |
Revert "Fix deadlock caused by two-threaded property controls" am: d1076eb728
Original change: https://googleplex-android-review.googlesource.com/c/platform/bionic/+/24028888
Change-Id: I7dd0f039c1a08dca7904581762f30d9c026507ae
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | libc/bionic/system_property_set.cpp | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/libc/bionic/system_property_set.cpp b/libc/bionic/system_property_set.cpp index 845ff27e6..bde0c1002 100644 --- a/libc/bionic/system_property_set.cpp +++ b/libc/bionic/system_property_set.cpp @@ -55,24 +55,16 @@ static const char* kServiceVersionPropertyName = "ro.property_service.version"; class PropertyServiceConnection { public: - PropertyServiceConnection(const char* name) : last_error_(0) { + PropertyServiceConnection() : last_error_(0) { socket_.reset(::socket(AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0)); if (socket_.get() == -1) { last_error_ = errno; return; } - // If we're trying to set "sys.powerctl" from a privileged process, use the special - // socket. Because this socket is only accessible to privileged processes, it can't - // be DoSed directly by malicious apps. (The shell user should be able to reboot, - // though, so we don't just always use the special socket for "sys.powerctl".) - // See b/262237198 for context - const char* socket = property_service_socket; - if (strcmp(name, "sys.powerctl") == 0 && - access(property_service_for_system_socket, W_OK) == 0) { - socket = property_service_for_system_socket; - } - + const char* socket = access(property_service_for_system_socket, W_OK) == 0 + ? property_service_for_system_socket + : property_service_socket; const size_t namelen = strlen(socket); sockaddr_un addr; memset(&addr, 0, sizeof(addr)); @@ -189,7 +181,7 @@ struct prop_msg { }; static int send_prop_msg(const prop_msg* msg) { - PropertyServiceConnection connection(msg->name); + PropertyServiceConnection connection; if (!connection.IsValid()) { return connection.GetLastError(); } @@ -282,7 +274,7 @@ int __system_property_set(const char* key, const char* value) { // New protocol only allows long values for ro. properties only. if (strlen(value) >= PROP_VALUE_MAX && strncmp(key, "ro.", 3) != 0) return -1; // Use proper protocol - PropertyServiceConnection connection(key); + PropertyServiceConnection connection; if (!connection.IsValid()) { errno = connection.GetLastError(); async_safe_format_log( |