From: Ben Levinsky <[email protected]>

In the receive callback check if message is NULL to prevent
possibility of crash by NULL pointer dereferencing.

Signed-off-by: Ben Levinsky <[email protected]>
Signed-off-by: Tanmay Shah <[email protected]>
---
 drivers/remoteproc/xlnx_r5_remoteproc.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/remoteproc/xlnx_r5_remoteproc.c 
b/drivers/remoteproc/xlnx_r5_remoteproc.c
index 148d8c622566..5e92dc51f1c0 100644
--- a/drivers/remoteproc/xlnx_r5_remoteproc.c
+++ b/drivers/remoteproc/xlnx_r5_remoteproc.c
@@ -232,17 +232,19 @@ static void zynqmp_r5_mb_rx_cb(struct mbox_client *cl, 
void *msg)
 
        ipi = container_of(cl, struct mbox_info, mbox_cl);
 
-       /* copy data from ipi buffer to r5_core */
+       /* copy data from ipi buffer to r5_core if IPI is buffered. */
        ipi_msg = (struct zynqmp_ipi_message *)msg;
-       buf_msg = (struct zynqmp_ipi_message *)ipi->rx_mc_buf;
-       len = ipi_msg->len;
-       if (len > IPI_BUF_LEN_MAX) {
-               dev_warn(cl->dev, "msg size exceeded than %d\n",
-                        IPI_BUF_LEN_MAX);
-               len = IPI_BUF_LEN_MAX;
+       if (ipi_msg) {
+               buf_msg = (struct zynqmp_ipi_message *)ipi->rx_mc_buf;
+               len = ipi_msg->len;
+               if (len > IPI_BUF_LEN_MAX) {
+                       dev_warn(cl->dev, "msg size exceeded than %d\n",
+                                IPI_BUF_LEN_MAX);
+                       len = IPI_BUF_LEN_MAX;
+               }
+               buf_msg->len = len;
+               memcpy(buf_msg->data, ipi_msg->data, len);
        }
-       buf_msg->len = len;
-       memcpy(buf_msg->data, ipi_msg->data, len);
 
        /* received and processed interrupt ack */
        if (mbox_send_message(ipi->rx_chan, NULL) < 0)
-- 
2.34.1


Reply via email to