Message ID | 20180227053139.11411-1-cyril.bur@au1.ibm.com |
---|---|
State | Accepted |
Headers | show |
Series | libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase() | expand |
Cyril Bur <cyril.bur@au1.ibm.com> writes: > If blocklevel_smart_erase() detects that the smart erase fits entire in > one erase block, it has an early bail path. In this path it miscaculates > where in the buffer the backend needs to read from to perform the final > write. > > Fixes: d6a5b53f ("libflash/blocklevel: Add blocklevel_smart_erase()") > Fixes: https://github.com/open-power/skiboot/issues/151 > Reported-by: Pridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com> > Tested-by: Pridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com> > Signed-off-by: Cyril Bur <cyril.bur@au1.ibm.com> > --- > libflash/blocklevel.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Thanks! Merged to master as of 682e196627a062731dc2596276013f2e9fa9f6db and I created a 5.10.x stable branch and merged it there as of fe8945fb5edb98a1a2ad8f0ce91ef49b9edbbdac
diff --git a/libflash/blocklevel.c b/libflash/blocklevel.c index eaab431a..809d33cb 100644 --- a/libflash/blocklevel.c +++ b/libflash/blocklevel.c @@ -348,7 +348,7 @@ int blocklevel_smart_erase(struct blocklevel_device *bl, uint64_t pos, uint64_t * so we need to write back the chunk at the end of the block */ if (base_pos + base_len + len < base_pos + block_size) { - rc = bl->write(bl, pos + len, erase_buf + pos + len, + rc = bl->write(bl, pos + len, erase_buf + base_len + len, block_size - base_len - len); FL_DBG("%s: Early exit, everything was in one erase block\n", __func__);