Skip to content

Commit

Permalink
libertas: Reduce the WPA key installation time.
Browse files Browse the repository at this point in the history
WPA requires that the PTK is installed immediately after the 4-way handshake
in order to properly decrypt the subsequent incoming EAPOL-GTK frame.  If the
PTK is not enabled by the time the EAPOL-GTK frame arrives, the frame is
dropped and the supplicant does not receive the group key.

This will happen with fast Access Points that send the EAPOL-GTK frame before
the suplicant has successfully installed and enabled the PTK.  To mitigate
this situation, this patch simplifies and accelerates the SIOCSIWENCODEEXT
execution.

This patch resolves OLPC ticket 7825 (http://dev.laptop.org/ticket/7825)

Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Javier Cardona authored and John W. Linville committed Sep 15, 2008
1 parent bed7aac commit 9c31fd6
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions drivers/net/wireless/libertas/wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ static inline void lbs_postpone_association_work(struct lbs_private *priv)
queue_delayed_work(priv->work_thread, &priv->assoc_work, HZ / 2);
}

static inline void lbs_do_association_work(struct lbs_private *priv)
{
if (priv->surpriseremoved)
return;
cancel_delayed_work(&priv->assoc_work);
queue_delayed_work(priv->work_thread, &priv->assoc_work, 0);
}

static inline void lbs_cancel_association_work(struct lbs_private *priv)
{
cancel_delayed_work(&priv->assoc_work);
Expand Down Expand Up @@ -1585,12 +1593,14 @@ static int lbs_set_encodeext(struct net_device *dev,
set_bit(ASSOC_FLAG_SECINFO, &assoc_req->flags);
}

disable_wep (assoc_req);
/* Only disable wep if necessary: can't waste time here. */
if (priv->mac_control & CMD_ACT_MAC_WEP_ENABLE)
disable_wep(assoc_req);
}

out:
if (ret == 0) {
lbs_postpone_association_work(priv);
if (ret == 0) { /* key installation is time critical: postpone not! */
lbs_do_association_work(priv);
} else {
lbs_cancel_association_work(priv);
}
Expand Down

0 comments on commit 9c31fd6

Please sign in to comment.