diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2015-01-11 10:26:12 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-01-12 19:45:35 -0800 |
commit | 95775d12219285d6e0116acb6267864582cd01ef (patch) | |
tree | 24aa44a150f966331ba196eea7ca79f0d7a98d9a /drivers/staging/vt6655/device_main.c | |
parent | bc22b4978d06e270372dc243f9341d921346f35a (diff) | |
download | op-kernel-dev-95775d12219285d6e0116acb6267864582cd01ef.zip op-kernel-dev-95775d12219285d6e0116acb6267864582cd01ef.tar.gz |
staging: vt6655: [BUG] Protect MACvSelectPage1 with lock.
The device must not flip to page 1 while in interrupt lock causing
loss of connection or dead lock.
Protect from changes to page by adding lock where user can
change the page in CARDvSetRSPINF, vnt_configure and set_channel
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vt6655/device_main.c')
-rw-r--r-- | drivers/staging/vt6655/device_main.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index a3f5cd8..f5cc78e 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -1565,6 +1565,10 @@ static void vnt_configure(struct ieee80211_hw *hw, if (changed_flags & FIF_ALLMULTI) { if (*total_flags & FIF_ALLMULTI) { + unsigned long flags; + + spin_lock_irqsave(&priv->lock, flags); + if (priv->mc_list_count > 2) { MACvSelectPage1(priv->PortOffset); @@ -1586,6 +1590,8 @@ static void vnt_configure(struct ieee80211_hw *hw, MACvSelectPage0(priv->PortOffset); } + spin_unlock_irqrestore(&priv->lock, flags); + rx_mode |= RCR_MULTICAST | RCR_BROADCAST; } else { rx_mode &= ~(RCR_MULTICAST | RCR_BROADCAST); |