summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorterry-ht.chen <terry-ht.chen@broadcom.corp-partner.google.com>2020-06-10 17:24:45 +0800
committerAhmed ElArabawy <arabawy@google.com>2020-06-12 13:50:59 +0000
commit0771ecce65496e2249f06b3ed78aa630a0cbd288 (patch)
tree0bc417e3d54ff4f285d78c96de4dcbd161dbb0d6
parentbe4d388b3f6c62fe53420f42d0628fb65b935f37 (diff)
downloadbcm43752-0771ecce65496e2249f06b3ed78aa630a0cbd288.tar.gz
wifi: DHD driver crash when Softap set mac address
1. When softap mode, before set mac address, driver execute dev_close, then driver delete the virtual interface (wlan1). Then interface become NULL, cause driver crash. So before delete the virtual interface, driver needs to check dhd_allow_stop, to determine delete interface or not. 2. Add error handler when set mac address fail. Bug: 158318360 Test: Roger help to verify on Slider Change-Id: I7ccc223ee7172b9545edd7f7d05f38b9fd474e8a Signed-off-by: Roger Wang <wangroger@google.com>
-rw-r--r--dhd_linux.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/dhd_linux.c b/dhd_linux.c
index b91b902..6589c27 100644
--- a/dhd_linux.c
+++ b/dhd_linux.c
@@ -2672,6 +2672,10 @@ _dhd_set_mac_address(dhd_info_t *dhd, int ifidx, uint8 *addr)
ETHER_ADDR_LEN, NULL, 0, TRUE);
if (ret < 0) {
DHD_ERROR(("%s: set cur_etheraddr failed\n", dhd_ifname(&dhd->pub, ifidx)));
+#ifdef DHD_NOTIFY_MAC_CHANGED
+ dhd_allow_stop = TRUE;
+ return ret;
+#endif /* DHD_NOTIFY_MAC_CHANGED */
} else {
memcpy(dhd->iflist[ifidx]->net->dev_addr, addr, ETHER_ADDR_LEN);
if (ifidx == 0)
@@ -7696,7 +7700,7 @@ dhd_static_if_stop(struct net_device *net)
DHD_INFO(("[%s][STATIC_IF] Enter \n", net->name));
cfg = wl_get_cfg(net);
- if (!IS_CFG80211_STATIC_IF(cfg, net)) {
+ if (!IS_CFG80211_STATIC_IF(cfg, net) || !dhd_allow_stop) {
DHD_TRACE(("non-static interface (%s)..do nothing \n", net->name));
return BCME_OK;
}