Correctly initialize shared->buffer in case of error, complete check params 45/167245/4
authorKrzysztof Dynowski <k.dynowski@samsung.com>
Tue, 16 Jan 2018 10:09:37 +0000 (11:09 +0100)
committerKrzysztof Dynowski <k.dynowski@samsung.com>
Tue, 16 Jan 2018 12:29:32 +0000 (13:29 +0100)
Change-Id: I4fe11fe70d1ecfe0e7d1e6082cf3b466db79ed63

src/tef_libteec.c

index 2ddfa62..b5d27a4 100644 (file)
@@ -233,6 +233,9 @@ TEEC_Result TEEC_InvokeCommand(TEEC_Session *session,
        if (lib.handle == NULL) {
                return TEEC_ERROR_NOT_IMPLEMENTED;
        }
+       if (session == NULL) {
+               return TEEC_ERROR_BAD_PARAMETERS;
+       }
        TEF_SessionImpl *tefSession = (TEF_SessionImpl *)session->imp;
        if (tefSession == NULL) {
                return TEEC_ERROR_BAD_PARAMETERS;
@@ -253,7 +256,7 @@ TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context *context,
        if (lib.handle == NULL) {
                return TEEC_ERROR_NOT_IMPLEMENTED;
        }
-       if (sharedMemory == NULL) {
+       if (context == NULL || sharedMemory == NULL) {
                return TEEC_ERROR_BAD_PARAMETERS;
        }
        sharedMemory->imp = lib.createSharedMemory();
@@ -282,20 +285,24 @@ TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context *context,
        if (sharedMemory == NULL) {
                return TEEC_ERROR_BAD_PARAMETERS;
        }
+       if (context == NULL) {
+               sharedMemory->buffer = NULL;
+               return TEEC_ERROR_BAD_PARAMETERS;
+       }
        sharedMemory->imp = lib.createSharedMemory();
        if (sharedMemory->imp == NULL) {
+               sharedMemory->buffer = NULL;
                return TEEC_ERROR_OUT_OF_MEMORY;
        }
        TEEC_SharedMemory *shm = (TEEC_SharedMemory *)sharedMemory->imp;
-       shm->buffer = NULL;
+       shm->buffer = sharedMemory->buffer;
        shm->size = sharedMemory->size;
        shm->flags = sharedMemory->flags;
        TEEC_Result result = lib.wAllocateSharedMemory((TEEC_Context *)context->imp, shm);
+       sharedMemory->buffer = shm->buffer;
        if (result != TEEC_SUCCESS) {
                free(sharedMemory->imp);
                sharedMemory->imp = NULL;
-       } else {
-               sharedMemory->buffer = shm->buffer;
        }
        return result;
 }