Skip to content

Commit

Permalink
mtd: check the return value of malloc and pread
Browse files Browse the repository at this point in the history
Check the return value of malloc and pread in case they fail.

Signed-off-by: Qiyuan Zhang <[email protected]>
  • Loading branch information
Qiyuan Zhang authored and testuser7 committed Sep 17, 2024
1 parent fac2848 commit ccd1c52
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions package/system/mtd/src/linksys_bootcount.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,31 @@ int mtd_resetbc(const char *mtd)
}

num_bc = mtd_info.size / bc_offset_increment;
curr = malloc(bc_offset_increment);
curr = malloc(bc_offset_increment);

if(curr == NULL) {
DLOG_ERR("Failed to allocate %u bytes from memory.", bc_offset_increment);

retval = -6;
goto out;
}

for (i = 0; i < num_bc; i++) {
pread(fd, curr, sizeof(struct bootcounter), i * bc_offset_increment);
ret = pread(fd, curr, sizeof(struct bootcounter), i * bc_offset_increment);

if(ret != sizeof(struct bootcounter)) {
DLOG_ERR("Failed to read boot-count log at offset 0x%08x.", i * bc_offset_increment);

retval = -5;
goto out;
}

/* Existing code assumes erase is to 0xff; left as-is (2019) */
if (curr->magic == 0xffffffff)
break;

if (curr->magic != BOOTCOUNT_MAGIC || curr->checksum != curr->magic + curr->count) {
DLOG_ERR("Unexpected boot-count log at offset %08x: magic %08x boot count %08x checksum %08x; aborting.",
DLOG_ERR("Unexpected boot-count log at offset 0x%08x: magic 0x%08x boot count 0x%08x checksum 0x%08x; aborting.",
i * bc_offset_increment, curr->magic, curr->count, curr->checksum);

retval = -2;
Expand Down Expand Up @@ -179,7 +193,9 @@ int mtd_resetbc(const char *mtd)
}

out:
if (curr != NULL) free(curr);
if (curr != NULL)
free(curr);

close(fd);
return retval;
}

0 comments on commit ccd1c52

Please sign in to comment.