[videoout] guard degenerate guest buffer ranges (#755)

This commit is contained in:
Berk
2026-08-03 10:09:07 +03:00
committed by GitHub
parent 8eb2c1e9cb
commit 26bda041fa
@@ -10179,7 +10179,12 @@ internal static unsafe class VulkanVideoPresenter
} }
var size = (ulong)Math.Max(guestBuffer.Length, sizeof(uint)); var size = (ulong)Math.Max(guestBuffer.Length, sizeof(uint));
var endAddress = checked(guestBuffer.BaseAddress + size); if (guestBuffer.BaseAddress > ulong.MaxValue - size)
{
return CreateTransientGlobalBufferResource(guestBuffer);
}
var endAddress = guestBuffer.BaseAddress + size;
GuestBufferAllocation? allocation = null; GuestBufferAllocation? allocation = null;
foreach (var candidate in _guestBufferAllocations) foreach (var candidate in _guestBufferAllocations)
{ {
@@ -10414,9 +10419,14 @@ internal static unsafe class VulkanVideoPresenter
} }
var size = (ulong)Math.Max(buffer.Length, sizeof(uint)); var size = (ulong)Math.Max(buffer.Length, sizeof(uint));
if (buffer.BaseAddress > ulong.MaxValue - size - 3)
{
continue;
}
var alignedStart = buffer.BaseAddress & var alignedStart = buffer.BaseAddress &
~(GuestStorageBufferOffsetAlignment - 1); ~(GuestStorageBufferOffsetAlignment - 1);
var paddedEnd = checked(buffer.BaseAddress + size + 3) & ~3UL; var paddedEnd = (buffer.BaseAddress + size + 3) & ~3UL;
ranges.Add(( ranges.Add((
alignedStart, alignedStart,
paddedEnd)); paddedEnd));