Line 36:
Line 36:
The MAC itself is custom based on xor-rot-sub-mul, and is calculated as follows (pseudo-code):
The MAC itself is custom based on xor-rot-sub-mul, and is calculated as follows (pseudo-code):
−
u32* crypto_state = (u32*) r4; // Safe kernel memory.
+
u32* crypto_state = (u32*) r4; // Safe kernel memory. This is actually the [[Memory_Management#RegionDescriptor|RegionDescriptor]].
u32* data_ptr = (u32*) lr; // Unsafe FCRAM pointer.
u32* data_ptr = (u32*) lr; // Unsafe FCRAM pointer.
Line 60:
Line 60:
The function which initializes a memalloc heap had a major update (used for FCRAM memregions and the SlabHeap container). It generates a random MAC key based on svcGetSystemTick, like this:
The function which initializes a memalloc heap had a major update (used for FCRAM memregions and the SlabHeap container). It generates a random MAC key based on svcGetSystemTick, like this:
−
crypto_state[16/4] = 0
+
crypto_state[16/4] = 0 //This is actually the [[Memory_Management#RegionDescriptor|RegionDescriptor]].
crypto_state[20/4] = 0
crypto_state[20/4] = 0
crypto_state[24/4] = 0
crypto_state[24/4] = 0
Line 141:
Line 141:
| svcGetHandleInfo
| svcGetHandleInfo
| The code which clears the variables that get written into the output 8-byte buffer, was moved to before the code which checks the input type value(previously this was only executed for type 0x32107).
| The code which clears the variables that get written into the output 8-byte buffer, was moved to before the code which checks the input type value(previously this was only executed for type 0x32107).
+
|-
+
| svcGetSystemInfo
+
| None
|}
|}