Loading camera/include/camera/VendorTagDescriptor.h +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading services/camera/libcameraservice/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,10 @@ cc_library_shared { "android.hardware.camera.device@3.5", ], static_libs: [ "libbinderthreadstateutils", ], export_shared_lib_headers: [ "libbinder", "libcamera_client", Loading services/camera/libcameraservice/CameraService.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -1029,7 +1030,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, Loading Loading @@ -1350,7 +1351,7 @@ bool CameraService::shouldRejectHiddenCameraConnection(const String8 & cameraId) // If the thread serving this call is not a hwbinder thread and the caller // isn't the cameraserver itself, and the camera id being requested is to be // publically hidden, we should reject the connection. if (!hardware::IPCThreadState::self()->isServingCall() && if (getCurrentServingCall() != BinderCallType::HWBINDER && CameraThreadState::getCallingPid() != getpid() && isPublicallyHiddenSecureCamera(cameraId)) { return true; Loading @@ -1371,7 +1372,8 @@ Status CameraService::connectDevice( String8 id = String8(cameraId); 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()); Loading Loading @@ -2404,7 +2406,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>(); } } Loading Loading @@ -3027,7 +3029,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; Loading services/camera/libcameraservice/utils/CameraThreadState.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -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); Loading services/camera/libcameraservice/utils/ClientManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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()); Loading Loading
camera/include/camera/VendorTagDescriptor.h +2 −2 Original line number Diff line number Diff line Loading @@ -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; Loading
services/camera/libcameraservice/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -112,6 +112,10 @@ cc_library_shared { "android.hardware.camera.device@3.5", ], static_libs: [ "libbinderthreadstateutils", ], export_shared_lib_headers: [ "libbinder", "libcamera_client", Loading
services/camera/libcameraservice/CameraService.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -1029,7 +1030,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, Loading Loading @@ -1350,7 +1351,7 @@ bool CameraService::shouldRejectHiddenCameraConnection(const String8 & cameraId) // If the thread serving this call is not a hwbinder thread and the caller // isn't the cameraserver itself, and the camera id being requested is to be // publically hidden, we should reject the connection. if (!hardware::IPCThreadState::self()->isServingCall() && if (getCurrentServingCall() != BinderCallType::HWBINDER && CameraThreadState::getCallingPid() != getpid() && isPublicallyHiddenSecureCamera(cameraId)) { return true; Loading @@ -1371,7 +1372,8 @@ Status CameraService::connectDevice( String8 id = String8(cameraId); 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()); Loading Loading @@ -2404,7 +2406,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>(); } } Loading Loading @@ -3027,7 +3029,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; Loading
services/camera/libcameraservice/utils/CameraThreadState.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -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); Loading
services/camera/libcameraservice/utils/ClientManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -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. */ Loading Loading @@ -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()); Loading