efi_loader: update runtime services table crc32

The crc32 of the runtime services table must be updated after detaching.

efi_update_table_header_crc32() must be __efi_runtime. So move it to
efi_runtime.c

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
Heinrich Schuchardt 2018-07-29 09:49:04 +02:00 committed by Alexander Graf
parent 483dbab9f9
commit a39f39cdd8
3 changed files with 18 additions and 12 deletions

View file

@ -84,6 +84,18 @@ struct elf_rela {
* handle a good number of runtime callbacks
*/
/**
* efi_update_table_header_crc32() - Update crc32 in table header
*
* @table: EFI table
*/
void __efi_runtime efi_update_table_header_crc32(struct efi_table_hdr *table)
{
table->crc32 = 0;
table->crc32 = crc32(0, (const unsigned char *)table,
table->headersize);
}
static void EFIAPI efi_reset_system_boottime(
enum efi_reset_type reset_type,
efi_status_t reset_status,
@ -273,6 +285,9 @@ static void efi_runtime_detach(ulong offset)
debug("%s: Setting %p to %lx\n", __func__, p, newaddr);
*p = newaddr;
}
/* Update crc32 */
efi_update_table_header_crc32(&efi_runtime_services.hdr);
}
/* Relocate EFI runtime to uboot_reloc_base = offset */