From 62e83c9512486a24f0cfd3fe25ba5f2b4f2c2fe5 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Tue, 31 Jul 2018 15:25:58 -0700 Subject: [PATCH] Check for crypto size overflow Bug: 111922341 Test: build Change-Id: Icfe2d15c13f1b4bb77e0a9684ffc1284f557e6d5 --- media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp index bde08622b6..8d876dabe8 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDrm.cpp @@ -239,8 +239,14 @@ NuPlayerDrm::CryptoInfo *NuPlayerDrm::makeCryptoInfo( size_t *encryptedbytes) { // size needed to store all the crypto data - size_t cryptosize = sizeof(CryptoInfo) + - sizeof(CryptoPlugin::SubSample) * numSubSamples; + size_t cryptosize; + // sizeof(CryptoInfo) + sizeof(CryptoPlugin::SubSample) * numSubSamples; + if (__builtin_mul_overflow(sizeof(CryptoPlugin::SubSample), numSubSamples, &cryptosize) || + __builtin_add_overflow(cryptosize, sizeof(CryptoInfo), &cryptosize)) { + ALOGE("crypto size overflow"); + return NULL; + } + CryptoInfo *ret = (CryptoInfo*) malloc(cryptosize); if (ret == NULL) { ALOGE("couldn't allocate %zu bytes", cryptosize);