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

Commit 9f578d32 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "AudioRecord keeps track of UID" into mnc-dev

parents c8a70d34 4cb66839
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -178,6 +178,8 @@ public:
                                    int sessionId = AUDIO_SESSION_ALLOCATE,
                                    transfer_type transferType = TRANSFER_DEFAULT,
                                    audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
                                    int uid = -1,
                                    pid_t pid = -1,
                                    const audio_attributes_t* pAttributes = NULL);

    /* Terminates the AudioRecord and unregisters it from AudioFlinger.
@@ -214,6 +216,8 @@ public:
                            int sessionId = AUDIO_SESSION_ALLOCATE,
                            transfer_type transferType = TRANSFER_DEFAULT,
                            audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
                            int uid = -1,
                            pid_t pid = -1,
                            const audio_attributes_t* pAttributes = NULL);

    /* Result of constructing the AudioRecord. This must be checked for successful initialization
@@ -577,6 +581,8 @@ private:

    sp<DeathNotifier>       mDeathNotifier;
    uint32_t                mSequence;              // incremented for each new IAudioRecord attempt
    int                     mClientUid;
    pid_t                   mClientPid;
    audio_attributes_t      mAttributes;

    // For Device Selection API
+1 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ public:
                                size_t *pFrameCount,
                                track_flags_t *flags,
                                pid_t tid,  // -1 means unused, otherwise must be valid non-0
                                int clientUid,
                                int *sessionId,
                                size_t *notificationFrames,
                                sp<IMemory>& cblk,
+22 −3
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ AudioRecord::AudioRecord(
        int sessionId,
        transfer_type transferType,
        audio_input_flags_t flags,
        int uid,
        pid_t pid,
        const audio_attributes_t* pAttributes)
    : mStatus(NO_INIT),
      mOpPackageName(opPackageName),
@@ -96,7 +98,7 @@ AudioRecord::AudioRecord(
{
    mStatus = set(inputSource, sampleRate, format, channelMask, frameCount, cbf, user,
            notificationFrames, false /*threadCanCallJava*/, sessionId, transferType, flags,
            pAttributes);
            uid, pid, pAttributes);
}

AudioRecord::~AudioRecord()
@@ -136,12 +138,15 @@ status_t AudioRecord::set(
        int sessionId,
        transfer_type transferType,
        audio_input_flags_t flags,
        int uid,
        pid_t pid,
        const audio_attributes_t* pAttributes)
{
    ALOGV("set(): inputSource %d, sampleRate %u, format %#x, channelMask %#x, frameCount %zu, "
          "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s",
          "notificationFrames %u, sessionId %d, transferType %d, flags %#x, opPackageName %s "
          "uid %d, pid %d",
          inputSource, sampleRate, format, channelMask, frameCount, notificationFrames,
          sessionId, transferType, flags, String8(mOpPackageName).string());
          sessionId, transferType, flags, String8(mOpPackageName).string(), uid, pid);

    switch (transferType) {
    case TRANSFER_DEFAULT:
@@ -228,6 +233,19 @@ status_t AudioRecord::set(
    }
    ALOGV("set(): mSessionId %d", mSessionId);

    int callingpid = IPCThreadState::self()->getCallingPid();
    int mypid = getpid();
    if (uid == -1 || (callingpid != mypid)) {
        mClientUid = IPCThreadState::self()->getCallingUid();
    } else {
        mClientUid = uid;
    }
    if (pid == -1 || (callingpid != mypid)) {
        mClientPid = callingpid;
    } else {
        mClientPid = pid;
    }

    mFlags = flags;
    mCbf = cbf;

@@ -513,6 +531,7 @@ status_t AudioRecord::openRecord_l(size_t epoch, const String16& opPackageName)
                                                       &temp,
                                                       &trackFlags,
                                                       tid,
                                                       mClientUid,
                                                       &mSessionId,
                                                       &notificationFrames,
                                                       iMem,
+4 −1
Original line number Diff line number Diff line
@@ -178,6 +178,7 @@ public:
                                size_t *pFrameCount,
                                track_flags_t *flags,
                                pid_t tid,
                                int clientUid,
                                int *sessionId,
                                size_t *notificationFrames,
                                sp<IMemory>& cblk,
@@ -197,6 +198,7 @@ public:
        track_flags_t lFlags = flags != NULL ? *flags : (track_flags_t) TRACK_DEFAULT;
        data.writeInt32(lFlags);
        data.writeInt32((int32_t) tid);
        data.writeInt32((int32_t) clientUid);
        int lSessionId = AUDIO_SESSION_ALLOCATE;
        if (sessionId != NULL) {
            lSessionId = *sessionId;
@@ -958,6 +960,7 @@ status_t BnAudioFlinger::onTransact(
            size_t frameCount = data.readInt64();
            track_flags_t flags = (track_flags_t) data.readInt32();
            pid_t tid = (pid_t) data.readInt32();
            int clientUid = data.readInt32();
            int sessionId = data.readInt32();
            size_t notificationFrames = data.readInt64();
            sp<IMemory> cblk;
@@ -965,7 +968,7 @@ status_t BnAudioFlinger::onTransact(
            status_t status;
            sp<IAudioRecord> record = openRecord(input,
                    sampleRate, format, channelMask, opPackageName, &frameCount, &flags, tid,
                    &sessionId, &notificationFrames, cblk, buffers, &status);
                    clientUid, &sessionId, &notificationFrames, cblk, buffers, &status);
            LOG_ALWAYS_FATAL_IF((record != 0) != (status == NO_ERROR));
            reply->writeInt64(frameCount);
            reply->writeInt32(flags);
+2 −2
Original line number Diff line number Diff line
@@ -1425,6 +1425,7 @@ sp<IAudioRecord> AudioFlinger::openRecord(
        size_t *frameCount,
        IAudioFlinger::track_flags_t *flags,
        pid_t tid,
        int clientUid,
        int *sessionId,
        size_t *notificationFrames,
        sp<IMemory>& cblk,
@@ -1494,8 +1495,7 @@ sp<IAudioRecord> AudioFlinger::openRecord(
        // TODO: the uid should be passed in as a parameter to openRecord
        recordTrack = thread->createRecordTrack_l(client, sampleRate, format, channelMask,
                                                  frameCount, lSessionId, notificationFrames,
                                                  IPCThreadState::self()->getCallingUid(),
                                                  flags, tid, &lStatus);
                                                  clientUid, flags, tid, &lStatus);
        LOG_ALWAYS_FATAL_IF((lStatus == NO_ERROR) && (recordTrack == 0));

        if (lStatus == NO_ERROR) {
Loading