• Tejun Heo's avatar
    wimax/i2400m: fix i2400m->wake_tx_skb handling · 23663c87
    Tejun Heo authored
    i2400m_net_wake_tx() sets ->wake_tx_skb with the given skb if
    ->wake_tx_ws is not pending; however, i2400m_wake_tx_work() could have
    just started execution and haven't fetched -><wake_tx_skb yet.  The
    previous packet will be leaked.
    
    Update ->wake_tx_skb handling.
    
    * i2400m_net_wake_tx() now tests whether the previous ->wake_tx_skb
      has been consumed by ->wake_tx_ws instead of testing work_pending().
    
    * i2400m_net_wake_stop() is simplified similarly.  It always puts
      ->wake_tx_skb if non-NULL.
    
    * Spurious ->wake_tx_skb dereference outside critical section dropped
      from i2400m_wake_tx_work().
    
    Only compile tested.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarDan Williams <dcbw@redhat.com>
    Cc: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
    Cc: linux-wimax@intel.com
    Cc: wimax@linuxwimax.org
    23663c87
netdev.c 19.7 KB