NFC: pn533: Fix memleak while scheduling next cmd
authorWaldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>
Wed, 3 Apr 2013 06:02:03 +0000 (08:02 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 11 Apr 2013 14:29:02 +0000 (16:29 +0200)
In case of error from __pn533_send_frame_async() while sending
next cmd from the queue (cmd_wq), cmd->req, cmd->resp and
cmd->arg pointers won't be freed.

Signed-off-by: Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/pn533.c

index 24ffbe0..48902e5 100644 (file)
@@ -886,6 +886,7 @@ static void pn533_wq_cmd(struct work_struct *work)
 {
        struct pn533 *dev = container_of(work, struct pn533, cmd_work);
        struct pn533_cmd *cmd;
+       int rc;
 
        mutex_lock(&dev->cmd_lock);
 
@@ -901,8 +902,13 @@ static void pn533_wq_cmd(struct work_struct *work)
 
        mutex_unlock(&dev->cmd_lock);
 
-       __pn533_send_frame_async(dev, cmd->req, cmd->resp, cmd->resp_len,
-                                pn533_send_async_complete, cmd->arg);
+       rc = __pn533_send_frame_async(dev, cmd->req, cmd->resp, cmd->resp_len,
+                                     pn533_send_async_complete, cmd->arg);
+       if (rc < 0) {
+               dev_kfree_skb(cmd->req);
+               dev_kfree_skb(cmd->resp);
+               kfree(cmd->arg);
+       }
 
        kfree(cmd);
 }