All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-review:UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103 2/2] arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types)
@ 2020-04-04  4:16 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2020-04-04  4:16 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 17254 bytes --]

tree:   https://github.com/0day-ci/linux/commits/UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103
head:   3c7c50be178261ff63d8df5ac533fb67f35d0af5
commit: 3c7c50be178261ff63d8df5ac533fb67f35d0af5 [2/2] KVM: VMX: Extend VMX's #AC interceptor to handle split lock #AC in guest
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-188-g79f7ac98-dirty
        git checkout 3c7c50be178261ff63d8df5ac533fb67f35d0af5
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types) @@    expected struct pt_regs *regs @@    got uct pt_regs *regs @@
>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse:    expected struct pt_regs *regs
>> arch/x86/kvm/vmx/vmx.c:4743:56: sparse:    got unsigned long
>> arch/x86/kvm/vmx/vmx.c:4743:43: sparse: sparse: not enough arguments for function handle_user_split_lock
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110011 becomes 11)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110011 becomes 11)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100110 becomes 110)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100310 becomes 310)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100510 becomes 510)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100410 becomes 410)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100310 becomes 310)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100510 becomes 510)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100410 becomes 410)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30203 becomes 203)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30203 becomes 203)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30283 becomes 283)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (30283 becomes 283)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b019b becomes 19b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b021b becomes 21b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b029b becomes 29b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b031b becomes 31b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b041b becomes 41b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80c88 becomes c88)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120912 becomes 912)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (110311 becomes 311)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120992 becomes 992)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120992 becomes 992)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100610 becomes 610)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100690 becomes 690)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100590 becomes 590)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80408 becomes 408)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a039a becomes 39a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a041a becomes 41a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120a92 becomes a92)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a099a becomes 99a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a091a becomes 91a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a048a becomes 48a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a039a becomes 39a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a041a becomes 41a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120a92 becomes a92)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a099a becomes 99a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a091a becomes 91a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a048a becomes 48a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a010a becomes 10a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a050a becomes 50a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a071a becomes 71a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a079a becomes 79a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a009a becomes 9a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180198 becomes 198)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a051a becomes 51a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120392 becomes 392)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a081a becomes 81a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120892 becomes 892)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100490 becomes 490)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a001a becomes 1a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a028a becomes 28a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a030a becomes 30a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a038a becomes 38a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a040a becomes 40a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a028a becomes 28a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a030a becomes 30a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a038a becomes 38a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (a040a becomes 40a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100090 becomes 90)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100090 becomes 90)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180118 becomes 118)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a001a becomes 1a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (80688 becomes 688)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a009a becomes 9a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100790 becomes 790)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (100790 becomes 790)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (180198 becomes 198)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a011a becomes 11a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120492 becomes 492)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a061a becomes 61a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120492 becomes 492)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a061a becomes 61a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120412 becomes 412)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a059a becomes 59a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (120412 becomes 412)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1a059a becomes 59a)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (20402 becomes 402)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: cast truncates bits from constant value (1b001b becomes 1b)
   arch/x86/kvm/vmx/evmcs.h:81:30: sparse: sparse: too many warnings

