iwlwifi: incorrect method used for finding valid OTP blocks
commiteef5edb4ef6eeedf945b3bc81bc593804e522d7d
authorJay Sternberg <jay.e.sternberg@intel.com>
Fri, 2 Oct 2009 20:43:55 +0000 (2 13:43 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 22 Oct 2009 22:12:00 +0000 (22 15:12 -0700)
treea6027af5231ecd8fef7183aa5d822c6103dfe278
parent670add0a279e39e13a66876389c64d4f7dcf0379
iwlwifi: incorrect method used for finding valid OTP blocks

commit 2facba769d7f9e563cf706de709074a2d20f1bba upstream.

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>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/wireless/iwlwifi/iwl-eeprom.c