diff options
author | 2019-11-26 15:18:09 -0800 | |
---|---|---|
committer | 2019-12-09 10:16:25 -0800 | |
commit | c52e1fcc8b91801831da53ed474c33fa1eef2c00 (patch) | |
tree | 12b4af097d799a34414602dd95b1e1e96a6182b6 | |
parent | 597861ff5ca8f39a0d9063f7ffa1e7352ee010ec (diff) |
Create local clientId instead of sharing one
Bug: 144997947
Test: TH
Change-Id: I767036b0acd3e5b6fb866dfef6ef5fdceb8f12de
-rw-r--r-- | libs/binder/AppOpsManager.cpp | 20 | ||||
-rw-r--r-- | libs/binder/IAppOpsService.cpp | 18 | ||||
-rw-r--r-- | libs/binder/include/binder/IAppOpsService.h | 12 |
3 files changed, 15 insertions, 35 deletions
diff --git a/libs/binder/AppOpsManager.cpp b/libs/binder/AppOpsManager.cpp index 4f0b7d31a2..ca9c6087c9 100644 --- a/libs/binder/AppOpsManager.cpp +++ b/libs/binder/AppOpsManager.cpp @@ -44,16 +44,16 @@ const int APP_OPS_MANAGER_UNAVAILABLE_MODE = AppOpsManager::MODE_IGNORED; } // namespace static String16 _appops("appops"); -static pthread_mutex_t gTokenMutex = PTHREAD_MUTEX_INITIALIZER; -static sp<IBinder> gToken; +static pthread_mutex_t gClientIdMutex = PTHREAD_MUTEX_INITIALIZER; +static sp<IBinder> gClientId; -static const sp<IBinder>& getToken(const sp<IAppOpsService>& service) { - pthread_mutex_lock(&gTokenMutex); - if (gToken == nullptr || gToken->pingBinder() != NO_ERROR) { - gToken = service->getToken(new BBinder()); +static const sp<IBinder>& getClientId() { + pthread_mutex_lock(&gClientIdMutex); + if (gClientId == nullptr) { + gClientId = new BBinder(); } - pthread_mutex_unlock(&gTokenMutex); - return gToken; + pthread_mutex_unlock(&gClientIdMutex); + return gClientId; } thread_local uint64_t notedAppOpsInThisBinderTransaction[2]; @@ -144,7 +144,7 @@ int32_t AppOpsManager::startOpNoThrow(int32_t op, int32_t uid, const String16& c const String16& message) { sp<IAppOpsService> service = getService(); int32_t mode = service != nullptr - ? service->startOperation(getToken(service), op, uid, callingPackage, + ? service->startOperation(getClientId(), op, uid, callingPackage, featureId, startIfModeDefault) : APP_OPS_MANAGER_UNAVAILABLE_MODE; if (mode == AppOpsManager::MODE_ALLOWED) { @@ -162,7 +162,7 @@ void AppOpsManager::finishOp(int32_t op, int32_t uid, const String16& callingPac const std::unique_ptr<String16>& callingFeatureId) { sp<IAppOpsService> service = getService(); if (service != nullptr) { - service->finishOperation(getToken(service), op, uid, callingPackage, callingFeatureId); + service->finishOperation(getClientId(), op, uid, callingPackage, callingFeatureId); } } diff --git a/libs/binder/IAppOpsService.cpp b/libs/binder/IAppOpsService.cpp index b85a5f298e..7384466b55 100644 --- a/libs/binder/IAppOpsService.cpp +++ b/libs/binder/IAppOpsService.cpp @@ -106,16 +106,6 @@ public: remote()->transact(STOP_WATCHING_MODE_TRANSACTION, data, &reply); } - virtual sp<IBinder> getToken(const sp<IBinder>& clientToken) { - Parcel data, reply; - data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); - data.writeStrongBinder(clientToken); - remote()->transact(GET_TOKEN_TRANSACTION, data, &reply); - // fail on exception - if (reply.readExceptionCode() != 0) return nullptr; - return reply.readStrongBinder(); - } - virtual int32_t permissionToOpCode(const String16& permission) { Parcel data, reply; data.writeInterfaceToken(IAppOpsService::getInterfaceDescriptor()); @@ -251,14 +241,6 @@ status_t BnAppOpsService::onTransact( reply->writeNoException(); return NO_ERROR; } break; - case GET_TOKEN_TRANSACTION: { - CHECK_INTERFACE(IAppOpsService, data, reply); - sp<IBinder> clientToken = data.readStrongBinder(); - sp<IBinder> token = getToken(clientToken); - reply->writeNoException(); - reply->writeStrongBinder(token); - return NO_ERROR; - } break; case PERMISSION_TO_OP_CODE_TRANSACTION: { CHECK_INTERFACE(IAppOpsService, data, reply); String16 permission = data.readString16(); diff --git a/libs/binder/include/binder/IAppOpsService.h b/libs/binder/include/binder/IAppOpsService.h index 15ba005cec..68a917e471 100644 --- a/libs/binder/include/binder/IAppOpsService.h +++ b/libs/binder/include/binder/IAppOpsService.h @@ -45,7 +45,6 @@ public: virtual void startWatchingMode(int32_t op, const String16& packageName, const sp<IAppOpsCallback>& callback) = 0; virtual void stopWatchingMode(const sp<IAppOpsCallback>& callback) = 0; - virtual sp<IBinder> getToken(const sp<IBinder>& clientToken) = 0; virtual int32_t permissionToOpCode(const String16& permission) = 0; virtual int32_t checkAudioOperation(int32_t code, int32_t usage,int32_t uid, const String16& packageName) = 0; @@ -62,12 +61,11 @@ public: FINISH_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+3, START_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+4, STOP_WATCHING_MODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+5, - GET_TOKEN_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+6, - PERMISSION_TO_OP_CODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+7, - CHECK_AUDIO_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+8, - NOTE_ASYNC_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+9, - SHOULD_COLLECT_NOTES_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+10, - SET_CAMERA_AUDIO_RESTRICTION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+11, + PERMISSION_TO_OP_CODE_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+6, + CHECK_AUDIO_OPERATION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+7, + NOTE_ASYNC_OP_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+8, + SHOULD_COLLECT_NOTES_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+9, + SET_CAMERA_AUDIO_RESTRICTION_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION+10, }; enum { |