Fix vk_append_struct to add elements after the last one

This also limits list's length to some random number
to crash if the struct chain has a loop.

Bug: 131181334
Test: make
Change-Id: I5ae17ce129aba820b98f999208802c9135cbd8b8
Signed-off-by: Roman Kiryanov <rkir@google.com>
diff --git a/system/vulkan_enc/vk_util.h b/system/vulkan_enc/vk_util.h
index 0c7f4b9..da394f4 100644
--- a/system/vulkan_enc/vk_util.h
+++ b/system/vulkan_enc/vk_util.h
@@ -26,6 +26,7 @@
 /* common inlines and macros for vulkan drivers */
 
 #include <vulkan/vulkan.h>
+#include <stdlib.h>
 
 struct vk_struct_common {
     VkStructureType sType;
@@ -215,11 +216,28 @@
 }
 
 static inline vk_struct_common*
+vk_last_struct_chain(vk_struct_common* i)
+{
+    for (int n = 1000000; n > 0; --n) {
+        vk_struct_common* next = i->pNext;
+        if (next) {
+            i = next;
+        } else {
+            return i;
+        }
+    }
+
+    ::abort();  // crash on loops in the chain
+    return NULL;
+}
+
+static inline vk_struct_common*
 vk_append_struct(vk_struct_common* current, vk_struct_common* next)
 {
-   current->pNext = next;
-   next->pNext = nullptr;
-   return next;
+    vk_struct_common* last = vk_last_struct_chain(current);
+    last->pNext = next;
+    next->pNext = nullptr;
+    return current;
 }
 
 #endif /* VK_UTIL_H */