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

Commit 33761132 authored by Svet Ganov's avatar Svet Ganov
Browse files

Switch media fw permissions checks to AttributionSource (av)

Attribution source is the abstraction to capture the data
flows for private data across apps. Checking permissions
for an attribution source does this for all apps in the
chain that would receive the data as well as the relevant
app ops are checked/noted/started as needed.

bug: 158792096

Test: atest CtsMediaTestCases
      atest CtsPermissionTestCases
      atest CtsPermission2TestCases
      atest CtsPermission3TestCases
      atest CtsPermission4TestCases
      atest CtsPermission5TestCases
      atest CtsAppOpsTestCases
      atest CtsAppOps2TestCases

Merged-In: I1c5a4321dd3b2d458372058c99604a6ec208717c

Change-Id: I1c5a4321dd3b2d458372058c99604a6ec208717c
parent c52f8f4e
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -16,9 +16,9 @@ LOCAL_SHARED_LIBRARIES := \
        libstagefright_foundation libjpeg libui libgui libcutils liblog \
        libhidlbase libdatasource libaudioclient \
        android.hardware.media.omx@1.0 \
        media_permission-aidl-cpp
        framework-permission-aidl-cpp

LOCAL_STATIC_LIBRARIES := media_permission-aidl-cpp
LOCAL_STATIC_LIBRARIES := framework-permission-aidl-cpp

LOCAL_C_INCLUDES:= \
        frameworks/av/media/libstagefright \
@@ -52,7 +52,7 @@ LOCAL_HEADER_LIBRARIES := \
LOCAL_SHARED_LIBRARIES := \
        libstagefright libmedia liblog libutils libbinder \
        libstagefright_foundation libdatasource libaudioclient \
        media_permission-aidl-cpp
        framework-permission-aidl-cpp

LOCAL_C_INCLUDES:= \
        frameworks/av/camera/include \
@@ -90,7 +90,7 @@ LOCAL_C_INCLUDES:= \
        frameworks/av/media/libstagefright \
        frameworks/native/include/media/openmax \
        frameworks/native/include/media/hardware \
        media_permission-aidl-cpp
        framework-permission-aidl-cpp

LOCAL_CFLAGS += -Wno-multichar -Werror -Wall

@@ -119,7 +119,7 @@ LOCAL_HEADER_LIBRARIES := \
LOCAL_SHARED_LIBRARIES := \
        libstagefright libmedia liblog libutils libbinder \
        libstagefright_foundation libaudioclient \
        media_permission-aidl-cpp
        framework-permission-aidl-cpp

LOCAL_C_INCLUDES:= \
        frameworks/av/media/libstagefright \
+4 −4
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@

#include <utils/String16.h>

#include <android/media/permission/Identity.h>
#include <android/content/AttributionSourceState.h>
#include <binder/ProcessState.h>
#include <media/mediarecorder.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -39,7 +39,7 @@

using namespace android;

using media::permission::Identity;
using content::AttributionSourceState;

static void usage(const char* name)
{
@@ -113,10 +113,10 @@ int main(int argc, char* argv[])
        audio_attributes_t attr = AUDIO_ATTRIBUTES_INITIALIZER;
        attr.source = AUDIO_SOURCE_MIC;

        // TODO b/182392769: use identity util
        // TODO b/182392769: use attribution source util
        source = new AudioSource(
                &attr,
                Identity(),
                AttributionSourceState(),
                sampleRate,
                channels);
    } else {
+4 −7
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ cc_library {
        "libcutils",
        "libutils",
        "libbinder",
        "libpermission",
    ],

    sanitize: {
@@ -86,7 +87,7 @@ cc_library {
    export_header_lib_headers: ["libaaudio_headers"],

    export_shared_lib_headers: [
        "media_permission-aidl-cpp",
        "framework-permission-aidl-cpp",
    ],

    shared_libs: [
@@ -99,15 +100,11 @@ cc_library {
        "libcutils",
        "libutils",
        "libbinder",
        "framework-permission-aidl-cpp",
        "aaudio-aidl-cpp",
        "media_permission-aidl-cpp",
        "libaudioclient_aidl_conversion",
    ],

    static_libs: [
        "media_permission-aidl-cpp",
    ],

    cflags: [
        "-Wno-unused-parameter",
        "-Wall",
@@ -177,7 +174,7 @@ aidl_interface {
    imports: [
        "audio_common-aidl",
        "shared-file-region-aidl",
        "media_permission-aidl",
        "framework-permission-aidl"
    ],
    backend:
    {
+3 −3
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ using namespace aaudio;

AAudioStreamRequest::AAudioStreamRequest(const StreamRequest& parcelable) :
        mConfiguration(std::move(parcelable.params)),
        mIdentity(parcelable.identity),
        mAttributionSource(parcelable.attributionSource),
        mSharingModeMatchRequired(parcelable.sharingModeMatchRequired),
        mInService(parcelable.inService) {
}
@@ -39,7 +39,7 @@ AAudioStreamRequest::AAudioStreamRequest(const StreamRequest& parcelable) :
StreamRequest AAudioStreamRequest::parcelable() const {
    StreamRequest result;
    result.params = std::move(mConfiguration).parcelable();
    result.identity = mIdentity;
    result.attributionSource = mAttributionSource;
    result.sharingModeMatchRequired = mSharingModeMatchRequired;
    result.inService = mInService;
    return result;
@@ -50,7 +50,7 @@ aaudio_result_t AAudioStreamRequest::validate() const {
}

void AAudioStreamRequest::dump() const {
    ALOGD("mIdentity  = %s", mIdentity.toString().c_str());
    ALOGD("mAttributionSource  = %s", mAttributionSource.toString().c_str());
    ALOGD("mSharingModeMatchRequired = %d", mSharingModeMatchRequired);
    ALOGD("mInService = %d", mInService);
    mConfiguration.dump();
+8 −6
Original line number Diff line number Diff line
@@ -23,10 +23,12 @@
#include <aaudio/StreamRequest.h>

#include "binding/AAudioStreamConfiguration.h"
#include <android/media/permission/Identity.h>
#include <android/content/AttributionSourceState.h>

namespace aaudio {

using android::content::AttributionSourceState;

class AAudioStreamRequest {
public:
    AAudioStreamRequest() = default;
@@ -34,12 +36,12 @@ public:
    // Construct based on a parcelable representation.
    explicit AAudioStreamRequest(const StreamRequest& parcelable);

    const android::media::permission::Identity &getIdentity() const {
        return mIdentity;
    const AttributionSourceState &getAttributionSource() const {
        return mAttributionSource;
    }

    void setIdentity(const android::media::permission::Identity &identity) {
        mIdentity = identity;
    void setAttributionSource(const AttributionSourceState &attributionSource) {
        mAttributionSource = attributionSource;
    }

    bool isSharingModeMatchRequired() const {
@@ -75,7 +77,7 @@ public:

private:
    AAudioStreamConfiguration  mConfiguration;
    android::media::permission::Identity mIdentity;
    AttributionSourceState mAttributionSource;
    bool                       mSharingModeMatchRequired = false;
    bool                       mInService = false; // Stream opened by AAudioservice
};
Loading