diff mbox

mtd: spi-nor: fix wrong "fully unlocked" test

Message ID 1466789894-17535-1-git-send-email-computersforpeace@gmail.com
State Accepted
Commit 06586204714b7befec99e554c71687b0b40f351c
Headers show

Commit Message

Brian Norris June 24, 2016, 5:38 p.m. UTC
In stm_unlock(), the test to determine whether we've fully unlocked the
flash checks for the lock length to be equal to the flash size. That is
a typo/think-o -- the condition actually means the flash is completely
*locked.* We should be using the inverse condition -- that the lock
length is 0 (i.e., no protection).

The result of this bug is that we never actually turn off the Status
Register Write Disable bit, even if the flash is completely unlocked.
Now we can.

Fixes: 47b8edbf0d43 ("mtd: spi-nor: disallow further writes to SR if WP# is low")
Reported-by: Giorgio <giorgio.nicole@arcor.de>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Cc: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
---
 drivers/mtd/spi-nor/spi-nor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Brian Norris July 10, 2016, 2:30 a.m. UTC | #1
On Fri, Jun 24, 2016 at 10:38:14AM -0700, Brian Norris wrote:
> In stm_unlock(), the test to determine whether we've fully unlocked the
> flash checks for the lock length to be equal to the flash size. That is
> a typo/think-o -- the condition actually means the flash is completely
> *locked.* We should be using the inverse condition -- that the lock
> length is 0 (i.e., no protection).
> 
> The result of this bug is that we never actually turn off the Status
> Register Write Disable bit, even if the flash is completely unlocked.
> Now we can.
> 
> Fixes: 47b8edbf0d43 ("mtd: spi-nor: disallow further writes to SR if WP# is low")
> Reported-by: Giorgio <giorgio.nicole@arcor.de>
> Signed-off-by: Brian Norris <computersforpeace@gmail.com>
> Cc: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>

Applied to l2-mtd.git
diff mbox

Patch

diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
index a63922ed6385..14cf6ac8c0a5 100644
--- a/drivers/mtd/spi-nor/spi-nor.c
+++ b/drivers/mtd/spi-nor/spi-nor.c
@@ -661,7 +661,7 @@  static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
 	status_new = (status_old & ~mask & ~SR_TB) | val;
 
 	/* Don't protect status register if we're fully unlocked */
-	if (lock_len == mtd->size)
+	if (lock_len == 0)
 		status_new &= ~SR_SRWD;
 
 	if (!use_top)