Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
openSUSE:Leap:15.5:Update
xen.36362
xsa454-2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xsa454-2.patch of Package xen.36362
From: Bjoern Doebel <doebel@amazon.de> Subject: hypercall_xlat_continuation: Replace BUG_ON with domain_crash Instead of crashing the host in case of unexpected hypercall parameters, resort to only crashing the calling domain. This is part of XSA-454 / CVE-2024-?????. Fixes: b8a7efe8528a ("Enable compatibility mode operation for HYPERVISOR_memory_op") Reported-by: Manuel Andreas <manuel.andreas@tum.de> Signed-off-by: Bjoern Doebel <doebel@amazon.de> Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> --- a/xen/arch/x86/hypercall.c +++ b/xen/arch/x86/hypercall.c @@ -201,8 +201,13 @@ int hypercall_xlat_continuation(unsigned cval = va_arg(args, unsigned int); if ( cval == nval ) mask &= ~1U; - else - BUG_ON(nval == (unsigned int)nval); + else if ( nval == (unsigned int)nval ) + { + printk(XENLOG_G_ERR + "multicall (op %lu) bogus continuation arg%u (%#lx)\n", + mcs->call.op, i, nval); + domain_crash(current->domain); + } } else if ( id && *id == i ) { @@ -214,8 +219,13 @@ int hypercall_xlat_continuation(unsigned mcs->call.args[i] = cval; ++rc; } - else - BUG_ON(mcs->call.args[i] != (unsigned int)mcs->call.args[i]); + else if ( mcs->call.args[i] != (unsigned int)mcs->call.args[i] ) + { + printk(XENLOG_G_ERR + "multicall (op %lu) bad continuation arg%u (%#lx)\n", + mcs->call.op, i, mcs->call.args[i]); + domain_crash(current->domain); + } } } else @@ -241,8 +251,13 @@ int hypercall_xlat_continuation(unsigned cval = va_arg(args, unsigned int); if ( cval == nval ) mask &= ~1U; - else - BUG_ON(nval == (unsigned int)nval); + else if ( nval == (unsigned int)nval ) + { + printk(XENLOG_G_ERR + "hypercall (op %u) bogus continuation arg%u (%#lx)\n", + regs->eax, i, nval); + domain_crash(current->domain); + } } else if ( id && *id == i ) { @@ -254,8 +269,13 @@ int hypercall_xlat_continuation(unsigned *reg = cval; ++rc; } - else - BUG_ON(*reg != (unsigned int)*reg); + else if ( *reg != (unsigned int)*reg ) + { + printk(XENLOG_G_ERR + "hypercall (op %u) bad continuation arg%u (%#lx)\n", + regs->eax, i, *reg); + domain_crash(current->domain); + } } }
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