lib: crc32: mark static variable as __efi_runtime_data
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 18 Dec 2018 17:06:14 +0000 (18:06 +0100)
committerAlexander Graf <agraf@suse.de>
Sun, 23 Dec 2018 01:39:52 +0000 (02:39 +0100)
In commit 483dbab9f931 ("lib: crc32: mark function crc32() as
__efi_runtime") one local static variable was missed. It did not end up in
the __efi_runtime_data section as it should.

If CONFIG_DYNAMIC_CRC_TABLE=y a data abort execption may occur when the
UEFI payload calls the SetVirtualAddressMap() runtime service.

Reported-by: Dominik Adamski <dominik.adamski@northerntech.community>
Fixes: 483dbab9f931 ("lib: crc32: mark function crc32() as __efi_runtime")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
lib/crc32.c

index 71e27df78ebb91cdfc72e05d8e8ad52d7be42d8e..eee21f8d73988e6eb015a680af0dae37eec022da 100644 (file)
@@ -65,7 +65,8 @@ static void __efi_runtime make_crc_table(void)
   int n, k;
   uLong poly;          /* polynomial exclusive-or pattern */
   /* terms of polynomial defining this crc (except x^32): */
-  static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+  static Byte __efi_runtime_data p[] = {
+               0, 1, 2, 4, 5, 7, 8, 10, 11, 12, 16, 22, 23, 26};
 
   /* make exclusive-or pattern from polynomial (0xedb88320L) */
   poly = 0L;