1
0
Fork 0
mirror of https://github.com/Atmosphere-NX/Atmosphere.git synced 2024-11-23 04:12:02 +00:00

meso: properly initialize per-thread CFI-value for 11.x

This commit is contained in:
Michael Scire 2020-12-08 16:16:49 -08:00
parent 58c3c8c19a
commit abd7ad2720

View file

@ -51,7 +51,7 @@ namespace ams::kern::arch::arm64 {
cpu::InstructionMemoryBarrier(); cpu::InstructionMemoryBarrier();
} }
uintptr_t SetupStackForUserModeThreadStarter(KVirtualAddress pc, KVirtualAddress k_sp, KVirtualAddress u_sp, uintptr_t arg, bool is_64_bit) { uintptr_t SetupStackForUserModeThreadStarter(KVirtualAddress pc, KVirtualAddress k_sp, KVirtualAddress u_sp, uintptr_t arg, const bool is_64_bit) {
/* NOTE: Stack layout on entry looks like following: */ /* NOTE: Stack layout on entry looks like following: */
/* SP */ /* SP */
/* | */ /* | */
@ -76,6 +76,11 @@ namespace ams::kern::arch::arm64 {
MESOSPHERE_LOG("Creating User 32-Thread, %016lx\n", GetInteger(pc)); MESOSPHERE_LOG("Creating User 32-Thread, %016lx\n", GetInteger(pc));
} }
/* Set CFI-value. */
if (is_64_bit) {
ctx->x[18] = KSystemControl::GenerateRandomU64() | 1;
}
/* Set stack pointer. */ /* Set stack pointer. */
if (is_64_bit) { if (is_64_bit) {
ctx->sp = GetInteger(u_sp); ctx->sp = GetInteger(u_sp);