From 43f998274f788ade1ab01e62fb025b7d54f9ab24 Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Wed, 17 Nov 2021 14:24:04 +1100 Subject: flashrom.c: Validate before allocate in verify_range() Simplify a goto away for free'ing a buffer by validating before attempting to allocate. BUG=none TEST=builds Change-Id: Iae886f203d1c59ae9a89421f7483a4ec3f747256 Signed-off-by: Edward O'Callaghan Reviewed-on: https://review.coreboot.org/c/flashrom/+/59372 Tested-by: build bot (Jenkins) Reviewed-by: Angel Pons Reviewed-by: Anastasia Klimchuk --- flashrom.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/flashrom.c b/flashrom.c index 48d953b06..b62d38c30 100644 --- a/flashrom.c +++ b/flashrom.c @@ -417,6 +417,13 @@ int verify_range(struct flashctx *flash, const uint8_t *cmpbuf, unsigned int sta if (!len) return -1; + if (start + len > flash->chip->total_size * 1024) { + msg_gerr("Error: %s called with start 0x%x + len 0x%x >" + " total_size 0x%x\n", __func__, start, len, + flash->chip->total_size * 1024); + return -1; + } + if (!flash->chip->read) { msg_cerr("ERROR: flashrom has no read function for this flash chip.\n"); return -1; @@ -427,17 +434,8 @@ int verify_range(struct flashctx *flash, const uint8_t *cmpbuf, unsigned int sta msg_gerr("Could not allocate memory!\n"); return -1; } - int ret = 0; - - if (start + len > flash->chip->total_size * 1024) { - msg_gerr("Error: %s called with start 0x%x + len 0x%x >" - " total_size 0x%x\n", __func__, start, len, - flash->chip->total_size * 1024); - ret = -1; - goto out_free; - } - ret = flash->chip->read(flash, readbuf, start, len); + int ret = flash->chip->read(flash, readbuf, start, len); if (ret) { msg_gerr("Verification impossible because read failed " "at 0x%x (len 0x%x)\n", start, len); -- cgit v1.2.3