Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e27ee08a authored by Mark Salyzyn's avatar Mark Salyzyn Committed by Android (Google) Code Review
Browse files

Merge "logd: serialize accesses to stats helpers" into mnc-dev

parents 5c8f6f22 5803b795
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -145,7 +145,9 @@ int LogAudit::logPrint(const char *fmt, ...) {
            ++cp;
        }
        tid = pid;
        logbuf->lock();
        uid = logbuf->pidToUid(pid);
        logbuf->unlock();
        memmove(pidptr, cp, strlen(cp) + 1);
    }

@@ -180,15 +182,21 @@ int LogAudit::logPrint(const char *fmt, ...) {
    static const char comm_str[] = " comm=\"";
    const char *comm = strstr(str, comm_str);
    const char *estr = str + strlen(str);
    char *commfree = NULL;
    if (comm) {
        estr = comm;
        comm += sizeof(comm_str) - 1;
    } else if (pid == getpid()) {
        pid = tid;
        comm = "auditd";
    } else if (!(comm = logbuf->pidToName(pid))) {
    } else {
        logbuf->lock();
        comm = commfree = logbuf->pidToName(pid);
        logbuf->unlock();
        if (!comm) {
            comm = "unknown";
        }
    }

    const char *ecomm = strchr(comm, '"');
    if (ecomm) {
@@ -218,6 +226,7 @@ int LogAudit::logPrint(const char *fmt, ...) {
        }
    }

    free(commfree);
    free(str);

    if (notify) {
+3 −1
Original line number Diff line number Diff line
@@ -71,10 +71,12 @@ public:
    // *strp uses malloc, use free to release.
    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); }
    uid_t pidToUid(pid_t pid) { return stats.pidToUid(pid); }
    char *uidToName(uid_t uid) { return stats.uidToName(uid); }
    void lock() { pthread_mutex_lock(&mLogElementsLock); }
    void unlock() { pthread_mutex_unlock(&mLogElementsLock); }

private:
    void maybePrune(log_id_t id);
+4 −0
Original line number Diff line number Diff line
@@ -111,13 +111,17 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer,
    }

    static const char format_uid[] = "uid=%u%s%s expire %u line%s";
    parent->lock();
    char *name = parent->uidToName(mUid);
    parent->unlock();
    char *commName = android::tidToName(mTid);
    if (!commName && (mTid != mPid)) {
        commName = android::tidToName(mPid);
    }
    if (!commName) {
        parent->lock();
        commName = parent->pidToName(mPid);
        parent->unlock();
    }
    size_t len = name ? strlen(name) : 0;
    if (len && commName && !strncmp(name, commName, len)) {
+1 −1
Original line number Diff line number Diff line
@@ -334,7 +334,7 @@ public:
    // *strp = malloc, balance with free
    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);
    uid_t pidToUid(pid_t pid);
    char *uidToName(uid_t uid);