Hello Nicolas Boichat,
I'd like you to do a code review. Please visit
https://review.coreboot.org/22506
to review the following change.
Change subject: linux_mtd: fix wp range detection in mtd_wp_status ......................................................................
linux_mtd: fix wp range detection in mtd_wp_status
The logic in wp range detection in mtd_wp_status is wrong. The first block (start == 0) may possible be write-protected, thus we can't use 'if (!start)' for detecting start of write-protection. Since start and end are both uint32_t, we add two new int variables to flag the status.
Signed-off-by: Wei-Ning Huang wnhuang@google.com
BUG=chrome-os-partner:40208 TEST=`flashrom --wp-enable --wp-range 0x0 0x200000` then `flashrom --wp-status` should display: 'WP: write protect range: start=0x00000000, len=0x00200000'
Change-Id: Id8934c2ba997ff8558a9be3a5aa05b56272c9e85 Reviewed-on: https://chromium-review.googlesource.com/330225 Commit-Ready: Wei-Ning Huang wnhuang@chromium.org Tested-by: Wei-Ning Huang wnhuang@chromium.org Reviewed-by: David Hendricks dhendrix@chromium.org Reviewed-by: Nicolas Boichat drinkcat@chromium.org --- M linux_mtd.c 1 file changed, 9 insertions(+), 4 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/06/22506/1
diff --git a/linux_mtd.c b/linux_mtd.c index c707167..6055aef 100644 --- a/linux_mtd.c +++ b/linux_mtd.c @@ -476,6 +476,7 @@ static int mtd_wp_status(const struct flashchip *flash) { uint32_t start = 0, end = 0; + int start_found = 0, end_found = 0; unsigned int u;
/* For now, assume only one contiguous region can be locked (NOR) */ @@ -492,14 +493,18 @@ msg_perr("%s: ioctl: %s\n", __func__, strerror(errno)); return 1; } else if (rc == 1) { - if (!start) + if (!start_found) { start = erase_info.start; + start_found = 1; + } } else if (rc == 0) { - if (start) - end = erase_info.start - 1; + if (start_found) { + end = erase_info.start; + end_found = 1; + } }
- if (start && end) { + if (start_found && end_found) { msg_pinfo("WP: write protect range: start=0x%08x, " "len=0x%08x\n", start, end - start); /* TODO: Replace this break with "start = end = 0" if