summaryrefslogtreecommitdiffstats
path: root/soundtrigger
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2015-05-04 15:29:36 -0700
committerEric Laurent <elaurent@google.com>2015-05-04 15:29:36 -0700
commitb9096dc829bd9ffd912f88853a87c972086c8796 (patch)
treeddeaa7ddb01d54fd871e23c133c0bf3a45f4f2ba /soundtrigger
parent32fa6d0e65dbf956e253a1006e9419dce2fe75c9 (diff)
downloadframeworks_av-b9096dc829bd9ffd912f88853a87c972086c8796.zip
frameworks_av-b9096dc829bd9ffd912f88853a87c972086c8796.tar.gz
frameworks_av-b9096dc829bd9ffd912f88853a87c972086c8796.tar.bz2
Check memory allocation in ISoundTriggerHwService
Add memory allocation check in ISoundTriggerHwService::listModules(). Bug: 19385640. Change-Id: Iaf74b6f154c3437e1bfc9da78b773d64b16a7604
Diffstat (limited to 'soundtrigger')
-rw-r--r--soundtrigger/ISoundTriggerHwService.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/soundtrigger/ISoundTriggerHwService.cpp b/soundtrigger/ISoundTriggerHwService.cpp
index 75f68b8..e14a771 100644
--- a/soundtrigger/ISoundTriggerHwService.cpp
+++ b/soundtrigger/ISoundTriggerHwService.cpp
@@ -40,6 +40,8 @@ enum {
SET_CAPTURE_STATE,
};
+#define MAX_ITEMS_PER_LIST 1024
+
class BpSoundTriggerHwService: public BpInterface<ISoundTriggerHwService>
{
public:
@@ -116,10 +118,18 @@ status_t BnSoundTriggerHwService::onTransact(
case LIST_MODULES: {
CHECK_INTERFACE(ISoundTriggerHwService, data, reply);
unsigned int numModulesReq = data.readInt32();
+ if (numModulesReq > MAX_ITEMS_PER_LIST) {
+ numModulesReq = MAX_ITEMS_PER_LIST;
+ }
unsigned int numModules = numModulesReq;
struct sound_trigger_module_descriptor *modules =
(struct sound_trigger_module_descriptor *)calloc(numModulesReq,
sizeof(struct sound_trigger_module_descriptor));
+ if (modules == NULL) {
+ reply->writeInt32(NO_MEMORY);
+ reply->writeInt32(0);
+ return NO_ERROR;
+ }
status_t status = listModules(modules, &numModules);
reply->writeInt32(status);
reply->writeInt32(numModules);