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

Commit 5d015a67 authored by Steven Moreland's avatar Steven Moreland Committed by Android (Google) Code Review
Browse files

Merge "Use libbinderthreadstateutils."

parents 7d90c60c 89a2c5ce
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -188,8 +188,8 @@ class VendorTagDescriptorCache : public Parcelable {
            sp<android::VendorTagDescriptor> *desc /*out*/);

    // Parcelable interface
    status_t writeToParcel(Parcel* parcel) const override;
    status_t readFromParcel(const Parcel* parcel) override;
    status_t writeToParcel(android::Parcel* parcel) const override;
    status_t readFromParcel(const android::Parcel* parcel) override;

    // Returns the number of vendor tags defined.
    int getTagCount(metadata_vendor_id_t id) const;
+4 −0
Original line number Diff line number Diff line
@@ -129,6 +129,10 @@ cc_library_shared {
        "android.hardware.camera.device@3.6"
    ],

    static_libs: [
        "libbinderthreadstateutils",
    ],

    export_shared_lib_headers: [
        "libbinder",
        "libcamera_client",
+7 −6
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
#include <binder/PermissionController.h>
#include <binder/ProcessInfoService.h>
#include <binder/IResultReceiver.h>
#include <binderthreadstate/CallerUtils.h>
#include <cutils/atomic.h>
#include <cutils/properties.h>
#include <cutils/misc.h>
@@ -1179,7 +1180,7 @@ Status CameraService::validateClientPermissionsLocked(const String8& cameraId,

    // Only allow clients who are being used by the current foreground device user, unless calling
    // from our own process OR the caller is using the cameraserver's HIDL interface.
    if (!hardware::IPCThreadState::self()->isServingCall() && callingPid != getpid() &&
    if (getCurrentServingCall() != BinderCallType::HWBINDER && callingPid != getpid() &&
            (mAllowedUsers.find(clientUserId) == mAllowedUsers.end())) {
        ALOGE("CameraService::connect X (PID %d) rejected (cannot connect from "
                "device user %d, currently allowed device users: %s)", callingPid, clientUserId,
@@ -1534,7 +1535,7 @@ bool CameraService::shouldRejectSystemCameraConnection(const String8& cameraId)
        return false;
    }
    // (2)
    if (!hardware::IPCThreadState::self()->isServingCall() &&
    if (getCurrentServingCall() != BinderCallType::HWBINDER &&
            systemCameraKind == SystemCameraKind::HIDDEN_SECURE_CAMERA) {
        ALOGW("Rejecting access to secure hidden camera %s", cameraId.c_str());
        return true;
@@ -1543,7 +1544,7 @@ bool CameraService::shouldRejectSystemCameraConnection(const String8& cameraId)
    //     getCameraCharacteristics() allows for calls to succeed (albeit after hiding some
    //     characteristics) even if clients don't have android.permission.CAMERA. We do not want the
    //     same behavior for system camera devices.
    if (!hardware::IPCThreadState::self()->isServingCall() &&
    if (getCurrentServingCall() != BinderCallType::HWBINDER &&
            systemCameraKind == SystemCameraKind::SYSTEM_ONLY_CAMERA &&
            !hasPermissionsForSystemCamera(cPid, cUid)) {
        ALOGW("Rejecting access to system only camera %s, inadequete permissions",
@@ -1569,7 +1570,7 @@ Status CameraService::connectDevice(
    sp<CameraDeviceClient> client = nullptr;
    String16 clientPackageNameAdj = clientPackageName;

    if (hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() == BinderCallType::HWBINDER) {
        std::string vendorClient =
                StringPrintf("vendor.client.pid<%d>", CameraThreadState::getCallingPid());
        clientPackageNameAdj = String16(vendorClient.c_str());
@@ -2778,7 +2779,7 @@ CameraService::BasicClient::BasicClient(const sp<CameraService>& cameraService,
        }
        mClientPackageName = packages[0];
    }
    if (!hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() != BinderCallType::HWBINDER) {
        mAppOpsManager = std::make_unique<AppOpsManager>();
    }
}
@@ -3450,7 +3451,7 @@ CameraService::DescriptorPtr CameraService::CameraClientManager::makeClientDescr
        const std::set<String8>& conflictingKeys, int32_t score, int32_t ownerId,
        int32_t state) {

    bool isVendorClient = hardware::IPCThreadState::self()->isServingCall();
    bool isVendorClient = getCurrentServingCall() == BinderCallType::HWBINDER;
    int32_t score_adj = isVendorClient ? kVendorClientScore : score;
    int32_t state_adj = isVendorClient ? kVendorClientState: state;

+5 −4
Original line number Diff line number Diff line
@@ -17,33 +17,34 @@
#include "CameraThreadState.h"
#include <binder/IPCThreadState.h>
#include <hwbinder/IPCThreadState.h>
#include <binderthreadstate/CallerUtils.h>
#include <unistd.h>

namespace android {

int CameraThreadState::getCallingUid() {
    if (hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() == BinderCallType::HWBINDER) {
        return hardware::IPCThreadState::self()->getCallingUid();
    }
    return IPCThreadState::self()->getCallingUid();
}

int CameraThreadState::getCallingPid() {
    if (hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() == BinderCallType::HWBINDER) {
        return hardware::IPCThreadState::self()->getCallingPid();
    }
    return IPCThreadState::self()->getCallingPid();
}

int64_t CameraThreadState::clearCallingIdentity() {
    if (hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() == BinderCallType::HWBINDER) {
        return hardware::IPCThreadState::self()->clearCallingIdentity();
    }
    return IPCThreadState::self()->clearCallingIdentity();
}

void CameraThreadState::restoreCallingIdentity(int64_t token) {
    if (hardware::IPCThreadState::self()->isServingCall()) {
    if (getCurrentServingCall() == BinderCallType::HWBINDER) {
        hardware::IPCThreadState::self()->restoreCallingIdentity(token);
    } else {
        IPCThreadState::self()->restoreCallingIdentity(token);
+2 −2
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ class ClientPriority {
public:
    /**
     * Choosing to set mIsVendorClient through a parameter instead of calling
     * hardware::IPCThreadState::self()->isServingCall() to protect against the
     * getCurrentServingCall() == BinderCallType::HWBINDER to protect against the
     * case where the construction is offloaded to another thread which isn't a
     * hwbinder thread.
     */
@@ -237,7 +237,7 @@ void ClientDescriptor<KEY, VALUE>::setPriority(const ClientPriority& priority) {
    // We don't use the usual copy constructor here since we want to remember
    // whether a client is a vendor client or not. This could have been wiped
    // off in the incoming priority argument since an AIDL thread might have
    // called hardware::IPCThreadState::self()->isServingCall() after refreshing
    // called getCurrentServingCall() == BinderCallType::HWBINDER after refreshing
    // priorities for old clients through ProcessInfoService::getProcessStatesScoresFromPids().
    mPriority.setScore(priority.getScore());
    mPriority.setState(priority.getState());