summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Nelson <sam.nelson@ti.com>2019-10-05 09:14:23 -0400
committerSam Nelson <sam.nelson@ti.com>2019-10-08 15:50:39 -0400
commitf4cfa32b7d838f661610fe035cc97ef4cb42ebd8 (patch)
tree1a2f94b7d952a234cff6bed8804ebd276ba5d928
parent0d0423e2ccbe6652f4dbca1d3868795932e98d02 (diff)
downloadipc-f4cfa32b7d838f661610fe035cc97ef4cb42ebd8.tar.gz
HeapMultiBufMP: Add NULL check for robustness
Add cast to match types Signed-off-by: Sam Nelson <sam.nelson@ti.com>
-rw-r--r--packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c b/packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c
index 89ff26c..f25ca2f 100644
--- a/packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c
+++ b/packages/ti/sdo/ipc/heaps/HeapMultiBufMP.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2018 Texas Instruments Incorporated - http://www.ti.com
+ * Copyright (c) 2012-2019 Texas Instruments Incorporated - http://www.ti.com
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -308,8 +308,10 @@ Int HeapMultiBufMP_open(String name,
}
sharedAddr = SharedRegion_getPtr(sharedShmBase);
- Assert_isTrue(sharedAddr != NULL, ti_sdo_ipc_Ipc_A_internal);
-
+ if(sharedAddr == NULL) {
+ *handlePtr = NULL;
+ return HeapMultiBufMP_E_NOTFOUND;
+ }
status = HeapMultiBufMP_openByAddr(sharedAddr, handlePtr);
@@ -436,7 +438,7 @@ Int ti_sdo_ipc_heaps_HeapMultiBufMP_Instance_init(
/* Check numBuckets */
Assert_isTrue(params->openFlag ||
- params->numBuckets <= HeapMultiBufMP_MAXBUCKETS,
+ (UInt)params->numBuckets <= HeapMultiBufMP_MAXBUCKETS,
ti_sdo_ipc_Ipc_A_invParam);
obj->nsKey = NULL;
@@ -458,6 +460,10 @@ Int ti_sdo_ipc_heaps_HeapMultiBufMP_Instance_init(
obj->cacheEnabled = SharedRegion_isCacheEnabled(obj->regionId);
localAddr = SharedRegion_getPtr(obj->attrs->gateMPAddr);
+ if (localAddr == NULL) {
+ Error_raise(eb, ti_sdo_ipc_Ipc_E_internal, 0, 0);
+ return 1;
+ }
Assert_isTrue(localAddr != NULL, ti_sdo_ipc_Ipc_A_internal);
status = GateMP_openByAddr(localAddr, (GateMP_Handle *)&(obj->gate));
@@ -875,6 +881,12 @@ Void ti_sdo_ipc_heaps_HeapMultiBufMP_putTail(
else {
temp = (ti_sdo_ipc_heaps_HeapMultiBufMP_Elem *)
SharedRegion_getPtr(obj->attrs->buckets[index].tail);
+ /* Check for invalid arguments */
+ Assert_isTrue(temp != NULL, ti_sdo_ipc_Ipc_A_internal);
+ /* Additional check to handle case when Assert is disabled */
+ if (temp == NULL) {
+ return;
+ }
temp->next = sharedBlock;
/*
@@ -1015,7 +1027,7 @@ UInt ti_sdo_ipc_heaps_HeapMultiBufMP_processBuckets(
sizeof(HeapMultiBufMP_Bucket) * params->numBuckets);
/* Combine if blockSizes (and alignments) are equal and shrink the array */
- for (i = 0; i < params->numBuckets; i++) {
+ for (i = 0; i < (UInt)params->numBuckets; i++) {
/* Ensure that align is a power of two */
Assert_isTrue((optBucketEntries[i].align &
(optBucketEntries[i].align - 1)) == 0,
@@ -1045,11 +1057,11 @@ UInt ti_sdo_ipc_heaps_HeapMultiBufMP_processBuckets(
optNumBuckets = 0;
/* Combine if blockSizes (and alignments) are equal and shrink the array */
- for (i = 0; i < params->numBuckets; i++) {
+ for (i = 0; i < (UInt)params->numBuckets; i++) {
if (optBucketEntries[i].numBlocks != 0) {
memcpy(&(optBucketEntries[optNumBuckets]), &(optBucketEntries[i]),
sizeof(HeapMultiBufMP_Bucket));
- for (j = i + 1 ; j < params->numBuckets; j++) {
+ for (j = i + 1 ; j < (UInt)params->numBuckets; j++) {
if (optBucketEntries[optNumBuckets].blockSize ==
optBucketEntries[j].blockSize &&
optBucketEntries[optNumBuckets].align ==