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); /* ... */ } static void PostDestroy(uintptr_t arg) { MESOSPHERE_UNUSED(arg); /* ... */ }
ALWAYS_INLINE size_t CalculateRequiredSecureMemorySize() const { ALWAYS_INLINE size_t CalculateRequiredSecureMemorySize() const {
return CalculateRequiredSecureMemorySize(m_resource_size, m_resource_pool); 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; } ALWAYS_INLINE size_t GetSize() const { return m_resource_size; }

View file

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