kern: add version bounds checking

This commit is contained in:
Michael Scire
2020-08-18 04:03:01 -07:00
committed by SciresM
parent 56ec55f3c4
commit 47f2e93a42
5 changed files with 79 additions and 4 deletions

View File

@@ -27,8 +27,10 @@ namespace ams::kern {
/* Initial processes may use any user priority they like. */
this->priority_mask = ~0xFul;
/* TODO: Here, Nintendo sets the kernel version to (current kernel version). */
/* How should we handle this? Not a MESOSPHERE_TODO because it's not critical. */
/* Here, Nintendo sets the kernel version to the current kernel version. */
/* We will follow suit and set the version to the highest supported kernel version. */
this->intended_kernel_version.Set<KernelVersion::MajorVersion>(ams::svc::SupportedKernelMajorVersion);
this->intended_kernel_version.Set<KernelVersion::MinorVersion>(ams::svc::SupportedKernelMinorVersion);
/* Parse the capabilities array. */
return this->SetCapabilities(caps, num_caps, page_table);

View File

@@ -146,8 +146,11 @@ namespace ams::kern {
}
Result KProcess::Initialize(const ams::svc::CreateProcessParameter &params) {
/* TODO: Validate intended kernel version. */
/* How should we do this? */
/* Validate that the intended kernel version is high enough for us to support. */
R_UNLESS(this->capabilities.GetIntendedKernelVersion() >= ams::svc::RequiredKernelVersion, svc::ResultInvalidCombination());
/* Validate that the intended kernel version isn't too high for us to support. */
R_UNLESS(this->capabilities.GetIntendedKernelVersion() <= ams::svc::SupportedKernelVersion, svc::ResultInvalidCombination());
/* Create and clear the process local region. */
R_TRY(this->CreateThreadLocalRegion(std::addressof(this->plr_address)));