lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Thu, 10 Nov 2016 10:47:48 +0800
From:   Fengguang Wu <lkp@...el.com>
To:     Radim Krčmář <rkrcmar@...hat.com>
Cc:     kbuild-all@...org, linux-kernel@...r.kernel.org,
        kvm@...r.kernel.org, Paolo Bonzini <pbonzini@...hat.com>,
        Bandan Das <bsd@...hat.com>, Nadav Amit <nadav.amit@...il.com>,
        Ye Xiaolong <xiaolong.ye@...el.com>
Subject: Re: [PATCH v4] KVM: x86: emulate FXSAVE and FXRSTOR

CC Xiaolong.

On Wed, Nov 09, 2016 at 07:46:28PM +0100, Radim Krčmář wrote:
>2016-11-10 02:42+0800, kbuild test robot:
>> Hi Radim,
>
>And I even replied to the series, so this would happen ...
>Btw. would the tool recognize it if the header was [PATCH v4 4/4]?
>
>> [auto build test ERROR on kvm/linux-next]
>> [also build test ERROR on v4.9-rc4 next-20161109]
>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>
>> url:    https://github.com/0day-ci/linux/commits/Radim-Kr-m/KVM-x86-emulate-FXSAVE-and-FXRSTOR/20161110-021048
>> base:   https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
>> config: x86_64-randconfig-x018-201645 (attached as .config)
>> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
>> reproduce:
>>         # save the attached .config to linux build tree
>>         make ARCH=x86_64
>>
>> All errors (new ones prefixed by >>):
>>
>>    arch/x86/kvm/emulate.c: In function 'em_fxsave':
>> >> arch/x86/kvm/emulate.c:3910:7: error: implicit declaration of function 'asm_safe' [-Werror=implicit-function-declaration]
>>      rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>>           ^~~~~~~~
>> >> arch/x86/kvm/emulate.c:3910:32: error: expected expression before ',' token
>>      rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>>                                    ^
>> >> arch/x86/kvm/emulate.c:3910:35: error: 'fx' undeclared (first use in this function)
>>      rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>>                                       ^~
>>    arch/x86/kvm/emulate.c:3910:35: note: each undeclared identifier is reported only once for each function it appears in
>>    arch/x86/kvm/emulate.c: In function 'fxrstor_fixup':
>>    arch/x86/kvm/emulate.c:3931:32: error: expected expression before ',' token
>>      rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>>                                    ^
>>    arch/x86/kvm/emulate.c:3931:35: error: 'fx' undeclared (first use in this function)
>>      rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>>                                       ^~
>>    arch/x86/kvm/emulate.c: In function 'em_fxrstor':
>> >> arch/x86/kvm/emulate.c:3977:34: error: expected expression before ':' token
>>       rc = asm_safe("fxrstor %[fx]", : [fx] "m"(fx_state));
>>                                      ^
>>    arch/x86/kvm/emulate.c: At top level:
>> >> arch/x86/kvm/emulate.c:4336:12: error: 'Aligned16' undeclared here (not in a function)
>>      I(ModRM | Aligned16, em_fxsave),
>>                ^
>>    arch/x86/kvm/emulate.c:4185:31: note: in definition of macro 'I'
>>     #define I(_f, _e) { .flags = (_f), .u.execute = (_e) }
>>                                   ^~
>>    cc1: some warnings being treated as errors
>>
>> vim +/asm_safe +3910 arch/x86/kvm/emulate.c
>>
>>   3904		rc = check_fxsr(ctxt);
>>   3905		if (rc != X86EMUL_CONTINUE)
>>   3906			return rc;
>>   3907	
>>   3908		ctxt->ops->get_fpu(ctxt);
>>   3909	
>> > 3910		rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>>   3911	
>>   3912		ctxt->ops->put_fpu(ctxt);
>>   3913	
>>   3914		if (rc != X86EMUL_CONTINUE)
>>   3915			return rc;
>>   3916	
>>   3917		if (ctxt->ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR)
>>   3918			size = offsetof(struct fxregs_state, xmm_space[8 * 16/4]);
>>   3919		else
>>   3920			size = offsetof(struct fxregs_state, xmm_space[0]);
>>   3921	
>>   3922		return segmented_write(ctxt, ctxt->memop.addr.mem, &fx_state, size);
>>   3923	}
>>   3924	
>>   3925	static int fxrstor_fixup(struct x86_emulate_ctxt *ctxt,
>>   3926			struct fxregs_state *new)
>>   3927	{
>>   3928		int rc = X86EMUL_CONTINUE;
>>   3929		struct fxregs_state old;
>>   3930	
>> > 3931		rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>>   3932		if (rc != X86EMUL_CONTINUE)
>>   3933			return rc;
>>   3934	
>>   3935		/*
>>   3936		 * 64 bit host will restore XMM 8-15, which is not correct on non-64
>>   3937		 * bit guests.  Load the current values in order to preserve 64 bit
>>   3938		 * XMMs after fxrstor.
>>   3939		 */
>>   3940	#ifdef CONFIG_X86_64
>>   3941		/* XXX: accessing XMM 8-15 very awkwardly */
>>   3942		memcpy(&new->xmm_space[8 * 16/4], &old.xmm_space[8 * 16/4], 8 * 16);
>>   3943	#endif
>>   3944	
>>   3945		/*
>>   3946		 * Hardware doesn't save and restore XMM 0-7 without CR4.OSFXSR, but
>>   3947		 * does save and restore MXCSR.
>>   3948		 */
>>   3949		if (!(ctxt->ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR))
>>   3950			memcpy(new->xmm_space, old.xmm_space, 8 * 16);
>>   3951	
>>   3952		return rc;
>>   3953	}
>>   3954	
>>   3955	static int em_fxrstor(struct x86_emulate_ctxt *ctxt)
>>   3956	{
>>   3957		struct fxregs_state fx_state;
>>   3958		int rc;
>>   3959	
>>   3960		rc = check_fxsr(ctxt);
>>   3961		if (rc != X86EMUL_CONTINUE)
>>   3962			return rc;
>>   3963	
>>   3964		rc = segmented_read(ctxt, ctxt->memop.addr.mem, &fx_state, 512);
>>   3965		if (rc != X86EMUL_CONTINUE)
>>   3966			return rc;
>>   3967	
>>   3968		if (fx_state.mxcsr >> 16)
>>   3969			return emulate_gp(ctxt, 0);
>>   3970	
>>   3971		ctxt->ops->get_fpu(ctxt);
>>   3972	
>>   3973		if (ctxt->mode < X86EMUL_MODE_PROT64)
>>   3974			rc = fxrstor_fixup(ctxt, &fx_state);
>>   3975	
>>   3976		if (rc == X86EMUL_CONTINUE)
>> > 3977			rc = asm_safe("fxrstor %[fx]", : [fx] "m"(fx_state));
>>   3978	
>>   3979		ctxt->ops->put_fpu(ctxt);
>>   3980	
>>
>> ---
>> 0-DAY kernel test infrastructure                Open Source Technology Center
>> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