diff options
author | Cyril Bur <cyril.bur@au1.ibm.com> | 2018-02-27 16:31:39 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2018-02-28 20:28:28 -0600 |
commit | 682e196627a062731dc2596276013f2e9fa9f6db (patch) | |
tree | 7ac840a1f06b7b41120ccd4edf2e82536b9b407b | |
parent | f24db9e5c8c481bab13bb9739d48c46af00f9f6b (diff) | |
download | skiboot-682e196627a062731dc2596276013f2e9fa9f6db.zip skiboot-682e196627a062731dc2596276013f2e9fa9f6db.tar.gz skiboot-682e196627a062731dc2596276013f2e9fa9f6db.tar.bz2 |
libflash/blocklevel: Correct miscalculation in blocklevel_smart_erase()
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>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | libflash/blocklevel.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libflash/blocklevel.c b/libflash/blocklevel.c index eaab431..809d33c 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__); |