mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-28 18:28:23 -05:00
9684c7567e
When a mesh point reconnects by starting from Authentication frame sequence, the plink count was not decremented from its last connection. This resulted in leaking peer link count and causing wpa_supplicant to reject the connection after max_peer_links (default: 99) reconnects. This was reproduced by pre-configuring 2 mesh points with mesh credentials. Boot both mesh points and make sure they connect to each other. Then in a loop reboot one of the mesh points after it successfully connects while leaving the other mesh point up and running. After 99 iterations the supplicant on mesh point that is not rebooting will reject the connection request from the other mesh point. Fix this by decrementing num_plinks when freeing a STA entry that is still in PLINK_ESTAB state. Signed-off-by: Srinivasa Duvvuri <sduvvuri@chromium.org>
44 lines
1.3 KiB
C
44 lines
1.3 KiB
C
/*
|
|
* WPA Supplicant - Basic mesh peer management
|
|
* Copyright (c) 2013-2014, cozybit, Inc. All rights reserved.
|
|
*
|
|
* This software may be distributed under the terms of the BSD license.
|
|
* See README for more details.
|
|
*/
|
|
|
|
#ifndef MESH_MPM_H
|
|
#define MESH_MPM_H
|
|
|
|
/* notify MPM of new mesh peer to be inserted in MPM and driver */
|
|
void wpa_mesh_new_mesh_peer(struct wpa_supplicant *wpa_s, const u8 *addr,
|
|
struct ieee802_11_elems *elems);
|
|
void mesh_mpm_deinit(struct wpa_supplicant *wpa_s, struct hostapd_iface *ifmsh);
|
|
void mesh_mpm_auth_peer(struct wpa_supplicant *wpa_s, const u8 *addr);
|
|
void mesh_mpm_free_sta(struct hostapd_data *hapd, struct sta_info *sta);
|
|
void wpa_mesh_set_plink_state(struct wpa_supplicant *wpa_s,
|
|
struct sta_info *sta,
|
|
enum mesh_plink_state state);
|
|
|
|
#ifdef CONFIG_MESH
|
|
|
|
void mesh_mpm_action_rx(struct wpa_supplicant *wpa_s,
|
|
const struct ieee80211_mgmt *mgmt, size_t len);
|
|
void mesh_mpm_mgmt_rx(struct wpa_supplicant *wpa_s, struct rx_mgmt *rx_mgmt);
|
|
|
|
#else /* CONFIG_MESH */
|
|
|
|
static inline void mesh_mpm_action_rx(struct wpa_supplicant *wpa_s,
|
|
const struct ieee80211_mgmt *mgmt,
|
|
size_t len)
|
|
{
|
|
}
|
|
|
|
static inline void mesh_mpm_mgmt_rx(struct wpa_supplicant *wpa_s,
|
|
struct rx_mgmt *rx_mgmt)
|
|
{
|
|
}
|
|
|
|
#endif /* CONFIG_MESH */
|
|
|
|
#endif /* MESH_MPM_H */
|