[U-Boot] [PATCH] sf: Fix NULL pointer exception for flashes without lock methods

commit c3c016c "sf: Add SPI NOR protection mechanism" introduced flash_lock()/flash_unlock()/flash_is_locked() methods for SPI flash, but not every flash driver supplies these. We should test these methods against NULL before actually calling them.
Signed-off-by: Bin Meng bmeng.cn@gmail.com ---
drivers/mtd/spi/sf_ops.c | 18 ++++++++++++------ include/spi_flash.h | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c index d832464..384224d 100644 --- a/drivers/mtd/spi/sf_ops.c +++ b/drivers/mtd/spi/sf_ops.c @@ -268,9 +268,12 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) return -1; }
- if (flash->flash_is_locked(flash, offset, len) > 0) { - printf("offset 0x%x is protected and cannot be erased\n", offset); - return -EINVAL; + if (flash->flash_is_locked) { + if (flash->flash_is_locked(flash, offset, len) > 0) { + printf("offset 0x%x is protected and cannot be erased\n", + offset); + return -EINVAL; + } }
cmd[0] = flash->erase_cmd; @@ -315,9 +318,12 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
page_size = flash->page_size;
- if (flash->flash_is_locked(flash, offset, len) > 0) { - printf("offset 0x%x is protected and cannot be written\n", offset); - return -EINVAL; + if (flash->flash_is_locked) { + if (flash->flash_is_locked(flash, offset, len) > 0) { + printf("offset 0x%x is protected and cannot be written\n", + offset); + return -EINVAL; + } }
cmd[0] = flash->write_cmd; diff --git a/include/spi_flash.h b/include/spi_flash.h index 0ae0062..f25b3e7 100644 --- a/include/spi_flash.h +++ b/include/spi_flash.h @@ -237,7 +237,7 @@ static inline int spi_flash_erase(struct spi_flash *flash, u32 offset, static inline int spi_flash_protect(struct spi_flash *flash, u32 ofs, u32 len, bool prot) { - if (!flash->flash_lock) + if (!flash->flash_lock || !flash->flash_unlock) return -EOPNOTSUPP;
if (prot)

On Fri, Nov 13, 2015 at 8:46 AM, Bin Meng bmeng.cn@gmail.com wrote:
commit c3c016c "sf: Add SPI NOR protection mechanism" introduced flash_lock()/flash_unlock()/flash_is_locked() methods for SPI flash, but not every flash driver supplies these. We should test these methods against NULL before actually calling them.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
Thanks for the fix.
Reviewed-by: Fabio Estevam fabio.estevam@freescale.com

Hi Tom,
On Fri, Nov 13, 2015 at 6:49 PM, Fabio Estevam festevam@gmail.com wrote:
On Fri, Nov 13, 2015 at 8:46 AM, Bin Meng bmeng.cn@gmail.com wrote:
commit c3c016c "sf: Add SPI NOR protection mechanism" introduced flash_lock()/flash_unlock()/flash_is_locked() methods for SPI flash, but not every flash driver supplies these. We should test these methods against NULL before actually calling them.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
Thanks for the fix.
Reviewed-by: Fabio Estevam fabio.estevam@freescale.com
Could you please apply this directly as this fix booting crash at least on Chromebook Link?
Regards, Bin

On Nov 13, 2015 6:37 PM, "Bin Meng" bmeng.cn@gmail.com wrote:
Hi Tom,
On Fri, Nov 13, 2015 at 6:49 PM, Fabio Estevam festevam@gmail.com wrote:
On Fri, Nov 13, 2015 at 8:46 AM, Bin Meng bmeng.cn@gmail.com wrote:
commit c3c016c "sf: Add SPI NOR protection mechanism" introduced flash_lock()/flash_unlock()/flash_is_locked() methods for SPI flash, but not every flash driver supplies these. We should test these methods against NULL before actually calling them.
Signed-off-by: Bin Meng bmeng.cn@gmail.com
Thanks for the fix.
Reviewed-by: Fabio Estevam fabio.estevam@freescale.com
Could you please apply this directly as this fix booting crash at least on Chromebook Link?
Reviewed-by: Jagan Teki jteki@openedev.com

On Fri, Nov 13, 2015 at 02:46:26AM -0800, Bin Meng wrote:
commit c3c016c "sf: Add SPI NOR protection mechanism" introduced flash_lock()/flash_unlock()/flash_is_locked() methods for SPI flash, but not every flash driver supplies these. We should test these methods against NULL before actually calling them.
Signed-off-by: Bin Meng bmeng.cn@gmail.com Reviewed-by: Fabio Estevam fabio.estevam@freescale.com Reviewed-by: Jagan Teki jteki@openedev.com
Applied to u-boot/master, thanks!
participants (4)
-
Bin Meng
-
Fabio Estevam
-
Jagan Teki
-
Tom Rini