Anastasia Klimchuk has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/78984?usp=email )
Change subject: erasure_layout: Fix unaligned region end offset by 1 ......................................................................
erasure_layout: Fix unaligned region end offset by 1
In the case when layout region is not aligned with eraseblock, end region boundary is extended to match the eraseblock. There is a special handling of this extended area (between original end of region and extended one). Fix the offset of this extended area by +1 so that it covers the extended area and not the original region.
Before the patch, the last byte of the original region was failed to write since it was treated as if an extended area, while it was the last byte of the normal layout region.
Ticket: https://ticket.coreboot.org/issues/494 Change-Id: I7f78a0090065cd2a952cba1a5d28179483ba4c55 Signed-off-by: Anastasia Klimchuk aklm@flashrom.org --- M erasure_layout.c 1 file changed, 4 insertions(+), 3 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/84/78984/1
diff --git a/erasure_layout.c b/erasure_layout.c index 0c31911..f8b1104 100644 --- a/erasure_layout.c +++ b/erasure_layout.c @@ -279,9 +279,10 @@ memcpy(newcontents + region_start, curcontents + region_start, old_start - region_start); } if (region_end - old_end) { - read_flash(flashctx, curcontents + old_end, old_end, region_end - old_end); - memcpy(old_end_buf, newcontents + old_end, region_end - old_end); - memcpy(newcontents + old_end, curcontents + old_end, region_end - old_end); + chipoff_t end_offset = old_end + 1; + read_flash(flashctx, curcontents + end_offset, end_offset, region_end - old_end); + memcpy(old_end_buf, newcontents + end_offset, region_end - old_end); + memcpy(newcontents + end_offset, curcontents + end_offset, region_end - old_end); }
// select erase functions