[RFC/RFT] ssb: Attempt to recover from SPROM CRC error
Michael Büsch
mb at bu3sch.de
Thu Dec 2 17:15:54 EST 2010
On Thu, 2010-12-02 at 10:36 -0600, Larry Finger wrote:
> Current code defaults to SPROM revision 1 if there is a CRC error. In at
> least one known case, most of the corrupt contents are reasonable and
> it is possible to extract the correct MAC address and TX power settings
> from what is read. With this patch, an attempt is made to match the
> apparent revision number with certain SPROM signatures. For those revisions
> without such a feature, a reasonable guess is made. If the apparent
> revision is invalid, or if the signature does not match, the previous
> behavior is kept.
>
> Signed-off-by: Larry Finger <Larry.Finger at lwfinger.net>
> ---
>
> John,
>
> Could you please test this patch with your card?
>
> Thanks,
>
> Larry
> ---
>
> Index: linux-2.6/drivers/ssb/pci.c
> ===================================================================
> --- linux-2.6.orig/drivers/ssb/pci.c
> +++ linux-2.6/drivers/ssb/pci.c
> @@ -620,6 +620,7 @@ static int ssb_pci_sprom_get(struct ssb_
> const struct ssb_sprom *fallback;
> int err = -ENOMEM;
> u16 *buf;
> + u16 revision;
>
> if (!ssb_is_sprom_available(bus)) {
> ssb_printk(KERN_ERR PFX "No SPROM available!\n");
> @@ -671,6 +672,50 @@ static int ssb_pci_sprom_get(struct ssb_
> }
> ssb_printk(KERN_WARNING PFX "WARNING: Invalid"
> " SPROM CRC (corrupt SPROM)\n");
> + /* At this point, we have a faulty SPROM image.
> + * In case only part of it is corrupt, try to
> + * determine what rev we might have */
> + revision = buf[SSB_SPROMSIZE_WORDS_R4 - 1] & 0x00FF;
I think this could possibly overrun the buffer, or did I get something
wrong?
--
Greetings Michael.
More information about the b43-dev
mailing list