mirror of
https://github.com/openwrt/openwrt.git
synced 2025-03-10 14:34:13 +00:00
mtd: improve check for TRX header being already fixed
First of all lengths should be compared after checking all blocks for being good/bad. It's because requested length may differ from a final one if there were some bad blocks. Secondly it makes sense to also compare crc32 since we already have a new one calculated. Signed-off-by: Rafał Miłecki <rafal@milecki.pl> (cherry picked from commit 82498a7f7aa86ad0e93ef60d50dccaa0a9549e4c)
This commit is contained in:
parent
828eaeee25
commit
79c8f2f50b
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
include $(INCLUDE_DIR)/kernel.mk
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=mtd
|
PKG_NAME:=mtd
|
||||||
PKG_RELEASE:=22$(if $(SDK),,.1)
|
PKG_RELEASE:=23$(if $(SDK),,.1)
|
||||||
|
|
||||||
PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR := $(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
||||||
STAMP_PREPARED := $(STAMP_PREPARED)_$(call confvar,CONFIG_MTD_REDBOOT_PARTS)
|
STAMP_PREPARED := $(STAMP_PREPARED)_$(call confvar,CONFIG_MTD_REDBOOT_PARTS)
|
||||||
|
@ -207,13 +207,6 @@ mtd_fixtrx(const char *mtd, size_t offset, size_t data_size)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trx->len == STORE32_LE(data_size + TRX_CRC32_DATA_OFFSET)) {
|
|
||||||
if (quiet < 2)
|
|
||||||
fprintf(stderr, "Header already fixed, exiting\n");
|
|
||||||
close(fd);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf = malloc(data_size);
|
buf = malloc(data_size);
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
perror("malloc");
|
perror("malloc");
|
||||||
@ -243,6 +236,14 @@ mtd_fixtrx(const char *mtd, size_t offset, size_t data_size)
|
|||||||
}
|
}
|
||||||
data_size = to - buf;
|
data_size = to - buf;
|
||||||
|
|
||||||
|
if (trx->len == STORE32_LE(data_size + TRX_CRC32_DATA_OFFSET) &&
|
||||||
|
trx->crc32 == STORE32_LE(crc32buf(buf, data_size))) {
|
||||||
|
if (quiet < 2)
|
||||||
|
fprintf(stderr, "Header already fixed, exiting\n");
|
||||||
|
close(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
trx->len = STORE32_LE(data_size + offsetof(struct trx_header, flag_version));
|
trx->len = STORE32_LE(data_size + offsetof(struct trx_header, flag_version));
|
||||||
|
|
||||||
trx->crc32 = STORE32_LE(crc32buf(buf, data_size));
|
trx->crc32 = STORE32_LE(crc32buf(buf, data_size));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user