kern: support null resource limit in KSecureSystemResource

This commit is contained in:
Michael Scire 2025-04-30 20:24:22 -07:00 committed by SciresM
parent 2e204ccbaf
commit 86e4bed056
2 changed files with 15 additions and 6 deletions

View file

@ -94,7 +94,11 @@ namespace ams::kern {
static void PostDestroy(uintptr_t arg) { MESOSPHERE_UNUSED(arg); /* ... */ }
ALWAYS_INLINE size_t CalculateRequiredSecureMemorySize() const {
if (m_resource_limit != nullptr) {
return CalculateRequiredSecureMemorySize(m_resource_size, m_resource_pool);
} else {
return 0;
}
}
ALWAYS_INLINE size_t GetSize() const { return m_resource_size; }

View file

@ -59,7 +59,9 @@ namespace ams::kern {
memory_reservation.Commit();
/* Open reference to our resource limit. */
if (m_resource_limit != nullptr) {
m_resource_limit->Open();
}
/* Set ourselves as initialized. */
m_is_initialized = true;
@ -76,12 +78,15 @@ namespace ams::kern {
/* Free our secure memory. */
KSystemControl::FreeSecureMemory(m_resource_address, m_resource_size, m_resource_pool);
/* Clean up our resource usage. */
if (m_resource_limit != nullptr) {
/* Release the memory reservation. */
m_resource_limit->Release(ams::svc::LimitableResource_PhysicalMemoryMax, this->CalculateRequiredSecureMemorySize());
/* Close reference to our resource limit. */
m_resource_limit->Close();
}
}
size_t KSecureSystemResource::CalculateRequiredSecureMemorySize(size_t size, KMemoryManager::Pool pool) {
return KSystemControl::CalculateRequiredSecureMemorySize(size, pool);