diff options
author | Andrew F. Davis | 2019-07-16 09:49:38 -0400 |
---|---|---|
committer | Tom Rini | 2019-07-29 17:58:52 -0400 |
commit | c1c564af5200dd50bfa4a2f2e9a6c73d10de691c (patch) | |
tree | 29ed3d9705eb153eefbf04eb16c59a1eb4595a12 /arch/arm | |
parent | 411c1f0e635f5e49ef2e3f5d9d31f01f37d962a8 (diff) |
arm: mach-keystone: Use appended original image size in image processing
When an image is signed/encrypted on K2 devices the image may get padded
to meet alignment requirements for the signature/encryption type. The
original size is appended as 4 bytes little-endian to the end of the
final image.
Normally the trailing extra bytes are ignored and so restoring the
exact original size is not important. In the case of initrd the
original size is important as the kernel uses it to look for
additional filesystem data and can do the wrong thing when the
size is not correct.
Read off the original size and report it back from the image post
processing stage.
Signed-off-by: Andrew F. Davis <afd@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-keystone/mon.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/arm/mach-keystone/mon.c b/arch/arm/mach-keystone/mon.c index 51af0285903..cc2ec885056 100644 --- a/arch/arm/mach-keystone/mon.c +++ b/arch/arm/mach-keystone/mon.c @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * K2HK: secure kernel command file + * K2x: Secure commands file * - * (C) Copyright 2012-2014 - * Texas Instruments Incorporated, <www.ti.com> + * Copyright (C) 2012-2019 Texas Instruments Incorporated - http://www.ti.com/ */ +#include <asm/unaligned.h> #include <common.h> #include <command.h> #include <mach/mon.h> @@ -120,9 +120,9 @@ void board_fit_image_post_process(void **p_image, size_t *p_size) /* * Overwrite the image headers after authentication * and decryption. Update size to reflect removal - * of header. + * of header and restore original file size. */ - *p_size -= KS2_HS_SEC_HEADER_LEN; + *p_size = get_unaligned_le32(image + (*p_size - 4)); memcpy(image, image + KS2_HS_SEC_HEADER_LEN, *p_size); /* |