The vkd3d_malloc() call is safe because sizeof(*info->descriptors) <= sizeof(*info1->descriptors), but I don't think it's setting a great example; we'd generally want to use vkd3d_calloc().
Changed in v3. We should probably add vkd3d_malloc_array() and vkd3d_zalloc() à la the kernel.