diff options
author | Mark Salyzyn <salyzyn@google.com> | 2016-08-11 16:07:10 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2016-08-12 07:31:47 -0700 |
commit | f34d76ea650b1b05424293fe0b6e27bb71e9ca4e (patch) | |
tree | 058f05c80b027e1fc6dad537d7014751c1492dce | |
parent | c1167dd4c96a1638a5e5bb163d225abb99b15816 (diff) |
logd: klogd crash (part deux)
(cherry pick from commit 83b247891cea88347b759d638814cea61995d2ca)
LogBuffer::pidToUid(pid_t pid) { return stats.pidToUid(pid); }
needs to have LogBuffer::lock()/unlock() to prevent unordered_map
data corruption. This can lead to multiple symptoms, crashes and
continuous spins on corrupted iterators.
Bug: 30688716
Bug: 30050636
Bug: 30614675
Bug: 25620123
Bug: 30792935
Change-Id: I1d8fec8e5fda98c6a08645e7456b081507696b3c
-rw-r--r-- | logd/LogKlog.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/logd/LogKlog.cpp b/logd/LogKlog.cpp index da0aecc39..c7506efb8 100644 --- a/logd/LogKlog.cpp +++ b/logd/LogKlog.cpp @@ -26,6 +26,7 @@ #include <syslog.h> #include <log/logger.h> +#include <private/android_filesystem_config.h> #include "LogBuffer.h" #include "LogKlog.h" @@ -614,7 +615,12 @@ int LogKlog::log(const char *buf, size_t len) { // Parse pid, tid and uid const pid_t pid = sniffPid(&p, len - (p - buf)); const pid_t tid = pid; - const uid_t uid = pid ? logbuf->pidToUid(pid) : 0; + uid_t uid = AID_ROOT; + if (pid) { + logbuf->lock(); + uid = logbuf->pidToUid(pid); + logbuf->unlock(); + } // Parse (rules at top) to pull out a tag from the incoming kernel message. // Some may view the following as an ugly heuristic, the desire is to |