Skip to content

Commit 1952c70

Browse files
author
Jeff Hamilton
committed
Cleanup custom IActivityManager.cpp binder code
Make sure to check the return value from transact in all places, and make sure not to read from the reply Parcel for oneway transactions. Test: atest Flag: EXEMPT small bugfix Ignore-AOSP-First: Part of larger internal work Change-Id: I85653d9de84bbe7ba40d9675bb0e02263efe89a9
1 parent 2b17023 commit 1952c70

1 file changed

Lines changed: 9 additions & 7 deletions

File tree

libs/binder/IActivityManager.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,11 @@ class BpActivityManager : public BpInterface<IActivityManager>
147147
data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
148148
data.writeInt32(uid);
149149
data.writeString16(callingPackage);
150-
remote()->transact(IS_UID_ACTIVE_TRANSACTION, data, &reply);
150+
status_t err = remote()->transact(IS_UID_ACTIVE_TRANSACTION, data, &reply);
151151
// fail on exception
152-
if (reply.readExceptionCode() != 0) return false;
152+
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
153+
return false;
154+
}
153155
return reply.readInt32() == 1;
154156
}
155157

@@ -159,9 +161,9 @@ class BpActivityManager : public BpInterface<IActivityManager>
159161
data.writeInterfaceToken(IActivityManager::getInterfaceDescriptor());
160162
data.writeInt32(uid);
161163
data.writeString16(callingPackage);
162-
remote()->transact(GET_UID_PROCESS_STATE_TRANSACTION, data, &reply);
164+
status_t err = remote()->transact(GET_UID_PROCESS_STATE_TRANSACTION, data, &reply);
163165
// fail on exception
164-
if (reply.readExceptionCode() != 0) {
166+
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
165167
return ActivityManager::PROCESS_STATE_UNKNOWN;
166168
}
167169
return reply.readInt32();
@@ -192,7 +194,7 @@ class BpActivityManager : public BpInterface<IActivityManager>
192194
data.writeInt32(appPid);
193195
status_t err = remote()->transact(LOG_FGS_API_BEGIN_TRANSACTION, data, &reply,
194196
IBinder::FLAG_ONEWAY);
195-
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
197+
if (err != NO_ERROR) {
196198
ALOGD("%s: FGS Logger Transaction failed, %d", __func__, err);
197199
return err;
198200
}
@@ -207,7 +209,7 @@ class BpActivityManager : public BpInterface<IActivityManager>
207209
data.writeInt32(appPid);
208210
status_t err =
209211
remote()->transact(LOG_FGS_API_END_TRANSACTION, data, &reply, IBinder::FLAG_ONEWAY);
210-
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
212+
if (err != NO_ERROR) {
211213
ALOGD("%s: FGS Logger Transaction failed, %d", __func__, err);
212214
return err;
213215
}
@@ -224,7 +226,7 @@ class BpActivityManager : public BpInterface<IActivityManager>
224226
data.writeInt32(appPid);
225227
status_t err = remote()->transact(LOG_FGS_API_STATE_CHANGED_TRANSACTION, data, &reply,
226228
IBinder::FLAG_ONEWAY);
227-
if (err != NO_ERROR || ((err = reply.readExceptionCode()) != NO_ERROR)) {
229+
if (err != NO_ERROR) {
228230
ALOGD("%s: FGS Logger Transaction failed, %d", __func__, err);
229231
return err;
230232
}

0 commit comments

Comments
 (0)