From c9045fedd0eb167996ef76225d354876212934ac Mon Sep 17 00:00:00 2001 From: Nachiket Kukade Date: Mon, 19 Jun 2017 15:14:43 +0530 Subject: [PATCH] qcacld-3.0: Ignore address change requests when interface is down In some cases kernel incorrectly forwards the address change request down to the driver even when interface is down. Driver tries to get the session pointer from mac context and ends up crashing due to NULL pointer dereference. Ignore address change requests when interface is down. CRs-Fixed: 2060889 Change-Id: I2b572c517b335856cdf2ae04433b4a48a9598572 --- core/hdd/src/wlan_hdd_power.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index b0c18c5e40b9..76a0eda44316 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -224,6 +224,14 @@ static int __wlan_hdd_ipv6_changed(struct notifier_block *nb, if (errno) goto exit; + /* Ignore if the interface is down */ + if (!(ndev->flags & IFF_UP)) { + hdd_err("Rcvd change addr request on %s(flags 0x%X)", + ndev->name, ndev->flags); + hdd_err("NETDEV Interface is down, ignoring..."); + goto exit; + } + hdd_debug("invoking sme_dhcp_done_ind"); sme_dhcp_done_ind(hdd_ctx->hHal, adapter->sessionId); schedule_work(&adapter->ipv6NotifierWorkQueue); @@ -798,6 +806,13 @@ static int __wlan_hdd_ipv4_changed(struct notifier_block *nb, if (errno) goto exit; + /* Ignore if the interface is down */ + if (!(ndev->flags & IFF_UP)) { + hdd_err("Rcvd change addr request on %s(flags 0x%X)", + ndev->name, ndev->flags); + hdd_err("NETDEV Interface is down, ignoring..."); + goto exit; + } hdd_debug("invoking sme_dhcp_done_ind"); sme_dhcp_done_ind(hdd_ctx->hHal, adapter->sessionId);