From: Reinette Chatre <reinette.chatre@intel.com>
To: linville@tuxdriver.com
Cc: linux-wireless@vger.kernel.org,
ipw3945-devel@lists.sourceforge.net,
Jay Sternberg <jay.e.sternberg@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>,
stable@kernel.org
Subject: [PATCH 01/13 v2.6.31, v2.6.32 and w-t] iwlwifi: incorrect method used for finding valid OTP blocks
Date: Fri, 2 Oct 2009 13:43:55 -0700 [thread overview]
Message-ID: <1254516247-4085-2-git-send-email-reinette.chatre@intel.com> (raw)
In-Reply-To: <1254516247-4085-1-git-send-email-reinette.chatre@intel.com>
From: Jay Sternberg <jay.e.sternberg@intel.com>
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
---
drivers/net/wireless/iwlwifi/iwl-eeprom.c | 23 +++++++++++------------
1 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
index 3d2b93a..e14c995 100644
--- a/drivers/net/wireless/iwlwifi/iwl-eeprom.c
+++ b/drivers/net/wireless/iwlwifi/iwl-eeprom.c
@@ -410,7 +410,6 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
u16 *validblockaddr)
{
u16 next_link_addr = 0, link_value = 0, valid_addr;
- int ret = 0;
int usedblocks = 0;
/* set addressing mode to absolute to traverse the link list */
@@ -430,29 +429,29 @@ static int iwl_find_otp_image(struct iwl_priv *priv,
* check for more block on the link list
*/
valid_addr = next_link_addr;
- next_link_addr = link_value;
+ next_link_addr = link_value * sizeof(u16);
IWL_DEBUG_INFO(priv, "OTP blocks %d addr 0x%x\n",
usedblocks, next_link_addr);
if (iwl_read_otp_word(priv, next_link_addr, &link_value))
return -EINVAL;
if (!link_value) {
/*
- * reach the end of link list,
+ * reach the end of link list, return success and
* set address point to the starting address
* of the image
*/
- goto done;
+ *validblockaddr = valid_addr;
+ /* skip first 2 bytes (link list pointer) */
+ *validblockaddr += 2;
+ return 0;
}
/* more in the link list, continue */
usedblocks++;
- } while (usedblocks < priv->cfg->max_ll_items);
- /* OTP full, use last block */
- IWL_DEBUG_INFO(priv, "OTP is full, use last block\n");
-done:
- *validblockaddr = valid_addr;
- /* skip first 2 bytes (link list pointer) */
- *validblockaddr += 2;
- return ret;
+ } while (usedblocks <= priv->cfg->max_ll_items);
+
+ /* OTP has no valid blocks */
+ IWL_DEBUG_INFO(priv, "OTP has no valid blocks\n");
+ return -EINVAL;
}
/**
--
1.5.6.3
next prev parent reply other threads:[~2009-10-02 20:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-02 20:43 [PATCH 0/13] iwlwifi driver updates 10/2/2009 Reinette Chatre
2009-10-02 20:43 ` Reinette Chatre [this message]
2009-10-02 20:43 ` [PATCH 02/13] iwlwifi: fix EEPROM enhance tx power offset Reinette Chatre
2009-10-02 20:59 ` reinette chatre
2009-10-02 20:43 ` [PATCH 03/13] iwlwifi: fix compile warning Reinette Chatre
2009-10-02 20:43 ` [PATCH 04/13] iwlwifi: reliable entering of critical temperature state Reinette Chatre
2009-10-02 20:43 ` [PATCH 05/13] iwlwifi: change valid EEPROM version for 1000 series Reinette Chatre
2009-10-02 20:44 ` [PATCH 06/13] iwlwifi: clear the translate table area Reinette Chatre
2009-10-02 20:44 ` [PATCH 07/13] iwlwifi: set default aggregation frame count limit to 31 Reinette Chatre
2009-10-02 20:44 ` [PATCH 08/13] iwlwifi: device tracing Reinette Chatre
2009-10-06 14:48 ` Stanislaw Gruszka
2009-10-06 14:59 ` Johannes Berg
2009-10-02 20:44 ` [PATCH 09/13] iwlwifi: LED cleanup Reinette Chatre
2009-10-02 20:44 ` [PATCH 10/13] iwlwifi/iwl3945 : unify apm stop operation Reinette Chatre
2009-10-02 20:44 ` [PATCH 11/13] iwlwifi: replace iwl_poll_direct_bit with iwl_poll_bit for CSR access Reinette Chatre
2009-10-02 20:44 ` [PATCH 12/13] iwlwifi: validate the signature for EEPROM and OTP Reinette Chatre
2009-10-02 20:44 ` [PATCH 13/13] iwlagn: fix compile warning in iwl5000_gain_computation Reinette Chatre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1254516247-4085-2-git-send-email-reinette.chatre@intel.com \
--to=reinette.chatre@intel.com \
--cc=ipw3945-devel@lists.sourceforge.net \
--cc=jay.e.sternberg@intel.com \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=stable@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox