fmap.c: Avoid undefined behaviour with fmap_lsearch([len:=0])

Calling libflashrom entry-points that internally dispatch to
fmap_lsearch() can result in a integer overflow. Therefore
validate the length paramter before attempting to use it.

Tested: `make`

Change-Id: Ifb408c55c3b69ddff453dcc704b7389298050473
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Spotted-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-on: https://review.coreboot.org/c/flashrom/+/61545
Original-Reviewed-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-by: Nico Huber <nico.h@gmx.de>
Original-Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom-stable/+/71442
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/fmap.c b/fmap.c
index e13de67..7793be7 100644
--- a/fmap.c
+++ b/fmap.c
@@ -96,6 +96,9 @@
 	off_t offset;
 	bool fmap_found = 0;
 
+	if (len < sizeof(struct fmap))
+		return -1;
+
 	for (offset = 0; offset <= (off_t)(len - sizeof(struct fmap)); offset++) {
 		if (is_valid_fmap((struct fmap *)&buf[offset])) {
 			fmap_found = 1;