nfc: nfcmrvl: Fix potential memory leak in nfcmrvl_i2c_nci_send()
authorShang XiaoJing <shangxiaojing@huawei.com>
Thu, 27 Oct 2022 14:03:32 +0000 (22:03 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 30 Oct 2022 21:43:26 +0000 (21:43 +0000)
nfcmrvl_i2c_nci_send() will be called by nfcmrvl_nci_send(), and skb
should be freed in nfcmrvl_i2c_nci_send(). However, nfcmrvl_nci_send()
will only free skb when i2c_master_send() return >=0, which means skb
will memleak when i2c_master_send() failed. Free skb no matter whether
i2c_master_send() succeeds.

Fixes: b5b3e23e4cac ("NFC: nfcmrvl: add i2c driver")
Signed-off-by: Shang XiaoJing <shangxiaojing@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/nfc/nfcmrvl/i2c.c

index acef0cf..24436c9 100644 (file)
@@ -132,10 +132,15 @@ static int nfcmrvl_i2c_nci_send(struct nfcmrvl_private *priv,
                        ret = -EREMOTEIO;
                } else
                        ret = 0;
+       }
+
+       if (ret) {
                kfree_skb(skb);
+               return ret;
        }
 
-       return ret;
+       consume_skb(skb);
+       return 0;
 }
 
 static void nfcmrvl_i2c_nci_update_config(struct nfcmrvl_private *priv,