CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Juergen Gross <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: feb9c5e19e913b53cb536a7aa7c9f20107bb51ec commit: 36c9b5929b7094ea19a78827c0ede20d2e0e6c9c xen: fix usage of pmd_populate in mremap for pv guests date: 8 months ago :::::: branch date: 15 hours ago :::::: commit date: 8 months ago config: x86_64-randconfig-c007-20220509 (https://download.01.org/0day-ci/archive/20220511/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project a385645b470e2d3a1534aae618ea56b31177639f) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=36c9b5929b7094ea19a78827c0ede20d2e0e6c9c git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 36c9b5929b7094ea19a78827c0ede20d2e0e6c9c # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ ~~~~~ arch/x86/include/asm/xen/hypercall.h:261:9: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] return _hypercall4(int, mmu_update, req, count, success_count, domid); ^ arch/x86/include/asm/xen/hypercall.h:191:2: note: expanded from macro '_hypercall4' __HYPERCALL_DECLS; \ ^ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ arch/x86/xen/mmu_pv.c:1450:2: note: Calling '__xen_set_pte' __xen_set_pte(ptep, pte); ^~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/mmu_pv.c:269:2: note: Taking true branch if (!xen_batched_set_pte(ptep, pteval)) { ^ arch/x86/xen/mmu_pv.c:278:3: note: Calling 'HYPERVISOR_mmu_update' HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:261:9: note: Assigned value is garbage or undefined return _hypercall4(int, mmu_update, req, count, success_count, domid); ^ arch/x86/include/asm/xen/hypercall.h:191:2: note: expanded from macro '_hypercall4' __HYPERCALL_DECLS; \ ^~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ ~~~~~~ arch/x86/include/asm/xen/hypercall.h:268:9: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] return _hypercall4(int, mmuext_op, op, count, success_count, domid); ^ arch/x86/include/asm/xen/hypercall.h:191:2: note: expanded from macro '_hypercall4' __HYPERCALL_DECLS; \ ^ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ arch/x86/xen/mmu_pv.c:1477:2: note: Calling 'pin_pagetable_pfn' pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, pfn); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/mmu_pv.c:993:6: note: Calling 'HYPERVISOR_mmuext_op' if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:268:9: note: Assigned value is garbage or undefined return _hypercall4(int, mmuext_op, op, count, success_count, domid); ^ arch/x86/include/asm/xen/hypercall.h:191:2: note: expanded from macro '_hypercall4' __HYPERCALL_DECLS; \ ^~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ ~~~~~~ arch/x86/include/asm/xen/hypercall.h:334:9: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] return _hypercall2(long, memory_op, cmd, arg); ^ arch/x86/include/asm/xen/hypercall.h:169:2: note: expanded from macro '_hypercall2' __HYPERCALL_DECLS; \ ^ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ arch/x86/xen/mmu_pv.c:1635:6: note: Calling 'HYPERVISOR_memory_op' if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:334:9: note: Assigned value is garbage or undefined return _hypercall2(long, memory_op, cmd, arg); ^ arch/x86/include/asm/xen/hypercall.h:169:2: note: expanded from macro '_hypercall2' __HYPERCALL_DECLS; \ ^~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ ~~~~~~ arch/x86/include/asm/xen/hypercall.h:348:10: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] return _hypercall3(int, update_va_mapping, va, ^ arch/x86/include/asm/xen/hypercall.h:180:2: note: expanded from macro '_hypercall3' __HYPERCALL_DECLS; \ ^ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ arch/x86/xen/mmu_pv.c:1628:9: note: Calling 'set_page_prot_flags' return set_page_prot_flags(addr, prot, UVMF_NONE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/mmu_pv.c:1623:6: note: Calling 'HYPERVISOR_update_va_mapping' if (HYPERVISOR_update_va_mapping((unsigned long)addr, pte, flags)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:347:2: note: Taking true branch if (sizeof(new_val) == sizeof(long)) ^ arch/x86/include/asm/xen/hypercall.h:348:10: note: Assigned value is garbage or undefined return _hypercall3(int, update_va_mapping, va, ^ arch/x86/include/asm/xen/hypercall.h:180:2: note: expanded from macro '_hypercall3' __HYPERCALL_DECLS; \ ^~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ ~~~~~~ >> arch/x86/xen/mmu_pv.c:1521:3: warning: Value stored to 'pinned' is never >> read [clang-analyzer-deadcode.DeadStores] pinned = false; ^ ~~~~~ arch/x86/xen/mmu_pv.c:1521:3: note: Value stored to 'pinned' is never read pinned = false; ^ ~~~~~ arch/x86/xen/mmu_pv.c:1523:4: warning: Value stored to 'pinned' is never read [clang-analyzer-deadcode.DeadStores] pinned = PagePinned(page); ^ ~~~~~~~~~~~~~~~~ arch/x86/xen/mmu_pv.c:1523:4: note: Value stored to 'pinned' is never read pinned = PagePinned(page); ^ ~~~~~~~~~~~~~~~~ Suppressed 14 warnings (3 in non-user code, 11 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. arch/x86/include/asm/paravirt.h:110:2: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] PVOP_VCALL4(cpu.cpuid, eax, ebx, ecx, edx); ^ arch/x86/include/asm/paravirt_types.h:561:2: note: expanded from macro 'PVOP_VCALL4' __PVOP_VCALL(op, PVOP_CALL_ARG1(arg1), PVOP_CALL_ARG2(arg2), \ ^ arch/x86/include/asm/paravirt_types.h:491:8: note: expanded from macro '__PVOP_VCALL' (void)____PVOP_CALL(, op, CLBR_ANY, PVOP_VCALL_CLOBBERS, \ ^ arch/x86/include/asm/paravirt_types.h:446:3: note: expanded from macro '____PVOP_CALL' PVOP_CALL_ARGS; \ ^ arch/x86/include/asm/paravirt_types.h:404:16: note: expanded from macro 'PVOP_CALL_ARGS' unsigned long __edi = __edi, __esi = __esi, \ ^ arch/x86/xen/pmu.c:72:6: note: Assuming field 'x86_vendor' is not equal to X86_VENDOR_AMD if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/pmu.c:72:2: note: Taking false branch if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) { ^ arch/x86/xen/pmu.c:94:13: note: Assuming field 'x86_vendor' is not equal to X86_VENDOR_HYGON } else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/pmu.c:94:9: note: Taking false branch } else if (boot_cpu_data.x86_vendor == X86_VENDOR_HYGON) { ^ arch/x86/xen/pmu.c:103:3: note: Calling 'cpuid' cpuid(0xa, &eax, &ebx, &ecx, &edx); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/processor.h:603:2: note: Calling '__cpuid' __cpuid(eax, ebx, ecx, edx); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/paravirt.h:110:2: note: Assigned value is garbage or undefined PVOP_VCALL4(cpu.cpuid, eax, ebx, ecx, edx); ^ arch/x86/include/asm/paravirt_types.h:561:2: note: expanded from macro 'PVOP_VCALL4' __PVOP_VCALL(op, PVOP_CALL_ARG1(arg1), PVOP_CALL_ARG2(arg2), \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:491:8: note: expanded from macro '__PVOP_VCALL' (void)____PVOP_CALL(, op, CLBR_ANY, PVOP_VCALL_CLOBBERS, \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:446:3: note: expanded from macro '____PVOP_CALL' PVOP_CALL_ARGS; \ ^~~~~~~~~~~~~~ arch/x86/include/asm/paravirt_types.h:404:16: note: expanded from macro 'PVOP_CALL_ARGS' unsigned long __edi = __edi, __esi = __esi, \ ^ ~~~~~ arch/x86/include/asm/xen/hypercall.h:435:9: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign] return _hypercall2(int, xenpmu_op, op, arg); ^ arch/x86/include/asm/xen/hypercall.h:169:2: note: expanded from macro '_hypercall2' __HYPERCALL_DECLS; \ ^ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ arch/x86/xen/pmu.c:570:6: note: Assuming 'xen_domain_type' is not equal to XEN_HVM_DOMAIN if (xen_hvm_domain()) ^ include/xen/xen.h:25:27: note: expanded from macro 'xen_hvm_domain' #define xen_hvm_domain() (xen_domain_type == XEN_HVM_DOMAIN) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/pmu.c:570:2: note: Taking false branch if (xen_hvm_domain()) ^ arch/x86/xen/pmu.c:577:8: note: Calling 'HYPERVISOR_xenpmu_op' (void)HYPERVISOR_xenpmu_op(XENPMU_finish, &xp); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:435:9: note: Assigned value is garbage or undefined return _hypercall2(int, xenpmu_op, op, arg); ^ arch/x86/include/asm/xen/hypercall.h:169:2: note: expanded from macro '_hypercall2' __HYPERCALL_DECLS; \ ^~~~~~~~~~~~~~~~~ arch/x86/include/asm/xen/hypercall.h:113:2: note: expanded from macro '__HYPERCALL_DECLS' register unsigned long __arg1 asm(__HYPERCALL_ARG1REG) = __arg1; \ ^ ~~~~~~ arch/x86/xen/pmu.c:305:9: warning: 4th function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage] if (!xen_intel_pmu_emulate(msr, val, type, index, 1)) ^ ~~~~~ arch/x86/xen/pmu.c:295:6: note: Assuming field 'x86_vendor' is equal to X86_VENDOR_INTEL if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/x86/xen/pmu.c:295:2: note: Taking false branch if (boot_cpu_data.x86_vendor != X86_VENDOR_INTEL) { vim +/pinned +1521 arch/x86/xen/mmu_pv.c 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1508 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1509 /* This needs to make sure the new pte page is pinned iff its being 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1510 attached to a pinned pagetable. */ 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1511 static inline void xen_alloc_ptpage(struct mm_struct *mm, unsigned long pfn, 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1512 unsigned level) 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1513 { 6f84f8d1587f20 Pavel Tatashin 2018-04-10 1514 bool pinned = xen_page_pinned(mm->pgd); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1515 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1516 trace_xen_mmu_alloc_ptpage(mm, pfn, level, pinned); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1517 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1518 if (pinned) { 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1519 struct page *page = pfn_to_page(pfn); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1520 36c9b5929b7094 Juergen Gross 2021-09-08 @1521 pinned = false; 36c9b5929b7094 Juergen Gross 2021-09-08 1522 if (static_branch_likely(&xen_struct_pages_ready)) { 36c9b5929b7094 Juergen Gross 2021-09-08 1523 pinned = PagePinned(page); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1524 SetPagePinned(page); 36c9b5929b7094 Juergen Gross 2021-09-08 1525 } 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1526 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1527 xen_mc_batch(); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1528 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1529 __set_pfn_prot(pfn, PAGE_KERNEL_RO); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1530 36c9b5929b7094 Juergen Gross 2021-09-08 1531 if (level == PT_PTE && USE_SPLIT_PTE_PTLOCKS && !pinned) 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1532 __pin_pagetable_pfn(MMUEXT_PIN_L1_TABLE, pfn); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1533 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1534 xen_mc_issue(PARAVIRT_LAZY_MMU); 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1535 } 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1536 } 7e0563dea9c4e6 Vitaly Kuznetsov 2017-04-04 1537 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
