From 865ffe4e02038104481530e156380a9b0ae20fa1 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 25 Nov 2019 10:27:02 -0600 Subject: [PATCH] anv: Return VK_ERROR_OUT_OF_DEVICE_MEMORY for too-large buffers Reviewed-by: Lionel Landwerlin --- src/intel/vulkan/anv_device.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 027a908f8e7..210136bb500 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -3912,8 +3912,17 @@ VkResult anv_CreateBuffer( VkBuffer* pBuffer) { ANV_FROM_HANDLE(anv_device, device, _device); + struct anv_physical_device *pdevice = &device->instance->physicalDevice; struct anv_buffer *buffer; + /* Don't allow creating buffers bigger than our address space. The real + * issue here is that we may align up the buffer size and we don't want + * doing so to cause roll-over. However, no one has any business + * allocating a buffer larger than our GTT size. + */ + if (pCreateInfo->size > pdevice->gtt_size) + return vk_error(VK_ERROR_OUT_OF_DEVICE_MEMORY); + assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO); buffer = vk_alloc2(&device->alloc, pAllocator, sizeof(*buffer), 8, -- 2.30.2