summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2016-02-22 13:05:15 -0800
committerThe Android Automerger <android-build@google.com>2016-03-01 15:25:31 -0800
commitd3e5eca42feaa337cd3aa36b7eaa2b7aadbbab15 (patch)
tree53aa54d898a7fa18021116eb4e67675b7e69882a /media/libmedia
parenta685aea781026471ad82f5729198c60bcb4f8fe9 (diff)
downloadframeworks_av-d3e5eca42feaa337cd3aa36b7eaa2b7aadbbab15.zip
frameworks_av-d3e5eca42feaa337cd3aa36b7eaa2b7aadbbab15.tar.gz
frameworks_av-d3e5eca42feaa337cd3aa36b7eaa2b7aadbbab15.tar.bz2
Clear allocation to avoid info leak
Bug: 26914474 Change-Id: Ie1a86e86d78058d041149fe599a4996e7f8185cf
Diffstat (limited to 'media/libmedia')
-rw-r--r--media/libmedia/IOMX.cpp59
1 files changed, 32 insertions, 27 deletions
diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp
index 97b7ff0..865d575 100644
--- a/media/libmedia/IOMX.cpp
+++ b/media/libmedia/IOMX.cpp
@@ -692,34 +692,39 @@ status_t BnOMX::onTransact(
size_t size = data.readInt64();
- void *params = malloc(size);
- data.read(params, size);
-
- status_t err;
- switch (code) {
- case GET_PARAMETER:
- err = getParameter(node, index, params, size);
- break;
- case SET_PARAMETER:
- err = setParameter(node, index, params, size);
- break;
- case GET_CONFIG:
- err = getConfig(node, index, params, size);
- break;
- case SET_CONFIG:
- err = setConfig(node, index, params, size);
- break;
- case SET_INTERNAL_OPTION:
- {
- InternalOptionType type =
- (InternalOptionType)data.readInt32();
-
- err = setInternalOption(node, index, type, params, size);
- break;
+ status_t err = NO_MEMORY;
+ void *params = calloc(size, 1);
+ if (params) {
+ err = data.read(params, size);
+ if (err != OK) {
+ android_errorWriteLog(0x534e4554, "26914474");
+ } else {
+ switch (code) {
+ case GET_PARAMETER:
+ err = getParameter(node, index, params, size);
+ break;
+ case SET_PARAMETER:
+ err = setParameter(node, index, params, size);
+ break;
+ case GET_CONFIG:
+ err = getConfig(node, index, params, size);
+ break;
+ case SET_CONFIG:
+ err = setConfig(node, index, params, size);
+ break;
+ case SET_INTERNAL_OPTION:
+ {
+ InternalOptionType type =
+ (InternalOptionType)data.readInt32();
+
+ err = setInternalOption(node, index, type, params, size);
+ break;
+ }
+
+ default:
+ TRESPASS();
+ }
}
-
- default:
- TRESPASS();
}
reply->writeInt32(err);