mtd: check the return value of malloc and pread

Check the return value of malloc and pread in case they fail.

Signed-off-by: Qiyuan Zhang <zhang.github@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/16070
(cherry picked from commit 3f014543cd4bd099dc089cbb9b9b2d7b0db8a021)
Signed-off-by: Rafal Boni <rafal.boni@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17889
Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
Qiyuan Zhang 2024-08-05 06:47:21 -04:00 committed by Robert Marko
parent 45ce95a9b3
commit 082608fd2b

View File

@ -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;
@ -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;
}