From 700d572732e9a11527bb61b88daa2a970f3b1bde Mon Sep 17 00:00:00 2001 From: TuxSH Date: Wed, 8 Feb 2017 23:18:08 +0100 Subject: [PATCH] Stub svc 0x59 --- source/firm.c | 9 ++++++++- source/patches.c | 11 +++++++++++ source/patches.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/source/firm.c b/source/firm.c index 5fb4037..8b8ccb6 100755 --- a/source/firm.c +++ b/source/firm.c @@ -172,6 +172,13 @@ u32 patchNativeFirm(u32 firmVersion, FirmwareSource nandType, u32 emuHeader, boo ret += reimplementSvcBackdoor(arm11Section1, arm11SvcTable, baseK11VA, &freeK11Space); } + //11.3 FIRM patches + if(firmVersion >= (ISN3DS ? 0x2D : 0x5C)) + { + //Stub svc 0x59 + ret += stubSvcRestrictGpuDma(arm11Section1, arm11SvcTable, baseK11VA); + } + ret += implementSvcGetCFWInfo(arm11Section1, arm11SvcTable, baseK11VA, &freeK11Space, isSafeMode); //Apply UNITINFO patches @@ -294,7 +301,7 @@ u32 patch1x2xNativeAndSafeFirm(u32 devMode) ret = 0; ret += ISN3DS ? patchFirmWrites(process9Offset, process9Size) : patchOldFirmWrites(process9Offset, process9Size); - + ret += ISN3DS ? patchSignatureChecks(process9Offset, process9Size) : patchOldSignatureChecks(process9Offset, process9Size); if(devMode != 0) diff --git a/source/patches.c b/source/patches.c index 7b69ea4..def865d 100644 --- a/source/patches.c +++ b/source/patches.c @@ -283,6 +283,17 @@ u32 reimplementSvcBackdoor(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA, u8 **free return 0; } +u32 stubSvcRestrictGpuDma(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA) +{ + if(arm11SvcTable[0x59] != 0) + { + u32 *off = (u32 *)(pos + arm11SvcTable[0x59] - baseK11VA); + off[1] = 0xE1A00000; //replace call to inner function by a NOP + } + + return 0; +} + u32 implementSvcGetCFWInfo(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA, u8 **freeK11Space, bool isSafeMode) { if(*(u32 *)(*freeK11Space + svcGetCFWInfo_bin_size - 4) != 0xFFFFFFFF) return 1; diff --git a/source/patches.h b/source/patches.h index 8e07a39..a4f0382 100644 --- a/source/patches.h +++ b/source/patches.h @@ -46,6 +46,7 @@ u32 patchZeroKeyNcchEncryptionCheck(u8 *pos, u32 size); u32 patchNandNcchEncryptionCheck(u8 *pos, u32 size); u32 patchCheckForDevCommonKey(u8 *pos, u32 size); u32 reimplementSvcBackdoor(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA, u8 **freeK11Space); +u32 stubSvcRestrictGpuDma(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA); u32 implementSvcGetCFWInfo(u8 *pos, u32 *arm11SvcTable, u32 baseK11VA, u8 **freeK11Space, bool isSafeMode); u32 patchArm9ExceptionHandlersInstall(u8 *pos, u32 size); u32 getInfoForArm11ExceptionHandlers(u8 *pos, u32 size, u32 *codeSetOffset);