In case the first allocation fails, we can return directly, and if the
second allocation fails we can goto to the end of the function where we
free the memory and return error.

Signed-off-by: Mike Rapoport <mike.rapop...@gmail.com>
---
 drivers/staging/wilc1000/wilc_msgqueue.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c 
b/drivers/staging/wilc1000/wilc_msgqueue.c
index 127b3e5..6e032b8 100644
--- a/drivers/staging/wilc1000/wilc_msgqueue.c
+++ b/drivers/staging/wilc1000/wilc_msgqueue.c
@@ -65,11 +65,13 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle,
 
        /* construct a new message */
        pstrMessage = kmalloc(sizeof(Message), GFP_ATOMIC);
-       WILC_NULLCHECK(s32RetStatus, pstrMessage);
+       if (!pstrMessage)
+               return WILC_NULL_PTR;
        pstrMessage->u32Length = u32SendBufferSize;
        pstrMessage->pstrNext = NULL;
        pstrMessage->pvBuffer = kmalloc(u32SendBufferSize, GFP_ATOMIC);
-       WILC_NULLCHECK(s32RetStatus, pstrMessage->pvBuffer);
+       if (!pstrMessage->pvBuffer)
+               goto err_alloc_buffer;
        memcpy(pstrMessage->pvBuffer, pvSendBuffer, u32SendBufferSize);
 
        /* add it to the message queue */
@@ -90,16 +92,13 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle,
 
        up(&pHandle->hSem);
 
-       WILC_CATCH(s32RetStatus)
-       {
-               /* error occured, free any allocations */
-               if (pstrMessage) {
-                       kfree(pstrMessage->pvBuffer);
-                       kfree(pstrMessage);
-               }
-       }
-
        return s32RetStatus;
+
+err_alloc_buffer:
+       /* error occurred, free any allocations */
+       kfree(pstrMessage);
+
+       return WILC_NULL_PTR;
 }
 
 /*!
-- 
2.1.0

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to