vim +4743 arch/x86/kvm/vmx/vmx.c

  4631	
  4632	static int handle_exception_nmi(struct kvm_vcpu *vcpu)
  4633	{
  4634		struct vcpu_vmx *vmx = to_vmx(vcpu);
  4635		struct kvm_run *kvm_run = vcpu->run;
  4636		u32 intr_info, ex_no, error_code;
  4637		unsigned long cr2, rip, dr6;
  4638		u32 vect_info;
  4639	
  4640		vect_info = vmx->idt_vectoring_info;
  4641		intr_info = vmx->exit_intr_info;
  4642	
  4643		if (is_machine_check(intr_info) || is_nmi(intr_info))
  4644			return 1; /* handled by handle_exception_nmi_irqoff() */
  4645	
  4646		if (is_invalid_opcode(intr_info))
  4647			return handle_ud(vcpu);
  4648	
  4649		error_code = 0;
  4650		if (intr_info & INTR_INFO_DELIVER_CODE_MASK)
  4651			error_code = vmcs_read32(VM_EXIT_INTR_ERROR_CODE);
  4652	
  4653		if (!vmx->rmode.vm86_active && is_gp_fault(intr_info)) {
  4654			WARN_ON_ONCE(!enable_vmware_backdoor);
  4655	
  4656			/*
  4657			 * VMware backdoor emulation on #GP interception only handles
  4658			 * IN{S}, OUT{S}, and RDPMC, none of which generate a non-zero
  4659			 * error code on #GP.
  4660			 */
  4661			if (error_code) {
  4662				kvm_queue_exception_e(vcpu, GP_VECTOR, error_code);
  4663				return 1;
  4664			}
  4665			return kvm_emulate_instruction(vcpu, EMULTYPE_VMWARE_GP);
  4666		}
  4667	
  4668		/*
  4669		 * The #PF with PFEC.RSVD = 1 indicates the guest is accessing
  4670		 * MMIO, it is better to report an internal error.
  4671		 * See the comments in vmx_handle_exit.
  4672		 */
  4673		if ((vect_info & VECTORING_INFO_VALID_MASK) &&
  4674		    !(is_page_fault(intr_info) && !(error_code & PFERR_RSVD_MASK))) {
  4675			vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
  4676			vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_SIMUL_EX;
  4677			vcpu->run->internal.ndata = 3;
  4678			vcpu->run->internal.data[0] = vect_info;
  4679			vcpu->run->internal.data[1] = intr_info;
  4680			vcpu->run->internal.data[2] = error_code;
  4681			return 0;
  4682		}
  4683	
  4684		if (is_page_fault(intr_info)) {
  4685			cr2 = vmcs_readl(EXIT_QUALIFICATION);
  4686			/* EPT won't cause page fault directly */
  4687			WARN_ON_ONCE(!vcpu->arch.apf.host_apf_reason && enable_ept);
  4688			return kvm_handle_page_fault(vcpu, error_code, cr2, NULL, 0);
  4689		}
  4690	
  4691		ex_no = intr_info & INTR_INFO_VECTOR_MASK;
  4692	
  4693		if (vmx->rmode.vm86_active && rmode_exception(vcpu, ex_no))
  4694			return handle_rmode_exception(vcpu, ex_no, error_code);
  4695	
  4696		switch (ex_no) {
  4697		case DB_VECTOR:
  4698			dr6 = vmcs_readl(EXIT_QUALIFICATION);
  4699			if (!(vcpu->guest_debug &
  4700			      (KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
  4701				vcpu->arch.dr6 &= ~DR_TRAP_BITS;
  4702				vcpu->arch.dr6 |= dr6 | DR6_RTM;
  4703				if (is_icebp(intr_info))
  4704					WARN_ON(!skip_emulated_instruction(vcpu));
  4705	
  4706				kvm_queue_exception(vcpu, DB_VECTOR);
  4707				return 1;
  4708			}
  4709			kvm_run->debug.arch.dr6 = dr6 | DR6_FIXED_1;
  4710			kvm_run->debug.arch.dr7 = vmcs_readl(GUEST_DR7);
  4711			/* fall through */
  4712		case BP_VECTOR:
  4713			/*
  4714			 * Update instruction length as we may reinject #BP from
  4715			 * user space while in guest debugging mode. Reading it for
  4716			 * #DB as well causes no harm, it is not used in that case.
  4717			 */
  4718			vmx->vcpu.arch.event_exit_inst_len =
  4719				vmcs_read32(VM_EXIT_INSTRUCTION_LEN);
  4720			kvm_run->exit_reason = KVM_EXIT_DEBUG;
  4721			rip = kvm_rip_read(vcpu);
  4722			kvm_run->debug.arch.pc = vmcs_readl(GUEST_CS_BASE) + rip;
  4723			kvm_run->debug.arch.exception = ex_no;
  4724			break;
  4725		case AC_VECTOR:
  4726			/*
  4727			 * Reflect #AC to the guest if it's expecting the #AC, i.e. has
  4728			 * legacy alignment check enabled.  Pre-check host split lock
  4729			 * turned on to avoid the VMREADs needed to check legacy #AC,
  4730			 * i.e. reflect the #AC if the only possible source is legacy
  4731			 * alignment checks.
  4732			 */
  4733			if (!boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT) ||
  4734			    guest_cpu_alignment_check_enabled(vcpu)) {
  4735				kvm_queue_exception_e(vcpu, AC_VECTOR, error_code);
  4736				return 1;
  4737			}
  4738	
  4739			/*
  4740			 * Forward the #AC to userspace if kernel policy does not allow
  4741			 * temporarily disabling split lock detection.
  4742			 */
> 4743			if (handle_user_split_lock(kvm_rip_read(vcpu)))
  4744				return 1;
  4745			fallthrough;
  4746		default:
  4747			kvm_run->exit_reason = KVM_EXIT_EXCEPTION;
  4748			kvm_run->ex.exception = ex_no;
  4749			kvm_run->ex.error_code = error_code;
  4750			break;
  4751		}
  4752		return 0;
  4753	}
  4754	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-04  4:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-04  4:16 [linux-review:UPDATE-20200404-034739/Thomas-Gleixner/x86-Prevent-Split-Lock-Detection-wreckage-on-VMX-hypervisors/20200403-172103 2/2] arch/x86/kvm/vmx/vmx.c:4743:56: sparse: sparse: incorrect type in argument 1 (different base types) kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.