Merge "logd: serialize accesses to stats helpers"
This commit is contained in:
commit
3c233b36c2
4 changed files with 19 additions and 4 deletions
|
|
@ -145,7 +145,9 @@ int LogAudit::logPrint(const char *fmt, ...) {
|
||||||
++cp;
|
++cp;
|
||||||
}
|
}
|
||||||
tid = pid;
|
tid = pid;
|
||||||
|
logbuf->lock();
|
||||||
uid = logbuf->pidToUid(pid);
|
uid = logbuf->pidToUid(pid);
|
||||||
|
logbuf->unlock();
|
||||||
memmove(pidptr, cp, strlen(cp) + 1);
|
memmove(pidptr, cp, strlen(cp) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,14 +182,20 @@ int LogAudit::logPrint(const char *fmt, ...) {
|
||||||
static const char comm_str[] = " comm=\"";
|
static const char comm_str[] = " comm=\"";
|
||||||
const char *comm = strstr(str, comm_str);
|
const char *comm = strstr(str, comm_str);
|
||||||
const char *estr = str + strlen(str);
|
const char *estr = str + strlen(str);
|
||||||
|
char *commfree = NULL;
|
||||||
if (comm) {
|
if (comm) {
|
||||||
estr = comm;
|
estr = comm;
|
||||||
comm += sizeof(comm_str) - 1;
|
comm += sizeof(comm_str) - 1;
|
||||||
} else if (pid == getpid()) {
|
} else if (pid == getpid()) {
|
||||||
pid = tid;
|
pid = tid;
|
||||||
comm = "auditd";
|
comm = "auditd";
|
||||||
} else if (!(comm = logbuf->pidToName(pid))) {
|
} else {
|
||||||
comm = "unknown";
|
logbuf->lock();
|
||||||
|
comm = commfree = logbuf->pidToName(pid);
|
||||||
|
logbuf->unlock();
|
||||||
|
if (!comm) {
|
||||||
|
comm = "unknown";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *ecomm = strchr(comm, '"');
|
const char *ecomm = strchr(comm, '"');
|
||||||
|
|
@ -218,6 +226,7 @@ int LogAudit::logPrint(const char *fmt, ...) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(commfree);
|
||||||
free(str);
|
free(str);
|
||||||
|
|
||||||
if (notify) {
|
if (notify) {
|
||||||
|
|
|
||||||
|
|
@ -71,10 +71,12 @@ public:
|
||||||
// *strp uses malloc, use free to release.
|
// *strp uses malloc, use free to release.
|
||||||
void formatPrune(char **strp) { mPrune.format(strp); }
|
void formatPrune(char **strp) { mPrune.format(strp); }
|
||||||
|
|
||||||
// helper
|
// helper must be protected directly or implicitly by lock()/unlock()
|
||||||
char *pidToName(pid_t pid) { return stats.pidToName(pid); }
|
char *pidToName(pid_t pid) { return stats.pidToName(pid); }
|
||||||
uid_t pidToUid(pid_t pid) { return stats.pidToUid(pid); }
|
uid_t pidToUid(pid_t pid) { return stats.pidToUid(pid); }
|
||||||
char *uidToName(uid_t uid) { return stats.uidToName(uid); }
|
char *uidToName(uid_t uid) { return stats.uidToName(uid); }
|
||||||
|
void lock() { pthread_mutex_lock(&mLogElementsLock); }
|
||||||
|
void unlock() { pthread_mutex_unlock(&mLogElementsLock); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void maybePrune(log_id_t id);
|
void maybePrune(log_id_t id);
|
||||||
|
|
|
||||||
|
|
@ -111,13 +111,17 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char format_uid[] = "uid=%u%s%s expire %u line%s";
|
static const char format_uid[] = "uid=%u%s%s expire %u line%s";
|
||||||
|
parent->lock();
|
||||||
char *name = parent->uidToName(mUid);
|
char *name = parent->uidToName(mUid);
|
||||||
|
parent->unlock();
|
||||||
char *commName = android::tidToName(mTid);
|
char *commName = android::tidToName(mTid);
|
||||||
if (!commName && (mTid != mPid)) {
|
if (!commName && (mTid != mPid)) {
|
||||||
commName = android::tidToName(mPid);
|
commName = android::tidToName(mPid);
|
||||||
}
|
}
|
||||||
if (!commName) {
|
if (!commName) {
|
||||||
|
parent->lock();
|
||||||
commName = parent->pidToName(mPid);
|
commName = parent->pidToName(mPid);
|
||||||
|
parent->unlock();
|
||||||
}
|
}
|
||||||
size_t len = name ? strlen(name) : 0;
|
size_t len = name ? strlen(name) : 0;
|
||||||
if (len && commName && !strncmp(name, commName, len)) {
|
if (len && commName && !strncmp(name, commName, len)) {
|
||||||
|
|
|
||||||
|
|
@ -334,7 +334,7 @@ public:
|
||||||
// *strp = malloc, balance with free
|
// *strp = malloc, balance with free
|
||||||
void format(char **strp, uid_t uid, unsigned int logMask);
|
void format(char **strp, uid_t uid, unsigned int logMask);
|
||||||
|
|
||||||
// helper
|
// helper (must be locked directly or implicitly by mLogElementsLock)
|
||||||
char *pidToName(pid_t pid);
|
char *pidToName(pid_t pid);
|
||||||
uid_t pidToUid(pid_t pid);
|
uid_t pidToUid(pid_t pid);
|
||||||
char *uidToName(uid_t uid);
|
char *uidToName(uid_t uid);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue