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>
Mon, 14 Sep 2009 18:36:04 +0000 (14:36 -0400)
commit0aae511c0bf9e49165cfa04c51f6a3bf179aef09
tree520f6c7a194b39e926d8a51e2aae56d726281866
parent392a0baf31b39b50cc6bf6d4400d542641d466c4
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