[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[152/156] b43: Workaround circular locking in hw-tkip key update callback
    2.6.33-stable review patch.  If anyone has any objections, please let us know.


    From: Michael Buesch <>

    commit 96869a39399269a776a94812e9fff3d38b47d838 upstream

    The TKIP key update callback is called from the RX path, where the driver
    mutex is already locked. This results in a circular locking bug.
    Avoid this by removing the lock.

    Johannes noted that there is a separate bug: The callback still breaks on SDIO
    hardware, because SDIO hardware access needs to sleep, but we are not allowed
    to sleep in the callback due to mac80211's RCU locking.

    Signed-off-by: Michael Buesch <>
    Tested-by: Larry Finger <>
    Cc: Johannes Berg <>
    Signed-off-by: John W. Linville <>
    Signed-off-by: Greg Kroah-Hartman <>

    drivers/net/wireless/b43/main.c | 11 ++++-------
    1 file changed, 4 insertions(+), 7 deletions(-)

    --- a/drivers/net/wireless/b43/main.c
    +++ b/drivers/net/wireless/b43/main.c
    @@ -852,19 +852,16 @@ static void b43_op_update_tkip_key(struc
    if (B43_WARN_ON(!modparam_hwtkip))

    - mutex_lock(&wl->mutex);
    + /* This is only called from the RX path through mac80211, where
    + * our mutex is already locked. */
    + B43_WARN_ON(!mutex_is_locked(&wl->mutex));
    dev = wl->current_dev;
    - if (!dev || b43_status(dev) < B43_STAT_INITIALIZED)
    - goto out_unlock;
    + B43_WARN_ON(!dev || b43_status(dev) < B43_STAT_INITIALIZED);

    keymac_write(dev, index, NULL); /* First zero out mac to avoid race */

    rx_tkip_phase1_write(dev, index, iv32, phase1key);
    keymac_write(dev, index, addr);
    - mutex_unlock(&wl->mutex);

    static void do_key_write(struct b43_wldev *dev,

     \ /
      Last update: 2010-03-31 01:27    [W:0.025 / U:24.992 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site