iwlwifi: incorrect method used for finding valid OTP blocks
authorJay Sternberg <jay.e.sternberg@intel.com>
Fri, 2 Oct 2009 20:43:55 +0000 (13:43 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 7 Oct 2009 20:33:49 +0000 (16:33 -0400)
commit2facba769d7f9e563cf706de709074a2d20f1bba
treebe050890ad5360647fb4f960dc512ec8f3e98f79
parentfbc44bf7177dfd61381da55405550b693943a432
iwlwifi: incorrect method used for finding valid OTP blocks

The address stored in the next link address is a word address but when
reading the OTP blocks, a byte address is used. Also if the blocks are
full and the last link pointer is not zero, then none of the blocks are
valid so return an error.

The algorithm is simply valid blocks have a next address and that
address's contents is zero.

Using the wrong address for the next link address gets arbitrary data,
obviously. In cases seen, the first block is considered valid when it is not.

If the block has in fact been invalidated there may be old data or
there may be no data, bad data, or partial data, there is no way of
telling. Without this patch it is possible that a device with valid OTP data
is unable to work.

Signed-off-by: Jay Sternberg <jay.e.sternberg@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
CC: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-eeprom.c