Skip to contentSkip to conversation

mt76 testmode fixes

PATCH New Lorenzo Bianconi 1 participant 4 messages May 27, 2021

Subsystems (3)
lore
Share & tools
lore

Lorenzo Bianconi

author maintainer
#0 lore raw

cover mt76 testmode fixes

Fix an undefined behaviour and a memory leak in mt76 testmode code

Lorenzo Bianconi (3):
mt76: testmode: fix memory leak in mt76_testmode_alloc_skb
mt76: testmode: remove unnecessary function calls in
mt76_testmode_free_skb
mt76: testmode: remove undefined behaviour in mt76_testmode_alloc_skb

 drivers/net/wireless/mediatek/mt76/testmode.c | 24 ++++++-------------
 1 file changed, 7 insertions(+), 17 deletions(-)
Signature · 1 line
2.31.1
author maintainer
#1 lore raw

PATCH 1/3 mt76: testmode: fix memory leak in mt76_testmode_alloc_skb

Free all pending frames in case of failure in mt76_testmode_alloc_skb routine

Fixes 2601dda8faa76 ("mt76: testmode: add support to send larger packet")
---
 drivers/net/wireless/mediatek/mt76/testmode.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/wireless/mediatek/mt76/testmode.c +4 -1
index 001d0ba5f73e..f40387a866ee 100644
@@ -158,8 +158,11 @@ int mt76_testmode_alloc_skb(struct mt76_phy *phy, u32 len)
 			frag_len = MT_TXP_MAX_LEN;
 
 		frag = alloc_skb(frag_len, GFP_KERNEL);
-		if (!frag)
+		if (!frag) {
+			mt76_testmode_free_skb(phy);
+			dev_kfree_skb(head);
 			return -ENOMEM;
+		}
 
 		__skb_put_zero(frag, frag_len);
 		head->len += frag->len;
Signature · 1 line
2.31.1
author maintainer
#2 lore raw

PATCH 2/3 mt76: testmode: remove unnecessary function calls in mt76_testmode_free_skb

In reply to Lorenzo Bianconi

Get rid of unnecessary function calls in mt76_testmode_free_skb routine since they are already managed by dev_kfree_skb

---
 drivers/net/wireless/mediatek/mt76/testmode.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)
drivers/net/wireless/mediatek/mt76/testmode.c +1 -10
index f40387a866ee..c516469278a4 100644
@@ -88,17 +88,8 @@ static void
 mt76_testmode_free_skb(struct mt76_phy *phy)
 {
 	struct mt76_testmode_data *td = &phy->test;
-	struct sk_buff *skb = td->tx_skb;
-
-	if (!skb)
-		return;
-
-	if (skb_has_frag_list(skb)) {
-		kfree_skb_list(skb_shinfo(skb)->frag_list);
-		skb_shinfo(skb)->frag_list = NULL;
-	}
 
-	dev_kfree_skb(skb);
+	dev_kfree_skb(td->tx_skb);
 	td->tx_skb = NULL;
 }
 
Signature · 1 line
2.31.1
author maintainer
#3 lore raw

PATCH 3/3 mt76: testmode: remove undefined behaviour in mt76_testmode_alloc_skb

In reply to Lorenzo Bianconi

Get rif of an undefined behaviour in mt76_testmode_alloc_skb routine allocating skb frames

Fixes 2601dda8faa76 ("mt76: testmode: add support to send larger packet")
---
 drivers/net/wireless/mediatek/mt76/testmode.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
drivers/net/wireless/mediatek/mt76/testmode.c +2 -6
index c516469278a4..c6a85a0cfc89 100644
@@ -159,12 +159,8 @@ int mt76_testmode_alloc_skb(struct mt76_phy *phy, u32 len)
 		head->len += frag->len;
 		head->data_len += frag->len;
 
-		if (*frag_tail) {
-			(*frag_tail)->next = frag;
-			frag_tail = &frag;
-		} else {
-			*frag_tail = frag;
-		}
+		*frag_tail = frag;
+		frag_tail = &(*frag_tail)->next;
 	}
 
 	mt76_testmode_free_skb(phy);
Signature · 1 line
2.31.1