From: Jan Beulich Date: Wed, 7 Dec 2016 12:49:08 +0000 (+0100) Subject: x86/HVM: prefer structure assignment for seg reg copying X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~3261 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ca9a016d527bb2572c935f2c98af52876a58ae2c;p=xen.git x86/HVM: prefer structure assignment for seg reg copying This makes things type safe. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: Andrew Cooper Reviewed-by: Boris Ostrovsky --- diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index d0a043bfd3..f4c57475f3 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -1432,7 +1432,8 @@ static int hvmemul_read_segment( if ( IS_ERR(sreg) ) return -PTR_ERR(sreg); - memcpy(reg, sreg, sizeof(struct segment_register)); + *reg = *sreg; + return X86EMUL_OKAY; } diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c index 1588b2f79c..c7d02bc894 100644 --- a/xen/arch/x86/hvm/svm/svm.c +++ b/xen/arch/x86/hvm/svm/svm.c @@ -626,39 +626,39 @@ static void svm_get_segment_register(struct vcpu *v, enum x86_segment seg, switch ( seg ) { case x86_seg_cs: - memcpy(reg, &vmcb->cs, sizeof(*reg)); + *reg = vmcb->cs; break; case x86_seg_ds: - memcpy(reg, &vmcb->ds, sizeof(*reg)); + *reg = vmcb->ds; break; case x86_seg_es: - memcpy(reg, &vmcb->es, sizeof(*reg)); + *reg = vmcb->es; break; case x86_seg_fs: svm_sync_vmcb(v); - memcpy(reg, &vmcb->fs, sizeof(*reg)); + *reg = vmcb->fs; break; case x86_seg_gs: svm_sync_vmcb(v); - memcpy(reg, &vmcb->gs, sizeof(*reg)); + *reg = vmcb->gs; break; case x86_seg_ss: - memcpy(reg, &vmcb->ss, sizeof(*reg)); + *reg = vmcb->ss; reg->attr.fields.dpl = vmcb->_cpl; break; case x86_seg_tr: svm_sync_vmcb(v); - memcpy(reg, &vmcb->tr, sizeof(*reg)); + *reg = vmcb->tr; break; case x86_seg_gdtr: - memcpy(reg, &vmcb->gdtr, sizeof(*reg)); + *reg = vmcb->gdtr; break; case x86_seg_idtr: - memcpy(reg, &vmcb->idtr, sizeof(*reg)); + *reg = vmcb->idtr; break; case x86_seg_ldtr: svm_sync_vmcb(v); - memcpy(reg, &vmcb->ldtr, sizeof(*reg)); + *reg = vmcb->ldtr; break; default: BUG(); @@ -701,26 +701,26 @@ static void svm_set_segment_register(struct vcpu *v, enum x86_segment seg, switch ( seg ) { case x86_seg_cs: - memcpy(&vmcb->cs, reg, sizeof(*reg)); + vmcb->cs = *reg; break; case x86_seg_ds: - memcpy(&vmcb->ds, reg, sizeof(*reg)); + vmcb->ds = *reg; break; case x86_seg_es: - memcpy(&vmcb->es, reg, sizeof(*reg)); + vmcb->es = *reg; break; case x86_seg_fs: - memcpy(&vmcb->fs, reg, sizeof(*reg)); + vmcb->fs = *reg; break; case x86_seg_gs: - memcpy(&vmcb->gs, reg, sizeof(*reg)); + vmcb->gs = *reg; break; case x86_seg_ss: - memcpy(&vmcb->ss, reg, sizeof(*reg)); + vmcb->ss = *reg; vmcb->_cpl = vmcb->ss.attr.fields.dpl; break; case x86_seg_tr: - memcpy(&vmcb->tr, reg, sizeof(*reg)); + vmcb->tr = *reg; break; case x86_seg_gdtr: vmcb->gdtr.base = reg->base; @@ -731,7 +731,7 @@ static void svm_set_segment_register(struct vcpu *v, enum x86_segment seg, vmcb->idtr.limit = reg->limit; break; case x86_seg_ldtr: - memcpy(&vmcb->ldtr, reg, sizeof(*reg)); + vmcb->ldtr = *reg; break; default: BUG();