On Fri, Nov 7, 2025 at 9:51 AM Baoquan He bhe@redhat.com wrote:
On 11/06/25 at 06:01pm, Pingfan Liu wrote:
On Thu, Nov 6, 2025 at 4:01 PM Baoquan He bhe@redhat.com wrote:
On 11/06/25 at 02:59pm, Pingfan Liu wrote:
When I tested kexec with the latest kernel, I ran into the following warning:
[ 40.712410] ------------[ cut here ]------------ [ 40.712576] WARNING: CPU: 2 PID: 1562 at kernel/kexec_core.c:1001 kimage_map_segment+0x144/0x198 [...] [ 40.816047] Call trace: [ 40.818498] kimage_map_segment+0x144/0x198 (P) [ 40.823221] ima_kexec_post_load+0x58/0xc0 [ 40.827246] __do_sys_kexec_file_load+0x29c/0x368 [...] [ 40.855423] ---[ end trace 0000000000000000 ]---
This is caused by the fact that kexec allocates the destination directly in the CMA area. In that case, the CMA kernel address should be exported directly to the IMA component, instead of using the vmalloc'd address.
Well, you didn't update the log accordingly.
I am not sure what you mean. Do you mean the earlier content which I replied to you?
No. In v1, you return cma directly. But in v2, you return its direct mapping address, isnt' it?
Yes. But I think it is a fault in the code, which does not convey the expression in the commit log. Do you think I should rephrase the words "the CMA kernel address" as "the CMA kernel direct mapping address"?
Do you know why cma area can't be mapped into vmalloc?
Should not the kernel direct mapping be used?
When image->segment_cma[i] has value, image->ima_buffer_addr also contains the physical address of the cma area, why cma physical address can't be mapped into vmalloc and cause the failure and call trace?
It could be done using the vmalloc approach, but it's unnecessary. IIUC, kimage_map_segment() was introduced to provide a contiguous virtual address for IMA access, since the IND_SRC pages are scattered throughout the kernel. However, in the CMA case, there is already a contiguous virtual address in the kernel direct mapping range. Normally, when we have a physical address, we simply use phys_to_virt() to get its corresponding kernel virtual address.
Thanks,
Pingfan