On Thu Jan 8, 2026 at 5:57 PM CET, Miquel Raynal wrote: > In the case of the first block being locked (or the few first blocks), > if the user want to fully unlock the device it has two possibilities: > - either it asks to unlock the entire device, and this works; > - or it asks to unlock just the block(s) that are currently locked, > which fails. > > It fails because the conditions "can_be_top" and "can_be_bottom" are > true. Indeed, in this case, we unlock everything, so the TB bit does not > matter. However in the current implementation, use_top would be true (as > this is the favourite option) and lock_len, which in practice should be > reduced down to 0, is set to "nor->params->size - (ofs + len)" which is > a positive number. This is wrong. > > An easy way is to simply add an extra condition. In the unlock() path, > if we can achieve the same result from both sides, it means we unlock > everything and lock_len must simply be 0. A comment is added to clarify > that logic. > > Fixes: 3dd8012a8eeb ("mtd: spi-nor: add TB (Top/Bottom) protect support") > Cc: stable@kernel.org > Signed-off-by: Miquel Raynal Reviewed-by: Michael Walle