From: Leo Kim <leo....@atmel.com>

This patch fix kernel fail after ifconfig wlan0 up.
 - if normal operation, kfree functions don't execute.

Signed-off-by: Leo Kim <leo....@atmel.com>
Signed-off-by: Tony Cho <tony....@atmel.com>
---
 drivers/staging/wilc1000/wilc_msgqueue.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c 
b/drivers/staging/wilc1000/wilc_msgqueue.c
index d5ebd6d..f412121 100644
--- a/drivers/staging/wilc1000/wilc_msgqueue.c
+++ b/drivers/staging/wilc1000/wilc_msgqueue.c
@@ -76,8 +76,10 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle,
 
        /* construct a new message */
        pstrMessage = kmalloc(sizeof(Message), GFP_ATOMIC);
-       if (!pstrMessage)
-               return -ENOMEM;
+       if (!pstrMessage) {
+               result = -ENOMEM;
+               goto ERRORHANDLER;
+       }
        pstrMessage->u32Length = u32SendBufferSize;
        pstrMessage->pstrNext = NULL;
        pstrMessage->pvBuffer = kmalloc(u32SendBufferSize, GFP_ATOMIC);
@@ -104,10 +106,12 @@ int wilc_mq_send(WILC_MsgQueueHandle *pHandle,
        up(&pHandle->hSem);
 
 ERRORHANDLER:
-       /* error occured, free any allocations */
-       if (pstrMessage) {
-               kfree(pstrMessage->pvBuffer);
-               kfree(pstrMessage);
+       if (result) {
+               /* error occured, free any allocations */
+               if (pstrMessage) {
+                       kfree(pstrMessage->pvBuffer);
+                       kfree(pstrMessage);
+               }
        }
 
        return result;
-- 
1.9.1

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

Reply via email to