<div dir="ltr">Hello,<div><br></div><div>I&#39;ve been recently trying to figure out why I&#39;m seeing messages like the following in dmesg:</div><div><div><br></div><div> [  135.866308] p2p-wlan1-0: authenticate with 02:03:7f:91:53:51</div><div> [  135.869745] p2p-wlan1-0: send auth to 02:03:7f:91:53:51 (try 1/3)</div><div> [  135.877538] p2p-wlan1-0: authenticated</div><div> [  135.888029] p2p-wlan1-0: associate with 02:03:7f:91:53:51 (try 1/3)</div><div> [  135.912461] p2p-wlan1-0: RX AssocResp from 02:03:7f:91:53:51 (capab=0x411 status=0 aid=1)</div><div> [  135.916226] p2p-wlan1-0: associated</div><div> [  135.918038] p2p-wlan1-0: deauthenticated from 02:03:7f:91:53:51 (Reason: 7=CLASS3_FRAME_FROM_NONASSOC_STA)</div></div><div><br></div><div>This gets repeated a few times. Sometimes the connection succeeds after a few cycles, sometimes it doesn&#39;t. I&#39;ve seen this mostly while testing P2P.<br></div><div><br></div><div>After looking into hostapd code I noticed something strange and I wonder if anyone else is already aware of this problem:<br></div><div><br></div><div> 1. AP starts</div><div> 2. STA-&gt;AP auth OTA</div><div> 3. AP-&gt;STA auth OTA</div><div> 4. STA-&gt;AP assoc req OTA</div><div> 5. AP-&gt;STA assoc resp OTA</div><div> 6. STA sends NullFunc with &quot;STA will go to sleep&quot; bit set<br></div><div> 7. AP driver/device sees a frame from with unknown TA/SA and issues Deauth w/ Reason 7</div><div>   (this Deauth doesn&#39;t originate from hostapd; it comes from the device FW in my case)</div><div> 8. AP sees TX_STATUS for (5) so it just now installs station entry to device/driver</div><div> 9. AP attempts to send EAPOL but STA is no longer there</div><div><br></div><div>I&#39;m able to reproduce this quite easily with QCA6174 (ath10k) acting as P2P GO and Intel 7260 (iwlmvm) as P2P Client.<br></div><div><br></div><div>This also suggests it&#39;s not P2P specific.</div><div><br></div><div>To me this looks like a race in hostapd. The station should be installed to driver _before_ sending Assoc Resp frame, not after. My quick-n-dirty hack seems to help:</div><div><br></div><div><div>--- a/src/ap/ieee802_11.c</div><div>+++ b/src/ap/ieee802_11.c</div><div>@@ -42,6 +42,11 @@</div><div> #include &quot;dfs.h&quot;</div><div> </div><div> </div><div>+static void handle_assoc_cb(struct hostapd_data *hapd,</div><div>+                           const struct ieee80211_mgmt *mgmt,</div><div>+                           size_t len, int reassoc, int ok);</div><div>+</div><div>+</div><div> u8 * hostapd_eid_supp_rates(struct hostapd_data *hapd, u8 *eid)</div><div> {</div><div>        u8 *pos = eid;</div><div>@@ -1675,6 +1680,8 @@ static void send_assoc_resp(struct hostapd_data *hapd, struct sta_info *sta,</div><div> </div><div>        send_len += p - reply-&gt;u.assoc_resp.variable;</div><div> </div><div>+       handle_assoc_cb(hapd, reply, send_len, 0, 1);</div><div>+</div><div>        if (hostapd_drv_send_mlme(hapd, reply, send_len, 0) &lt; 0)</div><div>                wpa_printf(MSG_INFO, &quot;Failed to send assoc resp: %s&quot;,</div><div>                           strerror(errno));</div><div>@@ -2561,7 +2568,6 @@ void ieee802_11_mgmt_cb(struct hostapd_data *hapd, const u8 *buf, size_t len,</div><div>                break;</div><div>        case WLAN_FC_STYPE_ASSOC_RESP:</div><div>                wpa_printf(MSG_DEBUG, &quot;mgmt::assoc_resp cb&quot;);</div><div>-               handle_assoc_cb(hapd, mgmt, len, 0, ok);</div><div>                break;</div><div>        case WLAN_FC_STYPE_REASSOC_RESP:</div><div>                wpa_printf(MSG_DEBUG, &quot;mgmt::reassoc_resp cb&quot;);</div></div><div><br></div><div><br></div><div>Obviously this is whitespace damaged and incomplete as it doesn&#39;t cover all the possible fail cases. It&#39;s just a proof-of-concept for the purpose of discussion.</div><div><br></div><div>Is anyone aware of this problem already? Anyone working on it? Any gotchas I should be aware of before I go into fixing this in a proper way? Or am I missing something and this isn&#39;t actually a problem?</div><div><br></div><div><br></div><div>Michał</div></div>