[PATCH v2] wext: handle mode switches correctly for mac80211
Dan Williams
dcbw
Fri Aug 29 09:57:49 PDT 2008
On Wed, 2008-06-04 at 21:02 +0300, Jouni Malinen wrote:
> On Wed, Jun 04, 2008 at 01:36:23PM -0400, Dan Williams wrote:
> > Since mac80211 requires that the device be !IFF_UP to change the mode
> > (and I think the old prism54 fullmac driver does too), do that. This
> > shouldn't harm fullmac devices since they can handle mode switches on
> > the fly and usually don't care about up/down that much.
>
> Thanks! Applied.
A bug just got reported as a result of this for mac80211 drivers.
https://bugzilla.redhat.com/show_bug.cgi?id=459399
The basic problem is that since taking the device down clears the keys
from the driver on many mac80211-based cards, and since the mode gets
set _after_ the keys have been set in the driver, the keys get cleared
on a mode switch and the resulting association is wrong. The report is
about ad-hoc mode specifically, but this could happen when switching
from adhoc back to managed mode.
Fabrice suggested using WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC for the
driver, but it seems to me that setting the mode as _early_ as possible
is the best thing to do. Perhaps create another driver hook for
set_mode and call that (if needed) very early in
wpa_supplicant_associate() around line 924:
/* Starting new association, so clear the possibly used WPA IE from the
* previous association. */
wpa_sm_set_assoc_wpa_ie(wpa_s->wpa, NULL, 0);
+ wpa_drv_set_mode(wpa_s, ssid->mode);
#ifdef IEEE8021X_EAPOL
if (ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) {
if (ssid->leap) {
I can't think of a reason why setting the mode first isn't the right
thing to do in the first place. Thoughts? I'll cook up a patch for
this if it sounds OK.
Dan
More information about the Hostap
mailing list