TransportRpmsg: Add NULL check to avoid NULL pointer access
[ipc/ipcdev.git] / packages / ti / ipc / transports / TransportRpmsg.c
index ea3a5fcf2a65782c98ff1f8eb2a8bb40e6225434..365cca05b2fe7f06463f27291e968e62ede33917 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * Copyright (c) 2012-2019, Texas Instruments Incorporated
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -55,8 +55,8 @@
 #include <ti/ipc/rpmsg/Rpmsg.h>
 #include <ti/ipc/rpmsg/NameMap.h>
 
-#include <ti/ipc/rpmsg/_MessageQCopy.h>
-#include <ti/ipc/rpmsg/MessageQCopy.h>
+#include <ti/ipc/rpmsg/_RPMessage.h>
+#include <ti/ipc/rpmsg/RPMessage.h>
 
 #include <ti/ipc/namesrv/_NameServerRemoteRpmsg.h>
 
@@ -72,7 +72,7 @@
 /* Name of the rpmsg socket on host: */
 #define RPMSG_SOCKET_NAME  "rpmsg-proto"
 
-static Void transportCallbackFxn(MessageQCopy_Handle msgq, UArg arg, Ptr data,
+static Void transportCallbackFxn(RPMessage_Handle msgq, UArg arg, Ptr data,
                                       UInt16 dataLen, UInt32 srcAddr);
 
 /*
@@ -97,17 +97,21 @@ Int TransportRpmsg_Instance_init(TransportRpmsg_Object *obj,
 
     /* This MessageQ Transport over RPMSG only talks to the "HOST" for now: */
     Assert_isTrue(remoteProcId == MultiProc_getId("HOST"), NULL);
-    MessageQCopy_init(remoteProcId);
+    RPMessage_init(remoteProcId);
 
     /* set object fields */
     obj->priority     = params->priority;
     obj->remoteProcId = remoteProcId;
 
     /* Announce our "MessageQ" service to the HOST: */
+#ifdef RPMSG_NS_2_0
     NameMap_register(RPMSG_SOCKET_NAME, RPMSG_SOCKET_NAME, RPMSG_MESSAGEQ_PORT);
+#else
+    NameMap_register(RPMSG_SOCKET_NAME, RPMSG_MESSAGEQ_PORT);
+#endif
 
     /* Associate incomming messages with this transport's callback fxn: */
-    obj->msgqHandle = MessageQCopy_create(RPMSG_MESSAGEQ_PORT,
+    obj->msgqHandle = RPMessage_create(RPMSG_MESSAGEQ_PORT,
                                           transportCallbackFxn,
                                           (UArg)obj,
                                           &myEndpoint);
@@ -143,8 +147,12 @@ Void TransportRpmsg_Instance_finalize(TransportRpmsg_Object *obj, Int status)
     Log_print0(Diags_ENTRY, "--> "FXNN);
 
     /* Announce our "MessageQ" service is going away: */
+#ifdef RPMSG_NS_2_0
     NameMap_unregister(RPMSG_SOCKET_NAME, RPMSG_SOCKET_NAME,
             RPMSG_MESSAGEQ_PORT);
+#else
+    NameMap_unregister(RPMSG_SOCKET_NAME, RPMSG_MESSAGEQ_PORT);
+#endif
 
     switch(status) {
         case 0: /* MessageQ_registerTransport succeeded */
@@ -156,7 +164,7 @@ Void TransportRpmsg_Instance_finalize(TransportRpmsg_Object *obj, Int status)
             break;
     }
 
-    MessageQCopy_finalize();
+    RPMessage_finalize();
 
 #undef FXNN
 }
@@ -188,7 +196,7 @@ Bool TransportRpmsg_put(TransportRpmsg_Object *obj, Ptr msg)
 
     Log_print3(Diags_INFO, FXNN": sending msg from: %d, to: %d, dataLen: %d",
                   (IArg)RPMSG_MESSAGEQ_PORT, (IArg)dstAddr, (IArg)msgSize);
-    status = MessageQCopy_send(obj->remoteProcId, dstAddr, RPMSG_MESSAGEQ_PORT,
+    status = RPMessage_send(obj->remoteProcId, dstAddr, RPMSG_MESSAGEQ_PORT,
                       msg, msgSize);
 
     /* free the app's message */
@@ -196,7 +204,7 @@ Bool TransportRpmsg_put(TransportRpmsg_Object *obj, Ptr msg)
        MessageQ_free(msg);
     }
 
-    return (status == MessageQCopy_S_SUCCESS? TRUE: FALSE);
+    return (status == RPMessage_S_SUCCESS? TRUE: FALSE);
 }
 #undef FXNN
 
@@ -228,7 +236,7 @@ Int TransportRpmsg_getStatus(TransportRpmsg_Object *obj)
  *
  */
 #define FXNN "transportCallbackFxn"
-static Void transportCallbackFxn(MessageQCopy_Handle msgq, UArg arg, Ptr data,
+static Void transportCallbackFxn(RPMessage_Handle msgq, UArg arg, Ptr data,
                                       UInt16 dataLen, UInt32 srcAddr)
 {
     UInt32            queueId;
@@ -298,6 +306,10 @@ static Void transportCallbackFxn(MessageQCopy_Handle msgq, UArg arg, Ptr data,
 
     /* Make sure buf is not NULL */
     Assert_isTrue(buf != NULL, NULL);
+    if (buf == NULL) {
+        Log_print0(Diags_INFO, FXNN" MessageQ_alloc failed \n");
+        goto exit;
+    }
 
     /* copy the message to the buffer allocated. */
     memcpy((Ptr)buf, (Ptr)msg, msgSize);