Hi Rafał, url: https://github.com/0day-ci/linux/commits/Rafa-Mi-ecki/brcmfmac-use-bphy_err-in-all-wiphy-related-code/20190214-140004 base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master smatch warnings: drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c:114 brcmf_fweh_call_event_handler() warn: variable dereferenced before check 'ifp' (see line 110) drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c:187 brcmf_fweh_handle_if_event() error: we previously assumed 'ifp' could be null (see line 184) drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c:189 brcmf_fweh_handle_if_event() warn: variable dereferenced before check 'ifp' (see line 187) # https://github.com/0day-ci/linux/commit/e12dba9f5ed77216c5984a4b57ddc31ba23376c9 git remote add linux-review https://github.com/0day-ci/linux git remote update linux-review git checkout e12dba9f5ed77216c5984a4b57ddc31ba23376c9 vim +/ifp +114 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 104 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 105 static int brcmf_fweh_call_event_handler(struct brcmf_if *ifp, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 106 enum brcmf_fweh_event_code code, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 107 struct brcmf_event_msg *emsg, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 108 void *data) 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 109 { e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 @110 struct wiphy *wiphy = ifp->drvr->wiphy; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 111 struct brcmf_fweh_info *fweh; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 112 int err = -EINVAL; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 113 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 @114 if (ifp) { 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 115 fweh = &ifp->drvr->fweh; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 116 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 117 /* handle the event if valid interface and handler */ 5857f9c6 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-04-05 118 if (fweh->evt_handler[code]) 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 119 err = fweh->evt_handler[code](ifp, emsg, data); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 120 else e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 121 bphy_err(wiphy, "unhandled event %d ignored\n", code); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 122 } else { e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 123 bphy_err(wiphy, "no interface object\n"); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 124 } 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 125 return err; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 126 } 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 127 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 128 /** 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 129 * brcmf_fweh_handle_if_event() - handle IF event. 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 130 * 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 131 * @drvr: driver information object. 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 132 * @item: queue entry. 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 133 * @ifpp: interface object (may change upon ADD action). 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 134 */ 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 135 static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 136 struct brcmf_event_msg *emsg, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 137 void *data) 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 138 { 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 139 struct brcmf_if_event *ifevent = data; e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 140 struct wiphy *wiphy = drvr->wiphy; 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 141 struct brcmf_if *ifp; ddddfed2 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2015-08-26 142 bool is_p2pdev; 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 143 int err = 0; 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 144 37a869ec drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-10-29 145 brcmf_dbg(EVENT, "action: %u ifidx: %u bsscfgidx: %u flags: %u role: %u\n", 37a869ec drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-10-29 146 ifevent->action, ifevent->ifidx, ifevent->bsscfgidx, 8fdd1578 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-04-05 147 ifevent->flags, ifevent->role); 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 148 35a3cbcc drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 149 /* The P2P Device interface event must not be ignored contrary to what 35a3cbcc drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 150 * firmware tells us. Older firmware uses p2p noif, with sta role. cb8dc71f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 151 * This should be accepted when p2pdev_setup is ongoing. TDLS setup will cb8dc71f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 152 * use the same ifevent and should be ignored. 87c47903 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2014-09-12 153 */ 35a3cbcc drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 154 is_p2pdev = ((ifevent->flags & BRCMF_E_IF_FLAG_NOIF) && 35a3cbcc drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 155 (ifevent->role == BRCMF_E_IF_ROLE_P2P_CLIENT || cb8dc71f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 156 ((ifevent->role == BRCMF_E_IF_ROLE_STA) && cb8dc71f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-09-18 157 (drvr->fweh.p2pdev_setup_ongoing)))); ddddfed2 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2015-08-26 158 if (!is_p2pdev && (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) { 2ee8382f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-08-10 159 brcmf_dbg(EVENT, "event can be ignored\n"); 2ee8382f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-08-10 160 return; 2ee8382f drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-08-10 161 } 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 162 if (ifevent->ifidx >= BRCMF_MAX_IFS) { e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 163 bphy_err(wiphy, "invalid interface index: %u\n", e12dba9f drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2019-02-13 164 ifevent->ifidx); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 165 return; 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 166 } 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 167 37a869ec drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-10-29 168 ifp = drvr->iflist[ifevent->bsscfgidx]; 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 169 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 170 if (ifevent->action == BRCMF_E_IF_ADD) { 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 171 brcmf_dbg(EVENT, "adding %s (%pM)\n", emsg->ifname, 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 172 emsg->addr); 37a869ec drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-10-29 173 ifp = brcmf_add_if(drvr, ifevent->bsscfgidx, ifevent->ifidx, ddddfed2 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2015-08-26 174 is_p2pdev, emsg->ifname, emsg->addr); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 175 if (IS_ERR(ifp)) 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 176 return; 2b76acdb drivers/net/wireless/brcm80211/brcmfmac/fweh.c Hante Meuleman 2015-10-08 177 if (!is_p2pdev) 9fdc64bb drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Franky Lin 2017-03-10 178 brcmf_proto_add_if(drvr, ifp); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 179 if (!drvr->fweh.evt_handler[BRCMF_E_IF]) 9390ace9 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-05-27 180 if (brcmf_net_attach(ifp, false) < 0) 9390ace9 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-05-27 181 return; 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 182 } 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 183 87c47903 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2014-09-12 @184 if (ifp && ifevent->action == BRCMF_E_IF_CHANGE) 66ded1f8 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Franky Lin 2017-03-10 185 brcmf_proto_reset_if(drvr, ifp); bb8c8063 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-04-03 186 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 @187 err = brcmf_fweh_call_event_handler(ifp, emsg->event_code, emsg, data); 3e0a97e1 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 188 a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 @189 if (ifp && ifevent->action == BRCMF_E_IF_DEL) { a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 190 bool armed = brcmf_cfg80211_vif_event_armed(drvr->config); a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 191 a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 192 /* Default handling in case no-one waits for this event */ a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 193 if (!armed) b50ddfa8 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-17 194 brcmf_remove_interface(ifp, false); bb8c8063 drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2013-04-03 195 } a63b0987 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c Rafał Miłecki 2016-06-29 196 } 5c36b99a drivers/net/wireless/brcm80211/brcmfmac/fweh.c Arend van Spriel 2012-11-14 197 :::::: The code at line 114 was first introduced by commit :::::: 3e0a97e1507c482d2299a6ff24e597c1316ba60a brcmfmac: restructure handling of IF event :::::: TO: Arend van Spriel <arend@xxxxxxxxxxxx> :::::: CC: John W. Linville <linville@xxxxxxxxxxxxx> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation