mtd: cfi_cmdset_0002: fix crash when erasing/writing AMD cards
authorAndreas Persson <andreasp56@outlook.com>
Mon, 12 Jul 2021 07:54:52 +0000 (09:54 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Thu, 15 Jul 2021 22:49:22 +0000 (00:49 +0200)
Erasing an AMD linear flash card (AM29F016D) crashes after the first
sector has been erased. Likewise, writing to it crashes after two bytes
have been written. The reason is a missing check for a null pointer -
the cmdset_priv field is not set for this type of card.

Fixes: 4844ef80305d ("mtd: cfi_cmdset_0002: Add support for polling status register")
Signed-off-by: Andreas Persson <andreasp56@outlook.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/DB6P189MB05830B3530B8087476C5CFE4C1159@DB6P189MB0583.EURP189.PROD.OUTLOOK.COM
drivers/mtd/chips/cfi_cmdset_0002.c

index 3097e93787f72625dfc4a22888aec35c68141f1e..a761134fd3bea03432d4e846f01a196a13cbf8b6 100644 (file)
@@ -119,7 +119,7 @@ static int cfi_use_status_reg(struct cfi_private *cfi)
        struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
        u8 poll_mask = CFI_POLL_STATUS_REG | CFI_POLL_DQ;
 
-       return extp->MinorVersion >= '5' &&
+       return extp && extp->MinorVersion >= '5' &&
                (extp->SoftwareFeatures & poll_mask) == CFI_POLL_STATUS_REG;
 }