A timeout of zero is used in order to check whether a fence is signalled without blocking the thread.
It’s a valid thing to do (the specs even talk explicitly about that case if I remember correctly) and I’d even say that it is probably a very common thing to do.
If timeout is zero, then vkWaitForFences does not wait, but simply returns the current state of the fences. VK_TIMEOUT will be returned in this case if the condition is not satisfied, even though no actual wait was performed.
It would be great if you didn’t log that use case out as an error, as it seems to be a valid thing to do.