Ilias Apalodimas
53e54bf50d
efi_loader: Avoid emitting efi_var_buf to .GOT
Atish reports that on RISC-V, accessing the EFI variables causes
a kernel panic. An objdump of the file verifies that, since the
global pointer for efi_var_buf ends up in .GOT section which is
not mapped in virtual address space for Linux.
<snip of efi_var_mem_find>
0000000000000084 <efi_var_mem_find>:
84: 715d addi sp,sp,-80
* objdump -dr
0000000000000086 <.LCFI2>:
86: e0a2 sd s0,64(sp)
88: fc26 sd s1,56(sp)
8a: e486 sd ra,72(sp)
8c: f84a sd s2,48(sp)
8e: f44e sd s3,40(sp)
90: f052 sd s4,32(sp)
92: ec56 sd s5,24(sp)
94: 00000497 auipc s1,0x0
94: R_RISCV_GOT_HI20 efi_var_buf
98: 0004b483 ld s1,0(s1) # 94 <.LCFI2+0xe>
98: R_RISCV_PCREL_LO12_I .L0
98: R_RISCV_RELAX *ABS*
* objdump -t
0000000000000084 g F .text.efi_runtime 00000000000000b8 efi_var_mem_find
With the patch applied:
* objdump -dr
0000000000000086 <.LCFI2>:
86: e0a2 sd s0,64(sp)
88: fc26 sd s1,56(sp)
8a: e486 sd ra,72(sp)
8c: f84a sd s2,48(sp)
8e: f44e sd s3,40(sp)
90: f052 sd s4,32(sp)
92: ec56 sd s5,24(sp)
94: 00000497 auipc s1,0x0
94: R_RISCV_PCREL_HI20 .LANCHOR0
94: R_RISCV_RELAX *ABS*
98: 00048493 mv s1,s1
98: R_RISCV_PCREL_LO12_I .L0
98: R_RISCV_RELAX *ABS*
* objdump -t
0000000000000008 l O .data.efi_runtime 0000000000000008 efi_var_buf
On arm64 this works, because there's no .GOT entries for this
and everything is converted to relative references.
* objdump -dr (identical pre-post patch, only the new function shows up)
00000000000000b4 <efi_var_mem_find>:
b4: aa0003ee mov x14, x0
b8: 9000000a adrp x10, 0 <efi_var_mem_compare>
b8: R_AARCH64_ADR_PREL_PG_HI21 .data.efi_runtime
bc: 91000140 add x0, x10, #0x0
bc: R_AARCH64_ADD_ABS_LO12_NC .data.efi_runtime
c0: aa0103ed mov x13, x1
c4: 79400021 ldrh w1, [x1]
c8: aa0203eb mov x11, x2
cc: f9400400 ldr x0, [x0, #8]
d0: b940100c ldr w12, [x0, #16]
d4: 8b0c000c add x12, x0, x12
So let's switch efi_var_buf to static and create a helper function for
anyone that needs to update it.
Fixes: e01aed47d6 ("efi_loader: Enable run-time variable support for tee based variables")
Reported-by: Atish Patra <atishp@atishpatra.org>
Tested-by: Atish Patra <atish.patra@wdc.com>
Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
2021-01-20 08:17:17 +01:00
..
2020-12-18 20:32:21 -07:00
2020-10-12 21:30:37 -04:00
2018-05-07 09:34:12 -04:00
2020-05-18 21:19:18 -04:00
2020-12-31 14:41:31 +01:00
2020-05-18 18:36:55 -04:00
2021-01-05 12:24:40 -07:00
2020-12-13 16:51:09 -07:00
2021-01-20 08:17:17 +01:00
2021-01-20 08:17:17 +01:00
2020-05-18 21:19:18 -04:00
2020-04-26 14:23:55 -06:00
2020-05-18 21:19:18 -04:00
2018-05-07 09:34:12 -04:00
2020-09-22 12:54:13 -06:00
2020-10-27 08:13:33 +01:00
2018-05-07 09:34:12 -04:00
2021-01-16 19:17:11 -05:00
2020-02-05 19:33:46 -07:00
2020-01-22 17:47:57 -05:00
2018-05-07 09:34:12 -04:00
2021-01-16 19:17:11 -05:00
2020-05-18 21:19:23 -04:00
2020-05-18 21:19:18 -04:00
2020-05-18 21:19:18 -04:00
2020-11-30 13:14:43 -07:00
2018-09-18 00:01:18 -06:00
2020-11-29 05:18:37 +01:00
2020-05-18 21:19:18 -04:00
2019-12-02 18:23:07 -05:00
2018-12-08 20:18:44 -05:00
2019-12-02 18:23:08 -05:00
2018-05-07 09:34:12 -04:00
2018-05-07 09:34:12 -04:00
2019-12-06 16:44:19 -05:00
2020-10-22 09:54:54 -04:00
2020-05-18 21:19:23 -04:00
2020-03-03 13:08:14 +05:30
2019-10-31 07:22:53 -04:00
2020-05-18 21:19:18 -04:00
2020-05-18 18:36:55 -04:00
2020-12-22 20:39:25 -07:00
2020-10-30 10:56:11 -04:00
2020-05-18 17:33:33 -04:00
2019-08-11 16:43:41 -04:00
2020-01-17 17:53:40 -05:00
2020-12-04 16:09:06 -05:00
2020-04-24 10:51:32 -04:00
2020-05-18 21:19:18 -04:00
2021-01-18 08:04:28 -05:00
2018-05-07 09:34:12 -04:00
2020-05-18 17:33:31 -04:00
2020-05-18 21:19:18 -04:00
2020-08-26 09:19:16 +02:00
2020-07-17 08:45:29 -04:00
2018-05-10 20:38:35 -04:00
2020-11-05 14:58:45 +08:00
2020-05-18 21:19:18 -04:00
2020-05-18 17:33:31 -04:00
2020-05-18 21:19:18 -04:00
2019-12-06 16:44:20 -05:00
2020-05-18 21:19:23 -04:00
2020-05-18 21:19:18 -04:00
2020-05-18 21:19:18 -04:00
2019-12-02 18:23:07 -05:00
2018-05-07 09:34:12 -04:00
2018-05-07 09:34:12 -04:00
2018-05-07 09:34:12 -04:00
2018-05-07 09:34:12 -04:00
2020-06-12 13:14:07 -04:00
2020-05-18 21:19:18 -04:00
2020-11-05 14:58:45 +08:00
2020-12-13 16:51:09 -07:00
2020-08-24 14:11:31 -04:00
2021-01-16 14:49:09 -05:00
2020-06-15 11:23:41 -04:00
2018-05-07 09:34:12 -04:00
2021-01-05 12:24:40 -07:00
2020-05-01 11:03:24 -04:00
2020-05-18 21:19:18 -04:00
2018-11-29 09:30:06 -07:00
2020-05-18 21:19:18 -04:00
2020-12-03 21:22:40 +01:00
2020-10-27 21:13:15 +01:00
2021-01-16 14:49:09 -05:00
2020-07-01 11:48:05 -04:00
2019-05-05 08:48:50 -04:00