From 9d37c71b205099b3dbe831e85ef774d1e4f2f1b5 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sat, 18 Apr 2026 22:18:02 +0000 Subject: [PATCH] [loader] change ASLR algo to be more uniform Signed-off-by: lizzie --- src/core/loader/deconstructed_rom_directory.cpp | 5 ++--- src/core/loader/kip.cpp | 5 ++--- src/core/loader/nro.cpp | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp index 2ea63e137e..afa5cdbc36 100644 --- a/src/core/loader/deconstructed_rom_directory.cpp +++ b/src/core/loader/deconstructed_rom_directory.cpp @@ -228,9 +228,8 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect code_size += patch_ctx.GetTotalPatchSize(); // TODO: this is bad form of ASLR, it sucks - size_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() - ? ::Settings::values.rng_seed.GetValue() - : Common::Random::Random64(0)) * 0x734287f27) & 0xfff000; + std::uintptr_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() + ? ::Settings::values.rng_seed.GetValue() : Common::Random::Random64(0)) << 12) & 0xfff000; // Setup the process code layout if (process.LoadFromMetadata(metadata, code_size, fastmem_base, aslr_offset, is_hbl).IsError()) { diff --git a/src/core/loader/kip.cpp b/src/core/loader/kip.cpp index 81449ac8b8..978ffed2b9 100644 --- a/src/core/loader/kip.cpp +++ b/src/core/loader/kip.cpp @@ -89,9 +89,8 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, codeset.DataSegment().size += kip->GetBSSSize(); // TODO: this is bad form of ASLR, it sucks - size_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() - ? ::Settings::values.rng_seed.GetValue() - : Common::Random::Random64(0)) * 0x734287f27) & 0xfff000; + std::uintptr_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() + ? ::Settings::values.rng_seed.GetValue() : Common::Random::Random64(0)) << 12) & 0xfff000; // Setup the process code layout if (process.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), codeset.memory.size(), 0, aslr_offset, false).IsError()) { diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index e7c5ac01b1..738d805149 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp @@ -242,9 +242,8 @@ static bool LoadNroImpl(Core::System& system, Kernel::KProcess& process, }(); // TODO: this is bad form of ASLR, it sucks - size_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() - ? ::Settings::values.rng_seed.GetValue() - : Common::Random::Random64(0)) * 0x734287f27) & 0xfff000; + std::uintptr_t aslr_offset = ((::Settings::values.rng_seed_enabled.GetValue() + ? ::Settings::values.rng_seed.GetValue() : Common::Random::Random64(0)) << 12) & 0xfff000; // Setup the process code layout if (process