[Kernel] Clear the outputs and report no space when no direct memory span is free

Co-authored-by: Sekai <140012992+SekaixX@users.noreply.github.com>
This commit is contained in:
ParantezTech 2026-10-08 23:44:39 +03:00
parent 9d530f63f9
commit 8c0ca1a2a7
1 changed files with 14 additions and 6 deletions

View File

@ -2844,15 +2844,23 @@ public static partial class KernelMemoryCompatExports
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT;
}
var searchStart = searchStartRaw < 0 ? 0UL : (ulong)searchStartRaw;
var searchEnd = searchEndRaw <= 0
? GuestMemoryLayout.DirectBytes
: Math.Min((ulong)searchEndRaw, GuestMemoryLayout.DirectBytes);
if (searchStart >= searchEnd)
if (!ctx.TryWriteUInt64(outAddress, 0) || !ctx.TryWriteUInt64(outSize, 0))
{
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT;
}
if (searchStartRaw < 0 || searchEndRaw < 0)
{
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT;
}
var searchStart = (ulong)searchStartRaw;
var searchEnd = Math.Min((ulong)searchEndRaw, GuestMemoryLayout.DirectBytes);
if (searchStart >= searchEnd)
{
return MemoryNoSpace;
}
bool foundSpan;
ulong candidate;
ulong rangeAvailable;
@ -2868,7 +2876,7 @@ public static partial class KernelMemoryCompatExports
if (!foundSpan)
{
return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_NOT_FOUND;
return MemoryNoSpace;
}
if (!ctx.TryWriteUInt64(outAddress, candidate) || !ctx.TryWriteUInt64(outSize, rangeAvailable))