summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Cherry <tomcherry@google.com>2017-09-06 16:58:23 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-09-06 16:58:23 +0000
commit2827106d7d95b5e2d41b846f1505fbfacc56d850 (patch)
tree2c48c5e91adc2acb17112bb7929bcef50201f1d2
parent9c8781f4795ebe648f1efa00acbf09f39f77f75f (diff)
parenta84e14da1e09b8ed00bc66cacf5cae1d3295670d (diff)
downloadsystem_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.cpp16
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);