diff --git a/drivers/rpmsg/qcom_glink_slatecom.c b/drivers/rpmsg/qcom_glink_slatecom.c index e2a4f49042cf..d57adfa3c92f 100644 --- a/drivers/rpmsg/qcom_glink_slatecom.c +++ b/drivers/rpmsg/qcom_glink_slatecom.c @@ -1694,12 +1694,21 @@ static int glink_slatecom_rx_data(struct glink_slatecom *glink, if (intent->size - intent->offset < chunk_size) { dev_err(glink->dev, "Insufficient space in intent\n"); + glink_slatecom_free_intent(channel, intent); mutex_unlock(&channel->intent_lock); /* The packet header lied, drop payload */ return msglen; } + if (chunk_size % WORD_SIZE) { + dev_err(glink->dev, "For chunk_size %d use short packet\n", + chunk_size); + glink_slatecom_free_intent(channel, intent); + mutex_unlock(&channel->intent_lock); + return -EBADMSG; + } + rc = slatecom_ahb_read(glink->slatecom_handle, (uint32_t)(size_t)addr, ALIGN(chunk_size, WORD_SIZE)/WORD_SIZE, intent->data + intent->offset);