[RESTRICT AUTOMERGE] Fix WVCryptoPlugin use after free vulnerability. am: 9c278174c8

Original change: https://googleplex-android-review.googlesource.com/c/platform/vendor/widevine/+/13499846

Change-Id: I1cb45d35088d149f02b0bb6c408e5fee3d79c1db
This commit is contained in:
Edwin Wong
2021-04-06 23:06:28 +00:00
committed by Automerger Merge Worker
3 changed files with 16 additions and 4 deletions

View File

@@ -108,6 +108,8 @@ Return<void> WVCryptoPlugin::setSharedBufferBase(
const hidl_memory& base, uint32_t bufferId) {
sp<IMemory> hidlMemory = mapMemory(base);
std::lock_guard<std::mutex> shared_buffer_lock(mSharedBufferLock);
// allow mapMemory to return nullptr
mSharedBufferMap[bufferId] = hidlMemory;
return Void();
@@ -156,7 +158,7 @@ Return<void> WVCryptoPlugin::decrypt_1_2(
uint64_t offset,
const DestinationBuffer& destination,
decrypt_1_2_cb _hidl_cb) {
std::unique_lock<std::mutex> lock(mSharedBufferLock);
if (mSharedBufferMap.find(source.bufferId) == mSharedBufferMap.end()) {
_hidl_cb(Status_V1_2::ERROR_DRM_CANNOT_HANDLE, 0,
"source decrypt buffer base not set");
@@ -227,6 +229,9 @@ Return<void> WVCryptoPlugin::decrypt_1_2(
destPtr = static_cast<void *>(handle);
}
// release mSharedBufferLock
lock.unlock();
// Calculate the output buffer size and determine if any subsamples are
// encrypted.
size_t destSize = 0;