From: Jan Beulich Date: Mon, 18 Mar 2019 16:07:11 +0000 (+0100) Subject: x86/HVM: don't crash guest in hvmemul_find_mmio_cache() X-Git-Tag: archive/raspbian/4.11.3+24-g14b62ab3e5-1+rpi1~1^2~59^2~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c74683ae882fe2c260898865a92d90fc5f5f6b15;p=xen.git x86/HVM: don't crash guest in hvmemul_find_mmio_cache() Commit 35a61c05ea ("x86emul: adjust handling of AVX2 gathers") builds upon the fact that the domain will actually survive running out of MMIO result buffer space. Drop the domain_crash() invocation. Also delay incrementing of the usage counter, such that the function can't possibly use/return an out-of-bounds slot/pointer in case execution subsequently makes it into the function again without a prior reset of state. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant master commit: a43c1dec246bdee484e6a3de001cc6850a107abe master date: 2019-03-12 14:39:46 +0100 --- diff --git a/xen/arch/x86/hvm/emulate.c b/xen/arch/x86/hvm/emulate.c index c86bd7f18a..0426ef871c 100644 --- a/xen/arch/x86/hvm/emulate.c +++ b/xen/arch/x86/hvm/emulate.c @@ -946,12 +946,11 @@ static struct hvm_mmio_cache *hvmemul_find_mmio_cache( return cache; } - i = vio->mmio_cache_count++; + i = vio->mmio_cache_count; if( i == ARRAY_SIZE(vio->mmio_cache) ) - { - domain_crash(current->domain); return NULL; - } + + ++vio->mmio_cache_count; cache = &vio->mmio_cache[i]; memset(cache, 0, sizeof (*cache));