[PATCH] FIP: don't free the buffer twice when parsing fails

Ahmad Fatoum a.fatoum at barebox.org
Sun Nov 8 12:15:23 PST 2026


fip_do_parse_buf() hands the buffer to the fip_state before it checks
anything, so fip_free() frees it. fip_parse() freed it on a parse error
as well, and fiptool and the bootm handler call fip_free() afterwards,
which trips over the double free:

  !block_is_free(block) && "block already marked as free"common/tlsf.c 1069

Let's leave freeing the buffer to fip_free().

Fixes: 47d995141515 ("fip: fix wrong function call")
Assisted-by: Claude:opus-5.5
Signed-off-by: Ahmad Fatoum <a.fatoum at barebox.org>
---
 lib/fip.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/lib/fip.c b/lib/fip.c
index 9470aa5d3398..7aca217532c5 100644
--- a/lib/fip.c
+++ b/lib/fip.c
@@ -277,12 +277,7 @@ int fip_parse(struct fip_state *fip,
 		return ret;
 	}
 
-	ret = fip_do_parse_buf(fip, buf, size, toc_header_out);
-
-	if (ret)
-		free(buf);
-
-	return ret;
+	return fip_do_parse_buf(fip, buf, size, toc_header_out);
 }
 
 static struct fip_image *fip_read_image_from_file(const uuid_t *uuid, const char *filename)
-- 
2.47.3




More information about the barebox mailing list