From 603467bfb57344f3552b3478e3f69244326174e9 Mon Sep 17 00:00:00 2001 From: Sungtak Lee Date: Thu, 16 May 2019 16:48:00 -0700 Subject: [PATCH] Bufferpool: Check hidl call return value. Hidl will crash if hidl call failed and return value was not checked. Check hidl call return values. Bug: 132182836 Change-Id: I910025a7b3c508b3c8f289a5286abbcc77e2d9b8 --- media/bufferpool/1.0/BufferPoolClient.cpp | 4 ++++ media/bufferpool/2.0/AccessorImpl.cpp | 8 +++++++- media/bufferpool/2.0/BufferPoolClient.cpp | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/media/bufferpool/1.0/BufferPoolClient.cpp b/media/bufferpool/1.0/BufferPoolClient.cpp index 41520ca544..d7123984c5 100644 --- a/media/bufferpool/1.0/BufferPoolClient.cpp +++ b/media/bufferpool/1.0/BufferPoolClient.cpp @@ -528,6 +528,10 @@ void BufferPoolClient::Impl::trySyncFromRemote() { (void) outStatus; (void) outBuffer; }); + if(!transResult.isOk()) { + ALOGD("sync from client %lld failed: bufferpool process died.", + (long long)mConnectionId); + } } mRemoteSyncLock.unlock(); } diff --git a/media/bufferpool/2.0/AccessorImpl.cpp b/media/bufferpool/2.0/AccessorImpl.cpp index 526090943c..94cf006952 100644 --- a/media/bufferpool/2.0/AccessorImpl.cpp +++ b/media/bufferpool/2.0/AccessorImpl.cpp @@ -261,13 +261,19 @@ void Accessor::Impl::handleInvalidateAck() { mBufferPool.mInvalidation.onHandleAck(&observers, &invalidationId); } // Do not hold lock for send invalidations + size_t deadClients = 0; for (auto it = observers.begin(); it != observers.end(); ++it) { const sp observer = it->second; if (observer) { Return transResult = observer->onMessage(it->first, invalidationId); - (void) transResult; + if (!transResult.isOk()) { + ++deadClients; + } } } + if (deadClients > 0) { + ALOGD("During invalidation found %zu dead clients", deadClients); + } } bool Accessor::Impl::isValid() { diff --git a/media/bufferpool/2.0/BufferPoolClient.cpp b/media/bufferpool/2.0/BufferPoolClient.cpp index f907de5306..342fef6b9d 100644 --- a/media/bufferpool/2.0/BufferPoolClient.cpp +++ b/media/bufferpool/2.0/BufferPoolClient.cpp @@ -582,6 +582,10 @@ void BufferPoolClient::Impl::trySyncFromRemote() { (void) outStatus; (void) outBuffer; }); + if (!transResult.isOk()) { + ALOGD("sync from client %lld failed: bufferpool process died.", + (long long)mConnectionId); + } } mRemoteSyncLock.unlock(); }