2.0.0: Difference between revisions

 
(11 intermediate revisions by 6 users not shown)
Line 35: Line 35:
** 0100000000000805(CHN/KOR dictionary), 0100000000000808("European, English and Japanese dictionaries"), 010000000000080A(Chara?), and 010000000000080C(EULA).
** 0100000000000805(CHN/KOR dictionary), 0100000000000808("European, English and Japanese dictionaries"), 010000000000080A(Chara?), and 010000000000080C(EULA).
* The following 01000000000008XX titles were added:
* The following 01000000000008XX titles were added:
** 0100000000000800(SSL trusted certs), 0100000000000807(Hotspot List), 010000000000081E(Dummy file), 010000000000081F(Icosa system config), 0100000000000820(Copper system config), 0100000000000821(Hoag system config),
** 0100000000000800(SSL trusted certs), 0100000000000807(Hotspot List), 010000000000081E(Dummy file), 010000000000081F(Icosa system config), 0100000000000820(Copper system config), 0100000000000821(Hoag system config)
* The System Application "flog" (01008BB00013C000) was added.
* 010000000000081B ("exFAT FIRM") package2 is no longer "stubbed"/overwritten with garbage.
 
===FIRM===
====Package1====
The encrypted binaries' order and calculation for next stage's entrypoint was changed.
 
Old layout (before 2.0.0):
1.- PK11 header
2.- Secure Monitor blob
3.- NX bootloader blob
4.- Warmboot blob
NX bootloader entrypoint is calculated as:
0x40013FE0 + 0x20 + 0x20 + NX bootloader blob's offset + Secure Monitor blob's size
 
New layout (2.0.0+):
1.- PK11 header
2.- Warmboot blob
3.- NX bootloader blob
4.- Secure Monitor blob
NX bootloader entrypoint is calculated as:
0x40013FE0 + 0x20 + 0x20 + NX bootloader blob's offset + Warmboot blob's size
 
Some AES-ECB decryption related code was refactored.


==Kernel==
==Kernel==
* KPoolManager was majorly rewritten.
* KPoolManager was majorly rewritten.
** Per-page reference counting was removed.
** Added MAC crypto on heap-chunk headers, to protect against DMA attacks (same as 3DS).
** Added MAC crypto on heap-chunk headers, to protect against DMA attacks (same as 3DS).


Line 50: Line 73:
* KAddressSpace was renamed to KDeviceAddressSpace.
* KAddressSpace was renamed to KDeviceAddressSpace.


* KSharedMemory now doesn't incref for each map.
* KSharedMemory now maintains a list of every map (each 0x20-byte entry).
** Instead it maintains a list of every map (each 0x20-byte entry).
** To do cleanup of mapped shared memories when a process is killed.
** Probably to do better cleanup.


* KSharedMemory no longer references the owning KProcess.
* KSharedMemory no longer references the owning KProcess.
Line 60: Line 82:
** Creation doesn't use KIrqSingleton directly anymore.
** Creation doesn't use KIrqSingleton directly anymore.
** Instead it allocates a 0x20-byte entry, and then uses KIrqSingleton.
** Instead it allocates a 0x20-byte entry, and then uses KIrqSingleton.
** Probaly to do better cleanup.
** Probably to do better cleanup.


* Size-checks >= 0x180000000 was added to a bunch of syscalls.
* Size-checks >= 0x180000000 was added to a bunch of syscalls.
Line 79: Line 101:
* On startup, kernel now calls SMC id1 0xC3000007 with the kernel memory range start and size.
* On startup, kernel now calls SMC id1 0xC3000007 with the kernel memory range start and size.


* Aarch64 exception vector for "SError interrupt" was implemented.
* AArch64 exception vector for "SError interrupt" was implemented.
 
* Kernel stacks are now allocated with a slabheap.
 
* KHeapArrange was changed. On 1.0.0 it held address/size for three pools ("base", "application", "system") and application/system were zero-sized/unused. Now it holds "pool management", "secure", "non-secure". Pool management and secure are now protected by the kernel carveout.
** Secure pool size is dynamically calculated as size of all kips (including stacks) + 24 MB (FS sysmodule heap) + 1 MB (spare pages for e.g. IPC buffer usage).
** If only one KIP is present, all memory goes to secure pool and non-secure pool does not exist.


{{NavboxVersions}}
{{NavboxVersions}}