Skip to content

Commit ee424f7

Browse files
chunkeeygregkh
authored andcommitted
nvmem: u-boot-env: fix crc32_data_offset on redundant u-boot-env
The Western Digital MyBook Live (PowerPC 464/APM82181) has a set of redundant u-boot-env. Loading up the driver the following error: | u_boot_env: Invalid calculated CRC32: 0x4f8f2c86 (expected: 0x98b14514) | u_boot_env: probe of partition@1e000 failed with error -22 Looking up the userspace libubootenv utilities source [0], it looks like the "mark" or "flag" is not part of the crc32 sum... which is unfortunate :( |static int libuboot_load(struct uboot_ctx *ctx) |{ |[...] | if (ctx->redundant) { | [...] | offsetdata = offsetof(struct uboot_env_redund, data); | [...] //-----^^ | } | usable_envsize = ctx->size - offsetdata; | buf[0] = malloc(bufsize); |[...] | for (i = 0; i < copies; i++) { | data = (uint8_t *)(buf[i] + offsetdata); | uint32_t crc; | | ret = devread(ctx, i, buf[i]); | [...] | crc = *(uint32_t *)(buf[i] + offsetcrc); | dev->crc = crc32(0, (uint8_t *)data, usable_envsize); | [0] https://github.com/sbabic/libubootenv/blob/master/src/uboot_env.c#L951 Fixes: d554292 ("nvmem: add driver handling U-Boot environment variables") Signed-off-by: Christian Lamparter <[email protected]> Link: https://lore.kernel.org/r/70a16eae113e08db2390b76e174f4837caa135c3.1667580636.git.chunkeey@gmail.com Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent e54fad8 commit ee424f7

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/nvmem/u-boot-env.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ static int u_boot_env_parse(struct u_boot_env *priv)
135135
break;
136136
case U_BOOT_FORMAT_REDUNDANT:
137137
crc32_offset = offsetof(struct u_boot_env_image_redundant, crc32);
138-
crc32_data_offset = offsetof(struct u_boot_env_image_redundant, mark);
138+
crc32_data_offset = offsetof(struct u_boot_env_image_redundant, data);
139139
data_offset = offsetof(struct u_boot_env_image_redundant, data);
140140
break;
141141
}

0 commit comments

Comments
 (0)