radv/winsys: Deal with realloc failures in BO lists.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sat, 20 Jun 2020 18:34:59 +0000 (20:34 +0200)
committerMarge Bot <eric+marge@anholt.net>
Wed, 24 Jun 2020 13:00:02 +0000 (13:00 +0000)
Otherwise if realloc fails we silently try to use it. Make recording fail instead.

CC: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5578>

src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c

index 5209addacfa39bcf3d644dd714c90ad98ed5e5a5..fca2e53aa8af5d0dda635069e1ed1ae4ec8f0bdd 100644 (file)
@@ -558,13 +558,20 @@ static void radv_amdgpu_cs_add_buffer_internal(struct radv_amdgpu_cs *cs,
        unsigned hash;
        int index = radv_amdgpu_cs_find_buffer(cs, bo);
 
-       if (index != -1)
+       if (index != -1 || cs->failed)
                return;
 
        if (cs->num_buffers == cs->max_num_buffers) {
                unsigned new_count = MAX2(1, cs->max_num_buffers * 2);
-               cs->handles = realloc(cs->handles, new_count * sizeof(struct drm_amdgpu_bo_list_entry));
-               cs->max_num_buffers = new_count;
+               struct drm_amdgpu_bo_list_entry *new_entries =
+                       realloc(cs->handles, new_count * sizeof(struct drm_amdgpu_bo_list_entry));
+               if (new_entries) {
+                       cs->max_num_buffers = new_count;
+                       cs->handles = new_entries;
+               } else {
+                       cs->failed = true;
+                       return;
+               }
        }
 
        cs->handles[cs->num_buffers].bo_handle = bo;