diff --git a/core/hdd/src/wlan_hdd_ipa.c b/core/hdd/src/wlan_hdd_ipa.c index cc87f50f6943..788cd17b31e4 100644 --- a/core/hdd/src/wlan_hdd_ipa.c +++ b/core/hdd/src/wlan_hdd_ipa.c @@ -3815,6 +3815,10 @@ static void hdd_ipa_forward(struct hdd_ipa_priv *hdd_ipa, struct hdd_ipa_pm_tx_cb *pm_tx_cb; qdf_spin_lock_bh(&hdd_ipa->pm_lock); + + /* Set IPA ownership for intra-BSS Tx packets to avoid skb_orphan */ + qdf_nbuf_ipa_owned_set(skb); + /* WLAN subsystem is in suspend, put int queue */ if (hdd_ipa->suspended) { qdf_spin_unlock_bh(&hdd_ipa->pm_lock); diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index 3c69145be9c6..37fa81cc5fc0 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -398,6 +398,12 @@ static int __hdd_softap_hard_start_xmit(struct sk_buff *skb, goto drop_pkt_accounting; #if defined(IPA_OFFLOAD) + } else { + /* + * Clear the IPA ownership after check it to avoid ipa_free_skb + * is called when Tx completed for intra-BSS Tx packets + */ + qdf_nbuf_ipa_owned_clear(skb); } #endif