Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c818e8d authored by Sunil Paidimarri's avatar Sunil Paidimarri
Browse files

msm: ipa: Fix the memory leak in error cases



Free the skb if packet is not sent to ipa hw
successfully other than TX_BUSY error cases to avoid
memory leak.

Change-Id: I012484aa92e8f25ed0ad4f6709a54f40409ab8d2
CRs-Fixed: 1077525
Signed-off-by: default avatarSunil Paidimarri <hisunil@codeaurora.org>
parent 74fdd731
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1072,6 +1072,8 @@ static int ipa_wwan_xmit(struct sk_buff *skb, struct net_device *dev)
		IPAWANDBG
		("SW filtering out none QMAP packet received from %s",
		current->comm);
		dev_kfree_skb_any(skb);
		dev->stats.tx_dropped++;
		return NETDEV_TX_OK;
	}

@@ -1113,6 +1115,8 @@ static int ipa_wwan_xmit(struct sk_buff *skb, struct net_device *dev)
	if (ret) {
		pr_err("[%s] fatal: ipa rm timer request resource failed %d\n",
		       dev->name, ret);
		dev_kfree_skb_any(skb);
		dev->stats.tx_dropped++;
		return -EFAULT;
	}
	/* IPA_RM checking end */
@@ -1128,7 +1132,6 @@ static int ipa_wwan_xmit(struct sk_buff *skb, struct net_device *dev)

	if (ret) {
		ret = NETDEV_TX_BUSY;
		dev->stats.tx_dropped++;
		goto out;
	}

+6 −2
Original line number Diff line number Diff line
@@ -1067,6 +1067,8 @@ static int ipa3_wwan_xmit(struct sk_buff *skb, struct net_device *dev)
		IPAWANDBG_LOW
		("SW filtering out none QMAP packet received from %s",
		current->comm);
		dev_kfree_skb_any(skb);
		dev->stats.tx_dropped++;
		return NETDEV_TX_OK;
	}

@@ -1078,7 +1080,8 @@ static int ipa3_wwan_xmit(struct sk_buff *skb, struct net_device *dev)
			pr_err("[%s]Queue stop, send ctrl pkts\n", dev->name);
			goto send;
		} else {
			pr_err("[%s]fatal: ipa_wwan_xmit stopped\n", dev->name);
			pr_err("[%s]fatal: ipa3_wwan_xmit stopped\n",
				  dev->name);
			return NETDEV_TX_BUSY;
		}
	}
@@ -1108,6 +1111,8 @@ static int ipa3_wwan_xmit(struct sk_buff *skb, struct net_device *dev)
	if (ret) {
		pr_err("[%s] fatal: ipa rm timer request resource failed %d\n",
		       dev->name, ret);
		dev_kfree_skb_any(skb);
		dev->stats.tx_dropped++;
		return -EFAULT;
	}
	/* IPA_RM checking end */
@@ -1124,7 +1129,6 @@ static int ipa3_wwan_xmit(struct sk_buff *skb, struct net_device *dev)

	if (ret) {
		ret = NETDEV_TX_BUSY;
		dev->stats.tx_dropped++;
		goto out;
	}