iwlwifi: fix potential rx buffer loss
authorReinette Chatre <reinette.chatre@intel.com>
Fri, 11 Sep 2009 17:38:12 +0000 (10:38 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 23 Sep 2009 15:35:40 +0000 (11:35 -0400)
commitde0bd50845eb5935ce3d503c5d2f565d6cb9ece1
tree11403d40a5985886bf5fa04f6006654e11130c83
parentc929c5a1281b666fabc9aa94c607932ec6d28c6d
iwlwifi: fix potential rx buffer loss

RX handling maintains a few lists that keep track of the RX buffers.
Buffers move from one list to the other as they are used, replenished, and
again made available for usage. In one such instance, when a buffer is used
it enters the "rx_used" list. When buffers are replenished an skb is
attached to the buffer and it is moved to the "rx_free" list. The problem
here is that the buffer is first removed from the "rx_used" list _before_ the
skb is allocated. Thus, if the skb allocation fails this buffer remains
removed from the "rx_used" list and is thus lost for future usage.

Fix this by first allocating the skb before trying to attach it to a list.
We add an additional check to not do this unnecessarily.

Reported-by: Rick Farrington <rickdic@hotmail.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-rx.c
drivers/net/wireless/iwlwifi/iwl3945-base.c