mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
x86/ioreq server: correctly handle bogus XEN_DMOP_{,un}map_io_range_to_ioreq_server arguments
Misbehaving device model can pass incorrect XEN_DMOP_map/ unmap_io_range_to_ioreq_server arguments, namely end < start when specifying address range. When this happens we hit ASSERT(s <= e) in rangeset_contains_range()/rangeset_overlaps_range() with debug builds. Production builds will not trap right away but may misbehave later while handling such bogus ranges. This is XSA-238. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
6f17f5c43a
commit
d59e55b018
1 file changed
+6
@@ -820,6 +820,9 @@ int hvm_map_io_range_to_ioreq_server(struct domain *d, ioservid_t id,
|
||||
struct hvm_ioreq_server *s;
|
||||
int rc;
|
||||
|
||||
if ( start > end )
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_recursive(&d->arch.hvm_domain.ioreq_server.lock);
|
||||
|
||||
rc = -ENOENT;
|
||||
@@ -872,6 +875,9 @@ int hvm_unmap_io_range_from_ioreq_server(struct domain *d, ioservid_t id,
|
||||
struct hvm_ioreq_server *s;
|
||||
int rc;
|
||||
|
||||
if ( start > end )
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_recursive(&d->arch.hvm_domain.ioreq_server.lock);
|
||||
|
||||
rc = -ENOENT;
|
||||
|
||||