Re: [PATCH v5 3/5] arm64: libstub: Move KASLR handling functions to kaslr.c

From: kernel test robot
Date: Fri Jul 21 2023 - 17:34:19 EST


Hi Alexandre,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.5-rc2 next-20230721]
[cannot apply to efi/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Alexandre-Ghiti/riscv-Introduce-virtual-kernel-mapping-KASLR/20230721-155554
base: linus/master
patch link: https://lore.kernel.org/r/20230721074850.310644-4-alexghiti%40rivosinc.com
patch subject: [PATCH v5 3/5] arm64: libstub: Move KASLR handling functions to kaslr.c
config: i386-randconfig-i002-20230721 (https://download.01.org/0day-ci/archive/20230722/202307220545.aNYBwGqt-lkp@xxxxxxxxx/config)
compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
reproduce: (https://download.01.org/0day-ci/archive/20230722/202307220545.aNYBwGqt-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307220545.aNYBwGqt-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/firmware/efi/libstub/kaslr.c:113:23: warning: call to undeclared function 'efi_get_kimg_min_align'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
u64 min_kimg_align = efi_get_kimg_min_align();
^
>> drivers/firmware/efi/libstub/kaslr.c:155:2: warning: call to undeclared function 'efi_icache_sync'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
efi_icache_sync(*image_addr, *image_addr + kernel_codesize);
^
2 warnings generated.


vim +/efi_get_kimg_min_align +113 drivers/firmware/efi/libstub/kaslr.c

87
88 /**
89 * efi_kaslr_relocate_kernel() - Relocate the kernel (random if KASLR enabled)
90 * @image_addr: Pointer to the current kernel location
91 * @reserve_addr: Pointer to the relocated kernel location
92 * @reserve_size: Size of the relocated kernel
93 * @kernel_size: Size of the text + data
94 * @kernel_codesize: Size of the text
95 * @kernel_memsize: Size of the text + data + bss
96 * @phys_seed: Random seed used for the relocation
97 *
98 * If KASLR is not enabled, this function relocates the kernel to a fixed
99 * address (or leave it as its current location). If KASLR is enabled, the
100 * kernel physical location is randomized using the seed in parameter.
101 *
102 * Return: status code, EFI_SUCCESS if relocation is successful
103 */
104 efi_status_t efi_kaslr_relocate_kernel(unsigned long *image_addr,
105 unsigned long *reserve_addr,
106 unsigned long *reserve_size,
107 unsigned long kernel_size,
108 unsigned long kernel_codesize,
109 unsigned long kernel_memsize,
110 u32 phys_seed)
111 {
112 efi_status_t status;
> 113 u64 min_kimg_align = efi_get_kimg_min_align();
114
115 if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && phys_seed != 0) {
116 /*
117 * If KASLR is enabled, and we have some randomness available,
118 * locate the kernel at a randomized offset in physical memory.
119 */
120 status = efi_random_alloc(*reserve_size, min_kimg_align,
121 reserve_addr, phys_seed,
122 EFI_LOADER_CODE);
123 if (status != EFI_SUCCESS)
124 efi_warn("efi_random_alloc() failed: 0x%lx\n", status);
125 } else {
126 status = EFI_OUT_OF_RESOURCES;
127 }
128
129 if (status != EFI_SUCCESS) {
130 if (!check_image_region(*image_addr, kernel_memsize)) {
131 efi_err("FIRMWARE BUG: Image BSS overlaps adjacent EFI memory region\n");
132 } else if (IS_ALIGNED(*image_addr, min_kimg_align) &&
133 (u64)_end < EFI_ALLOC_LIMIT) {
134 /*
135 * Just execute from wherever we were loaded by the
136 * UEFI PE/COFF loader if the placement is suitable.
137 */
138 *reserve_size = 0;
139 return EFI_SUCCESS;
140 }
141
142 status = efi_allocate_pages_aligned(*reserve_size, reserve_addr,
143 ULONG_MAX, min_kimg_align,
144 EFI_LOADER_CODE);
145
146 if (status != EFI_SUCCESS) {
147 efi_err("Failed to relocate kernel\n");
148 *reserve_size = 0;
149 return status;
150 }
151 }
152
153 memcpy((void *)*reserve_addr, (void *)*image_addr, kernel_size);
154 *image_addr = *reserve_addr;
> 155 efi_icache_sync(*image_addr, *image_addr + kernel_codesize);

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki