Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
xen.481
54216833-x86-shadow-fix-race-when-sampling-dirt...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 54216833-x86-shadow-fix-race-when-sampling-dirty-vram-state.patch of Package xen.481
References: bnc#895798 CVE-2014-7154 XSA-104 # Commit 46a49b91f1026f64430b84dd83e845a33f06415e # Date 2014-09-23 14:31:47 +0200 # Author Andrew Cooper <andrew.cooper3@citrix.com> # Committer Jan Beulich <jbeulich@suse.com> x86/shadow: fix race condition sampling the dirty vram state d->arch.hvm_domain.dirty_vram must be read with the domain's paging lock held. If not, two concurrent hypercalls could both end up attempting to free dirty_vram (the second of which will free a wild pointer), or both end up allocating a new dirty_vram structure (the first of which will be leaked). This is XSA-104. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Tim Deegan <tim@xen.org> --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -3486,7 +3486,7 @@ int shadow_track_dirty_vram(struct domai int flush_tlb = 0; unsigned long i; p2m_type_t t; - struct sh_dirty_vram *dirty_vram = d->arch.hvm_domain.dirty_vram; + struct sh_dirty_vram *dirty_vram; struct p2m_domain *p2m = p2m_get_hostp2m(d); if ( end_pfn < begin_pfn || end_pfn > p2m->max_mapped_pfn + 1 ) @@ -3496,6 +3496,8 @@ int shadow_track_dirty_vram(struct domai p2m_lock(p2m_get_hostp2m(d)); paging_lock(d); + dirty_vram = d->arch.hvm_domain.dirty_vram; + if ( dirty_vram && (!nr || ( begin_pfn != dirty_vram->begin_pfn || end_pfn != dirty_vram->end_pfn )) ) --- a/xen/include/asm-x86/hvm/domain.h +++ b/xen/include/asm-x86/hvm/domain.h @@ -67,7 +67,7 @@ struct hvm_domain { /* Memory ranges with pinned cache attributes. */ struct list_head pinned_cacheattr_ranges; - /* VRAM dirty support. */ + /* VRAM dirty support. Protect with the domain paging lock. */ struct sh_dirty_vram *dirty_vram; /* If one of vcpus of this domain is in no_fill_mode or
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor