From 96c5f03d36014b0cf2d136ebb0f221721ce5e541 Mon Sep 17 00:00:00 2001 From: Kinak338 <77231406+Kinak338@users.noreply.github.com> Date: Fri, 23 Aug 2024 18:38:20 +0200 Subject: [PATCH 1/2] Update ldr_process_creation.cpp Signed-off-by: Kinak338 <77231406+Kinak338@users.noreply.github.com> --- stratosphere/loader/source/ldr_process_creation.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stratosphere/loader/source/ldr_process_creation.cpp b/stratosphere/loader/source/ldr_process_creation.cpp index 38f459c1b..801063265 100644 --- a/stratosphere/loader/source/ldr_process_creation.cpp +++ b/stratosphere/loader/source/ldr_process_creation.cpp @@ -455,7 +455,7 @@ namespace ams::ldr { out->nso_size[i] = text_end; out->nso_size[i] = std::max(out->nso_size[i], ro_end); out->nso_size[i] = std::max(out->nso_size[i], rw_end); - out->nso_size[i] = util::AlignUp(out->nso_size[i], out_param->program_id != BREATH_OF_THE_WILD.value || i ? os::MemoryPageSize : os::MemoryBlockUnitSize); + out->nso_size[i] = util::AlignUp(out->nso_size[i], os::MemoryPageSize); total_size += out->nso_size[i]; @@ -516,7 +516,8 @@ namespace ams::ldr { if (R_SUCCEEDED(fs::ReadFile(std::addressof(read_size), aslr, 0, &address, sizeof address)) && read_size == sizeof address) aslr_start = address; else aslr_start = 0xcafe00000; // FIXME } - else aslr_start = 0xdead00000; // FIXME + else aslr_slide = (0xfd000000 / os::MemoryBlockUnitSize) * os::MemoryBlockUnitSize - 0x8000000; + } /* Set out. */ From 9c1f7602d6fbc942ef51c688372cc3f6cdf8d1f0 Mon Sep 17 00:00:00 2001 From: Mako <61922615+Makonede@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:48:00 -0700 Subject: [PATCH 2/2] Fix formatting and simplify code Signed-off-by: Mako <61922615+Makonede@users.noreply.github.com> --- .../loader/source/ldr_process_creation.cpp | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/stratosphere/loader/source/ldr_process_creation.cpp b/stratosphere/loader/source/ldr_process_creation.cpp index 801063265..b1928aa23 100644 --- a/stratosphere/loader/source/ldr_process_creation.cpp +++ b/stratosphere/loader/source/ldr_process_creation.cpp @@ -455,7 +455,7 @@ namespace ams::ldr { out->nso_size[i] = text_end; out->nso_size[i] = std::max(out->nso_size[i], ro_end); out->nso_size[i] = std::max(out->nso_size[i], rw_end); - out->nso_size[i] = util::AlignUp(out->nso_size[i], os::MemoryPageSize); + out->nso_size[i] = util::AlignUp(out->nso_size[i], os::MemoryPageSize); total_size += out->nso_size[i]; @@ -507,17 +507,7 @@ namespace ams::ldr { aslr_slide = GenerateSecureRandom(free_size / os::MemoryBlockUnitSize) * os::MemoryBlockUnitSize; } else { - fs::FileHandle aslr; - if (R_SUCCEEDED(fs::OpenFile(std::addressof(aslr), ASLR_CONFIG, fs::OpenMode_Read))) { - ON_SCOPE_EXIT { fs::CloseFile(aslr); }; - - size_t read_size; - uintptr_t address = 0; - if (R_SUCCEEDED(fs::ReadFile(std::addressof(read_size), aslr, 0, &address, sizeof address)) && read_size == sizeof address) aslr_start = address; - else aslr_start = 0xcafe00000; // FIXME - } - else aslr_slide = (0xfd000000 / os::MemoryBlockUnitSize) * os::MemoryBlockUnitSize - 0x8000000; - + aslr_start = 0xffe00000; } /* Set out. */