• Andres Salomon's avatar
    libertas: ensure we clean up a scan request properly · 3209e061
    Andres Salomon authored
    Commit 2e30168b ("libertas: terminate scan when stopping interface")
    adds cleanup code to lbs_eth_stop to call cfg80211_scan_done if there's
    an outstanding cfg80211_scan_request.  However, it assumes that the
    scan request was allocated via the cfg80211 stack.  Libertas has
    its own internal allocation method, kept track of with
    priv->internal_scan.  This doesn't set scan_req->wiphy, amongst other
    things, which results in hitting a BUG() when we call cfg80211_scan_done
    on the request.
    
    This provides a function to take care of the low-level scan_req cleanup
    details.  We simply call that to deal with finishing up scan requests.
    
    The bug we were hitting was:
    
    [  964.321495] kernel BUG at net/wireless/core.h:87!
    [  964.329970] Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [  964.341963] pgd = dcf80000
    ...
    [  964.849998] 9fe0: 00000000 beb417b8 4018e280 401e822c 60000010 00000004 00000000 00000000
    [  964.865007] [<c003104c>] (__bug+0x1c/0x28) from [<c0384ffc>] (cfg80211_scan_done+0x54/0x6c)
    [  964.895324] [<c0384ffc>] (cfg80211_scan_done+0x54/0x6c) from [<bf028bac>] (lbs_eth_stop+0x10c/0x188 [libertas])
    [  964.895324] [<bf028bac>] (lbs_eth_stop+0x10c/0x188 [libertas]) from [<c03002a0>] (__dev_close_many+0x94/0xc4)
    [  964.918995] [<c03002a0>] (__dev_close_many+0x94/0xc4) from [<c030037c>] (dev_close_many+0x78/0xe0)
    Signed-off-by: default avatarAndres Salomon <dilinger@queued.net>
    Acked-by: default avatarDan Williams <dcbw@redhat.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    3209e061
main.c 31.2 KB