From mboxrd@z Thu Jan 1 00:00:00 1970 From: Feng Wu Subject: [PATCH v2 2/2] x86/hvm: Always do SMAP check when updating secondary system time for guest Date: Mon, 8 Jan 2001 08:10:53 +0800 Message-ID: <978912653-6561-3-git-send-email-feng.wu@intel.com> References: <978912653-6561-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: <978912653-6561-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 | 9 ++++++++- xen/include/asm-x86/domain.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index a4e1656..797f0cf 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -821,7 +821,7 @@ 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; @@ -829,9 +829,14 @@ bool_t update_secondary_system_time(const struct vcpu *v, if ( guest_handle_is_null(user_u) ) return 1; + v->arch.smap_check_policy = SMAP_CHECK_ENABLED; + /* 1. Update userspace version. */ if ( __copy_field_to_guest(user_u, u, version) == sizeof(u->version) ) + { + v->arch.smap_check_policy = SMAP_CHECK_HONOR_CPL_AC; return 0; + } wmb(); /* 2. Update all other userspace fields. */ __copy_to_guest(user_u, u, 1); @@ -840,6 +845,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); + v->arch.smap_check_policy = SMAP_CHECK_HONOR_CPL_AC; + return 1; } diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index d7cac4f..9440351 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -466,7 +466,7 @@ struct arch_vcpu #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