diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index adab904200c8..346f02040077 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -1540,6 +1540,7 @@ static bool hdd_is_arp_local(struct sk_buff *skb) arp = (struct arphdr *)skb->data; if (arp->ar_op == htons(ARPOP_REQUEST)) { + rtnl_lock(); in_dev = __in_dev_get_rtnl(skb->dev); if (in_dev) { for (ifap = &in_dev->ifa_list; (ifa = *ifap) != NULL; @@ -1556,9 +1557,12 @@ static bool hdd_is_arp_local(struct sk_buff *skb) memcpy(&tip, arp_ptr, 4); hdd_debug("ARP packet: local IP: %x dest IP: %x", ifa->ifa_local, tip); - if (ifa->ifa_local == tip) + if (ifa->ifa_local == tip) { + rtnl_unlock(); return true; + } } + rtnl_unlock(); } return false;