From: Jason Ekstrand Date: Mon, 25 Nov 2019 16:27:02 +0000 (-0600) Subject: anv: Return VK_ERROR_OUT_OF_DEVICE_MEMORY for too-large buffers X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=865ffe4e02038104481530e156380a9b0ae20fa1;p=mesa.git anv: Return VK_ERROR_OUT_OF_DEVICE_MEMORY for too-large buffers Reviewed-by: Lionel Landwerlin --- 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,