From mboxrd@z Thu Jan 1 00:00:00 1970 From: Feng Wu Subject: [PATCH v4 2/2] x86/hvm: Always do SMAP check when updating secondary system time for guest Date: Wed, 30 Jul 2014 09:35:52 +0800 Message-ID: <1406684152-16820-3-git-send-email-feng.wu@intel.com> References: <1406684152-16820-1-git-send-email-feng.wu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1406684152-16820-1-git-send-email-feng.wu@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: tim@xen.org, Feng Wu , keir@xen.org, jbeulich@suse.com, linux@eikelenboom.it List-Id: xen-devel@lists.xenproject.org In this patch, we always do the SMAP check when updating secondary system time for the guest when SMAP is enabled by it. Reported-by: Sander Eikelenboom Signed-off-by: Feng Wu --- xen/arch/x86/time.c | 10 +++++++++- xen/include/asm-x86/domain.h | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index a4e1656..e4627f3 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -821,17 +821,23 @@ static void __update_vcpu_system_time(struct vcpu *v, int force) v->arch.pv_vcpu.pending_system_time = _u; } -bool_t update_secondary_system_time(const struct vcpu *v, +bool_t update_secondary_system_time(struct vcpu *v, struct vcpu_time_info *u) { XEN_GUEST_HANDLE(vcpu_time_info_t) user_u = v->arch.time_info_guest; + smap_check_policy_t saved_policy; if ( guest_handle_is_null(user_u) ) return 1; + saved_policy = smap_policy_change(v, SMAP_CHECK_ENABLED); + /* 1. Update userspace version. */ if ( __copy_field_to_guest(user_u, u, version) == sizeof(u->version) ) + { + smap_policy_change(v, saved_policy); return 0; + } wmb(); /* 2. Update all other userspace fields. */ __copy_to_guest(user_u, u, 1); @@ -840,6 +846,8 @@ bool_t update_secondary_system_time(const struct vcpu *v, u->version = version_update_end(u->version); __copy_field_to_guest(user_u, u, version); + smap_policy_change(v, saved_policy); + return 1; } diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index 112d0b1..83329ed 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -468,7 +468,7 @@ smap_check_policy_t smap_policy_change(struct vcpu *v, #define hvm_svm hvm_vcpu.u.svm bool_t update_runstate_area(struct vcpu *); -bool_t update_secondary_system_time(const struct vcpu *, +bool_t update_secondary_system_time(struct vcpu *, struct vcpu_time_info *); void vcpu_show_execution_state(struct vcpu *); -- 1.8.3.1