Skip to content

Commit

Permalink
IB/ipath: Future proof eeprom checksum code (contents reading)
Browse files Browse the repository at this point in the history
In an earlier change, the amount of data read from the flash was
mistakenly limited to the size known to the current driver.  This causes
problems when the length is increased, and written with the new longer
version; the checksum would fail because not enough data was read.
Always read the full 128 byte length to prevent this.

Signed-off-by: Dave Olson <dave.olson@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
  • Loading branch information
Dave Olson authored and Roland Dreier committed Oct 10, 2007
1 parent 5504669 commit d29cc6e
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions drivers/infiniband/hw/ipath/ipath_eeprom.c
Original file line number Diff line number Diff line change
Expand Up @@ -596,7 +596,11 @@ void ipath_get_eeprom_info(struct ipath_devdata *dd)
goto bail;
}

len = offsetof(struct ipath_flash, if_future);
/*
* read full flash, not just currently used part, since it may have
* been written with a newer definition
* */
len = sizeof(struct ipath_flash);
buf = vmalloc(len);
if (!buf) {
ipath_dev_err(dd, "Couldn't allocate memory to read %u "
Expand Down Expand Up @@ -737,8 +741,10 @@ int ipath_update_eeprom_log(struct ipath_devdata *dd)
/*
* The quick-check above determined that there is something worthy
* of logging, so get current contents and do a more detailed idea.
* read full flash, not just currently used part, since it may have
* been written with a newer definition
*/
len = offsetof(struct ipath_flash, if_future);
len = sizeof(struct ipath_flash);
buf = vmalloc(len);
ret = 1;
if (!buf) {
Expand Down

0 comments on commit d29cc6e

Please sign in to comment.