diff options
author | Tom Cherry <tomcherry@google.com> | 2017-09-06 16:58:23 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-09-06 16:58:23 +0000 |
commit | 2827106d7d95b5e2d41b846f1505fbfacc56d850 (patch) | |
tree | 2c48c5e91adc2acb17112bb7929bcef50201f1d2 | |
parent | 9c8781f4795ebe648f1efa00acbf09f39f77f75f (diff) | |
parent | a84e14da1e09b8ed00bc66cacf5cae1d3295670d (diff) | |
download | system_core-2827106d7d95b5e2d41b846f1505fbfacc56d850.tar.gz system_core-2827106d7d95b5e2d41b846f1505fbfacc56d850.tar.bz2 system_core-2827106d7d95b5e2d41b846f1505fbfacc56d850.zip |
Merge "Log pid for writes to sys.powerctl"
-rw-r--r-- | init/property_service.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/init/property_service.cpp b/init/property_service.cpp index 8c592cb41..5f5ed400a 100644 --- a/init/property_service.cpp +++ b/init/property_service.cpp @@ -45,6 +45,7 @@ #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/properties.h> +#include <android-base/stringprintf.h> #include <android-base/strings.h> #include <bootimg.h> #include <fs_mgr.h> @@ -56,6 +57,7 @@ #include "persistent_properties.h" #include "util.h" +using android::base::StringPrintf; using android::base::Timer; #define RECOVERY_MOUNT_POINT "/recovery" @@ -418,6 +420,20 @@ static void handle_property_set(SocketConnection& socket, } } else { if (check_mac_perms(name, source_ctx, &cr)) { + // sys.powerctl is a special property that is used to make the device reboot. We want to log + // any process that sets this property to be able to accurately blame the cause of a shutdown. + if (name == "sys.powerctl") { + std::string cmdline_path = StringPrintf("proc/%d/cmdline", cr.pid); + std::string process_cmdline; + std::string process_log_string; + if (android::base::ReadFileToString(cmdline_path, &process_cmdline)) { + // Since cmdline is null deliminated, .c_str() conveniently gives us just the process path. + process_log_string = StringPrintf(" (%s)", process_cmdline.c_str()); + } + LOG(INFO) << "Received sys.powerctl='" << value << "' from pid: " << cr.pid + << process_log_string; + } + uint32_t result = property_set(name, value); if (!legacy_protocol) { socket.SendUint32(result); |