Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
security:tls:staging
xen
xsa463-08.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa463-08.patch of Package xen
From: Jan Beulich <jbeulich@suse.com> Subject: x86/HVM: drop stdvga's "lock" struct member No state is left to protect. It being the last field, drop the struct itself as well. Similarly for then ending up empty, drop the .complete handler. This is part of XSA-463 / CVE-2024-45818 Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> (cherry picked from commit b180a50326c8a2c171f37c1940a0fbbdcad4be90) diff --git a/xen/arch/x86/hvm/stdvga.c b/xen/arch/x86/hvm/stdvga.c index 9f308fc89679..d38d30affbff 100644 --- a/xen/arch/x86/hvm/stdvga.c +++ b/xen/arch/x86/hvm/stdvga.c @@ -69,61 +69,35 @@ static int cf_check stdvga_mem_write( static bool cf_check stdvga_mem_accept( const struct hvm_io_handler *handler, const ioreq_t *p) { - struct hvm_hw_stdvga *s = ¤t->domain->arch.hvm.stdvga; - - /* - * The range check must be done without taking the lock, to avoid - * deadlock when hvm_mmio_internal() is called from - * hvm_copy_to/from_guest_phys() in hvm_process_io_intercept(). - */ if ( (ioreq_mmio_first_byte(p) < VGA_MEM_BASE) || (ioreq_mmio_last_byte(p) >= (VGA_MEM_BASE + VGA_MEM_SIZE)) ) return 0; - spin_lock(&s->lock); - if ( p->dir != IOREQ_WRITE || p->data_is_ptr || p->count != 1 ) { /* * Only accept single direct writes, as that's the only thing we can * accelerate using buffered ioreq handling. */ - goto reject; + return false; } - /* s->lock intentionally held */ - return 1; - - reject: - spin_unlock(&s->lock); - return 0; -} - -static void cf_check stdvga_mem_complete(const struct hvm_io_handler *handler) -{ - struct hvm_hw_stdvga *s = ¤t->domain->arch.hvm.stdvga; - - spin_unlock(&s->lock); + return true; } static const struct hvm_io_ops stdvga_mem_ops = { .accept = stdvga_mem_accept, .read = stdvga_mem_read, .write = stdvga_mem_write, - .complete = stdvga_mem_complete }; void stdvga_init(struct domain *d) { - struct hvm_hw_stdvga *s = &d->arch.hvm.stdvga; struct hvm_io_handler *handler; if ( !has_vvga(d) ) return; - memset(s, 0, sizeof(*s)); - spin_lock_init(&s->lock); - /* VGA memory */ handler = hvm_next_io_handler(d); if ( handler ) diff --git a/xen/arch/x86/include/asm/hvm/domain.h b/xen/arch/x86/include/asm/hvm/domain.h index dd9d837e8431..333501d5f2ac 100644 --- a/xen/arch/x86/include/asm/hvm/domain.h +++ b/xen/arch/x86/include/asm/hvm/domain.h @@ -72,7 +72,6 @@ struct hvm_domain { struct hvm_hw_vpic vpic[2]; /* 0=master; 1=slave */ struct hvm_vioapic **vioapic; unsigned int nr_vioapics; - struct hvm_hw_stdvga stdvga; /* * hvm_hw_pmtimer is a publicly-visible name. We will defer renaming diff --git a/xen/arch/x86/include/asm/hvm/io.h b/xen/arch/x86/include/asm/hvm/io.h index d49f6d6f8c06..d72b29f73fa2 100644 --- a/xen/arch/x86/include/asm/hvm/io.h +++ b/xen/arch/x86/include/asm/hvm/io.h @@ -110,10 +110,6 @@ struct vpci_arch_msix_entry { int pirq; }; -struct hvm_hw_stdvga { - spinlock_t lock; -}; - void stdvga_init(struct domain *d); extern void hvm_dpci_msi_eoi(struct domain *d, int vector);
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