diff options
| author | 2021-04-05 18:01:02 +0000 | |
|---|---|---|
| committer | 2021-04-05 18:01:02 +0000 | |
| commit | fb13cc210219e2880b0bc2920fb4674d01a2182f (patch) | |
| tree | dca577ffe3a94c4fc73c8804044ec2cbfcb9d2de /libs/binder/Parcel.cpp | |
| parent | 4a2b628262f48aaa88865a57e1ccac3cb33d1b13 (diff) | |
| parent | e59437a40e278fdaa69f1bf54cd6702a96a644a2 (diff) | |
Merge changes Ibdbe8161,Id2b0fc02 am: e59437a40e
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1663443
Change-Id: I927d03e2a932a9ae4e35aa393ebf30aab4ee0b9e
Diffstat (limited to 'libs/binder/Parcel.cpp')
| -rw-r--r-- | libs/binder/Parcel.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index 34a474b252..3f0b0df4f6 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -555,12 +555,17 @@ void Parcel::markSensitive() const } void Parcel::markForBinder(const sp<IBinder>& binder) { + LOG_ALWAYS_FATAL_IF(mData != nullptr, "format must be set before data is written"); + if (binder && binder->remoteBinder() && binder->remoteBinder()->isRpcBinder()) { markForRpc(binder->remoteBinder()->getPrivateAccessorForId().rpcConnection()); } } void Parcel::markForRpc(const sp<RpcConnection>& connection) { + LOG_ALWAYS_FATAL_IF(mData != nullptr && mOwner == nullptr, + "format must be set before data is written OR on IPC data"); + LOG_ALWAYS_FATAL_IF(connection == nullptr, "markForRpc requires connection"); mConnection = connection; } @@ -2100,6 +2105,9 @@ size_t Parcel::ipcObjectsCount() const void Parcel::ipcSetDataReference(const uint8_t* data, size_t dataSize, const binder_size_t* objects, size_t objectsCount, release_func relFunc) { + // this code uses 'mOwner == nullptr' to understand whether it owns memory + LOG_ALWAYS_FATAL_IF(relFunc == nullptr, "must provide cleanup function"); + freeData(); mData = const_cast<uint8_t*>(data); |