• Douglas Anderson's avatar
    mwifiex: Don't release tx_ba_stream_tbl_lock while iterating · e0b636e5
    Douglas Anderson authored
    Despite the macro list_for_each_entry_safe() having the word "safe" in
    the name, it's still not actually safe to release the list spinlock
    while iterating over the list.  The "safe" in the macro name actually
    only means that it's safe to delete the current entry while iterating
    over the list.
    
    Releasing the spinlock while iterating over the list means that someone
    else could come in and adjust the list while we don't have the
    spinlock.  If they do that it can totally mix up our iteration and fully
    corrupt the list.  Later iterating over a corrupted list while holding a
    spinlock and having IRQs off can cause all sorts of hard to debug
    problems.
    
    As evidenced by the other call to
    mwifiex_11n_delete_tx_ba_stream_tbl_entry() in
    mwifiex_11n_delete_all_tx_ba_stream_tbl(), it's actually safe to skip
    the spinlock release.  Let's do that.
    
    No known problems are fixed by this patch, but it could fix all sorts of
    weird problems and it should be very safe.
    Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
    Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
    e0b636e5
11n.c 26.1 KB