diff mbox

libflash: Initialise entries list earlier

Message ID 20170526040748.10540-1-oohall@gmail.com
State Accepted
Headers show

Commit Message

Oliver O'Halloran May 26, 2017, 4:07 a.m. UTC
In the bail-out path we call ffs_close() to tear down the partially
initialised ffs_handle. ffs_close() expects the entries list to be
initialised so we need to do that earlier to prevent a null pointer
dereference.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
---
 libflash/libffs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Stewart Smith May 26, 2017, 6:55 a.m. UTC | #1
Oliver O'Halloran <oohall@gmail.com> writes:
> In the bail-out path we call ffs_close() to tear down the partially
> initialised ffs_handle. ffs_close() expects the entries list to be
> initialised so we need to do that earlier to prevent a null pointer
> dereference.

Hah, I literally just hit this the other day when doing various crazy
things, merged to master as of 25e42bad1f29384526d4ac1ad43dbd53505a687b
diff mbox

Patch

diff --git a/libflash/libffs.c b/libflash/libffs.c
index dca40188edb8..763e061c7a19 100644
--- a/libflash/libffs.c
+++ b/libflash/libffs.c
@@ -256,6 +256,7 @@  int ffs_init(uint32_t offset, uint32_t max_size, struct blocklevel_device *bl,
 	f->toc_offset = offset;
 	f->max_size = max_size;
 	f->bl = bl;
+	list_head_init(&f->hdr.entries);
 
 	/* Convert and check flash header */
 	rc = ffs_check_convert_header(&f->hdr, &raw_hdr);
@@ -298,7 +299,6 @@  int ffs_init(uint32_t offset, uint32_t max_size, struct blocklevel_device *bl,
 		goto out;
 	}
 
-	list_head_init(&f->hdr.entries);
 	for (i = 0; i < be32_to_cpu(raw_hdr.entry_count); i++) {
 		struct ffs_entry *ent = calloc(1, sizeof(struct ffs_entry));
 		if (!ent) {