[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH V8 1/2] x86/xsaves: fix two miscellaneous issues
From: Shuai Ruan <shuai.ruan@xxxxxxxxx> 1. get_xsave_addr() will only be called when xsave_area_compressed(xsave) is true. So drop the conditional expression. 2. expand_xsave_states() will memset the area when get NULL from get_xsave_addr(). Reported-by: Jan Beulich <jbeulich@xxxxxxxx> Signed-off-by: Shuai Ruan <shuai.ruan@xxxxxxxxx> --- v2: Address comments from Jan: 1. Add assert in get_xsave_addr. xen/arch/x86/xstate.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index 8c652bc..047ac74 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -164,12 +164,9 @@ static void *get_xsave_addr(struct xsave_struct *xsave, const uint16_t *comp_offsets, unsigned int xfeature_idx) { - if ( !((1ul << xfeature_idx) & xsave->xsave_hdr.xstate_bv) ) - return NULL; - - return (void *)xsave + (xsave_area_compressed(xsave) ? - comp_offsets[xfeature_idx] : - xstate_offsets[xfeature_idx]); + ASSERT(xsave_area_compressed(xsave)); + return (1ul << xfeature_idx) & xsave->xsave_hdr.xstate_bv ? + (void *)xsave + comp_offsets[xfeature_idx] : NULL; } void expand_xsave_states(struct vcpu *v, void *dest, unsigned int size) @@ -211,6 +208,8 @@ void expand_xsave_states(struct vcpu *v, void *dest, unsigned int size) ASSERT((xstate_offsets[index] + xstate_sizes[index]) <= size); memcpy(dest + xstate_offsets[index], src, xstate_sizes[index]); } + else + memset(dest + xstate_offsets[index], 0, xstate_sizes[index]); valid &= ~feature; } -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |