In the Linux kernel, the following vulnerability has been resolved: mtd: spi-nor: swp: Improve locking user experience 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.
https://git.kernel.org/stable/c/e1d456b26bf23e30db305a6184e8abd9ab68bbf2
https://git.kernel.org/stable/c/dc341272cf8e15a2c511db3c4df5dab8adf70ad0
https://git.kernel.org/stable/c/c0806df5cf806545160f3fdac3c888926ceac557
https://git.kernel.org/stable/c/9a0d8dec3d11ca95d67537ea8fa6ee2730a5038a
https://git.kernel.org/stable/c/6110ab5ffd84e8daa654652446a03ce2f77580a7
https://git.kernel.org/stable/c/12d4d69221159e6d0e72400ec81195d691169b53