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

Commit 1e7cd733 authored by Atneya Nair's avatar Atneya Nair Committed by Android (Google) Code Review
Browse files

Merge "Update bluetooth perm checking to perm cache" into main

parents 55d49ff3 fe085f77
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1064,7 +1064,7 @@ namespace {
    // Use '01' for LSB bits 0 and 1 as Bluetooth MAC addresses are never multicast
    // and universaly administered
    constexpr std::array<uint8_t, 4> BTANON_PREFIX {0xFD, 0xFF, 0xFF, 0xFF};
    // Keep sync with ServiceUtilities.cpp mustAnonymizeBluetoothAddress
    // Keep sync with ServiceUtilities.cpp anonymizeBluetoothAddress
    constexpr const char * BTANON_PREFIX_STR = "XX:XX:XX:XX:";
}

+1 −1
Original line number Diff line number Diff line
@@ -544,7 +544,7 @@ bool checkBluetoothPermission(const AttributionSourceState& attr) {
 * @param caller string identifying the caller for logging.
 * @return true if the MAC addresses must be anonymized, false otherwise.
 */
bool mustAnonymizeBluetoothAddress(
bool mustAnonymizeBluetoothAddressLegacy(
        const AttributionSourceState& attributionSource, const String16&) {
    uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid));
    bool res;
+1 −1
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ bool modifyPhoneStateAllowed(const AttributionSourceState& attributionSource);
bool bypassInterruptionPolicyAllowed(const AttributionSourceState& attributionSource);
bool callAudioInterceptionAllowed(const AttributionSourceState& attributionSource);
void purgePermissionCache();
bool mustAnonymizeBluetoothAddress(
bool mustAnonymizeBluetoothAddressLegacy(
        const AttributionSourceState& attributionSource, const String16& caller);
void anonymizeBluetoothAddress(char *address);

+29 −3
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ using com::android::media::permission::PermissionEnum::MODIFY_DEFAULT_AUDIO_EFFE
using com::android::media::permission::PermissionEnum::MODIFY_PHONE_STATE;
using com::android::media::permission::PermissionEnum::RECORD_AUDIO;
using com::android::media::permission::PermissionEnum::WRITE_SECURE_SETTINGS;
using com::android::media::permission::PermissionEnum::BLUETOOTH_CONNECT;
using com::android::media::permission::PermissionEnum::BYPASS_CONCURRENT_RECORD_AUDIO_RESTRICTION;
using content::AttributionSourceState;
using media::audio::common::AudioConfig;
@@ -98,6 +99,28 @@ constexpr int kDefaultVirtualDeviceId = 0;
namespace {
constexpr auto PERMISSION_HARD_DENIED = permission::PermissionChecker::PERMISSION_HARD_DENIED;
constexpr auto PERMISSION_GRANTED = permission::PermissionChecker::PERMISSION_GRANTED;

bool mustAnonymizeBluetoothAddress(const AttributionSourceState& attributionSource,
                                   const String16& caller,
                                   const IPermissionProvider& provider) {
    if (audioserver_permissions()) {
        switch(multiuser_get_app_id(attributionSource.uid)) {
            // out of caution, to prevent regression
            case AID_RADIO:
            case AID_BLUETOOTH:
            case AID_MEDIA:
                return true;
        }
        const auto res = provider.checkPermission(BLUETOOTH_CONNECT, attributionSource.uid);
        if (!res.has_value()) {
            ALOGE("%s: error: %s", __func__, res.error().toString8().c_str());
        }
        return *res;
    } else {
        return mustAnonymizeBluetoothAddressLegacy(attributionSource, caller);
    }
}

}

const std::vector<audio_usage_t>& SYSTEM_USAGES = {
@@ -1781,7 +1804,8 @@ Status AudioPolicyService::listAudioPorts(media::AudioPortRole roleAidl,
        numPortsReq = std::min(numPortsReq, num_ports);
    }

    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
                                      getPermissionProvider())) {
        for (size_t i = 0; i < numPortsReq; ++i) {
            anonymizePortBluetoothAddress(ports[i]);
        }
@@ -1823,7 +1847,8 @@ Status AudioPolicyService::getAudioPort(int portId,
        RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(mAudioPolicyManager->getAudioPort(&port)));
    }

    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
                                      getPermissionProvider())) {
        anonymizePortBluetoothAddress(port);
    }

@@ -1903,7 +1928,8 @@ Status AudioPolicyService::listAudioPatches(Int* count,
        numPatchesReq = std::min(numPatchesReq, num_patches);
    }

    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__))) {
    if (mustAnonymizeBluetoothAddress(attributionSource, String16(__func__),
                                      getPermissionProvider())) {
        for (size_t i = 0; i < numPatchesReq; ++i) {
            for (size_t j = 0; j < patches[i].num_sources; ++j) {
                anonymizePortBluetoothAddress(patches[i].sources[j]);