Re: [PATCH v9 2/7] kexec: define functions to map and unmap segments

Dan Carpenter
2025-03-06T06:35:32Z

Hi steven,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/steven-chen/ima-copy-only-complete-measurement-records-across-kexec/20250305-031719
base: https://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git next-integrity
patch link: https://lore.kernel.org/r/20250304190351.96975-3-chenste%40linux.microsoft.com
patch subject: [PATCH v9 2/7] kexec: define functions to map and unmap segments
config: x86_64-randconfig-161-20250306 (https://download.01.org/0day-ci/archive/20250306/202503061449.gbVGafZc-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0

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@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202503061449.gbVGafZc-lkp@intel.com/

smatch warnings:
kernel/kexec_core.c:896 kimage_map_segment() error: uninitialized symbol 'dest_page_addr'.

vim +/dest_page_addr +896 kernel/kexec_core.c

bf06eab7ae0f04 steven chen 2025-03-04 870 void *kimage_map_segment(struct kimage *image,
bf06eab7ae0f04 steven chen 2025-03-04 871 unsigned long addr, unsigned long size)
bf06eab7ae0f04 steven chen 2025-03-04 872 {
bf06eab7ae0f04 steven chen 2025-03-04 873 unsigned long eaddr = addr + size;
bf06eab7ae0f04 steven chen 2025-03-04 874 unsigned long src_page_addr, dest_page_addr;
bf06eab7ae0f04 steven chen 2025-03-04 875 unsigned int npages;
bf06eab7ae0f04 steven chen 2025-03-04 876 struct page **src_pages;
bf06eab7ae0f04 steven chen 2025-03-04 877 int i;
bf06eab7ae0f04 steven chen 2025-03-04 878 kimage_entry_t *ptr, entry;
bf06eab7ae0f04 steven chen 2025-03-04 879 void *vaddr = NULL;
bf06eab7ae0f04 steven chen 2025-03-04 880
bf06eab7ae0f04 steven chen 2025-03-04 881 /*
bf06eab7ae0f04 steven chen 2025-03-04 882 * Collect the source pages and map them in a contiguous VA range.
bf06eab7ae0f04 steven chen 2025-03-04 883 */
bf06eab7ae0f04 steven chen 2025-03-04 884 npages = PFN_UP(eaddr) - PFN_DOWN(addr);
bf06eab7ae0f04 steven chen 2025-03-04 885 src_pages = kmalloc_array(npages, sizeof(*src_pages), GFP_KERNEL);
bf06eab7ae0f04 steven chen 2025-03-04 886 if (!src_pages) {
bf06eab7ae0f04 steven chen 2025-03-04 887 pr_err("Could not allocate ima pages array.\n");
bf06eab7ae0f04 steven chen 2025-03-04 888 return NULL;
bf06eab7ae0f04 steven chen 2025-03-04 889 }
bf06eab7ae0f04 steven chen 2025-03-04 890
bf06eab7ae0f04 steven chen 2025-03-04 891 i = 0;
bf06eab7ae0f04 steven chen 2025-03-04 892 for_each_kimage_entry(image, ptr, entry) {
bf06eab7ae0f04 steven chen 2025-03-04 893 if (entry & IND_DESTINATION) {
bf06eab7ae0f04 steven chen 2025-03-04 894 dest_page_addr = entry & PAGE_MASK;

Is the first entry always IND_DESTINATION?

bf06eab7ae0f04 steven chen 2025-03-04 895 } else if (entry & IND_SOURCE) {
bf06eab7ae0f04 steven chen 2025-03-04 @896 if (dest_page_addr >= addr && dest_page_addr < eaddr) {
^^^^^^^^^^^^^^
otherwise this is uninitialized

bf06eab7ae0f04 steven chen 2025-03-04 897 src_page_addr = entry & PAGE_MASK;
bf06eab7ae0f04 steven chen 2025-03-04 898 src_pages[i++] =
bf06eab7ae0f04 steven chen 2025-03-04 899 virt_to_page(__va(src_page_addr));
bf06eab7ae0f04 steven chen 2025-03-04 900 if (i == npages)
bf06eab7ae0f04 steven chen 2025-03-04 901 break;
bf06eab7ae0f04 steven chen 2025-03-04 902 dest_page_addr += PAGE_SIZE;
bf06eab7ae0f04 steven chen 2025-03-04 903 }
bf06eab7ae0f04 steven chen 2025-03-04 904 }
bf06eab7ae0f04 steven chen 2025-03-04 905 }
bf06eab7ae0f04 steven chen 2025-03-04 906
bf06eab7ae0f04 steven chen 2025-03-04 907 /* Sanity check. */
bf06eab7ae0f04 steven chen 2025-03-04 908 WARN_ON(i < npages);
bf06eab7ae0f04 steven chen 2025-03-04 909
bf06eab7ae0f04 steven chen 2025-03-04 910 vaddr = vmap(src_pages, npages, VM_MAP, PAGE_KERNEL);
bf06eab7ae0f04 steven chen 2025-03-04 911 kfree(src_pages);
bf06eab7ae0f04 steven chen 2025-03-04 912
bf06eab7ae0f04 steven chen 2025-03-04 913 if (!vaddr)
bf06eab7ae0f04 steven chen 2025-03-04 914 pr_err("Could not map ima buffer.\n");
bf06eab7ae0f04 steven chen 2025-03-04 915
bf06eab7ae0f04 steven chen 2025-03-04 916 return vaddr;
bf06eab7ae0f04 steven chen 2025-03-04 917 }

--
0-DAY CI Kernel Test Service