<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SciresM</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SciresM"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/SciresM"/>
	<updated>2026-05-02T01:07:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=21.1.0&amp;diff=14178</id>
		<title>21.1.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=21.1.0&amp;diff=14178"/>
		<updated>2025-12-09T01:47:23Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* System Titles */ creport&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 21.1.0 system update was released on December 9, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: bcat, nifm, ns, psc, nim, pctl, creport, migration, olsc.&lt;br /&gt;
** SystemData (non-sysver): BrowserDll, ClientCertData.&lt;br /&gt;
** Applets: qlaunch, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[Creport|creport]] ===&lt;br /&gt;
The code which terminates the process when the enable_jit_debug argument is true is now duplicated. Before, the process was terminated before the screenshot attachment was submitted to erpt. Now, if the process is not an application, termination occurs prior to screenshot attachment is submitted; otherwise, application processes are terminated after the screenshot attachment is submitted.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* BrowserDll: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated, &amp;quot;/nro/netfront/core_3/Default/cfi_nncfi/oss_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_3/Default/cfi_nncfi/peer_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_3/Default/cfi_nncfi/webkit_wkc.nro.lz4&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletOff/LibAppletWeb/LibAppletShop/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-12-09_01-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=14111</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=14111"/>
		<updated>2025-11-14T00:19:44Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Flags */ 21.0.0+ LoadBrowserCoreDll&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#META|META]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| [[#ACID|ACID]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| [[#ACI0|ACI0]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;META&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] SignatureKeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MainThreadPriority|MainThreadPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| MainThreadCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] [[#SystemResourceSize|SystemResourceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Version|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MainThreadStackSize|MainThreadStackSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| ProductCode (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1-3&lt;br /&gt;
| ProcessAddressSpace (0x00 = AddressSpace32Bit, 0x01 = AddressSpace64BitOld, 0x02 = AddressSpace32BitNoReserved, 0x03 = AddressSpace64Bit)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [7.0.0+] OptimizeMemoryAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [11.0.0+] DisableDeviceAddressSpaceMerge&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [18.0.0+] EnableAliasRegionExtraSize&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [19.0.0-19.0.1] PreventCodeReads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MainThreadPriority ==&lt;br /&gt;
Ranges from 0 to 0x3F.&lt;br /&gt;
&lt;br /&gt;
== SystemResourceSize ==&lt;br /&gt;
When this is non-zero, the kernel reserves this amount of memory and dynamically uses it as needed for page table pages, KMemoryBlocks, and KBlockInfos. When this is zero, the process uses global shared heaps for these.&lt;br /&gt;
&lt;br /&gt;
This enables a process to sacrifice some of the memory available to it in order to have higher limits on these resources, thus enabling the use of SvcMapPhysicalMemory.&lt;br /&gt;
&lt;br /&gt;
Maximum size as is 0x1FE00000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
0 for all titles.&lt;br /&gt;
&lt;br /&gt;
[8.1.0+] Now set to 1 for certain titles.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now set to a proper version field for all titles.&lt;br /&gt;
&lt;br /&gt;
== MainThreadStackSize ==&lt;br /&gt;
Must be aligned to 0x1000. If zero, kernel will start the process&#039;s initial thread with sp=0.&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| 0x1&lt;br /&gt;
| [14.0.0+] &lt;br /&gt;
|-&lt;br /&gt;
| 0x20A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Flags_2|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ProductionFlag&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| UnqualifiedApproval&lt;br /&gt;
|-&lt;br /&gt;
| 2-5&lt;br /&gt;
| [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Unused?&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [21.0.0+] LoadBrowserCoreDll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegion is set to Application for &amp;quot;starter&amp;quot; and NonSecureSystem for &amp;quot;nvservices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When LoadBrowserCoreDll flag is set, an additional NPDM + NSOs (wkc0-wkc9) will be loaded from program id 010000000000085D (not present on retail).&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACI0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAccessControl =&lt;br /&gt;
For [[#ACID|ACID]] this is a simple descriptor as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| [5.0.0+] ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For [[#ACI0|ACI0]] this embeds data as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (Optional) ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x1 * SaveDataOwnerIdCount&lt;br /&gt;
| Accessibilities (1=Read, 2=Write, 3=ReadWrite)&lt;br /&gt;
|-&lt;br /&gt;
| Variable (padded to nearest 4 bytes)&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FsAccessFlag ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| RegisterProgramIndexMapInfo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| CreateOwnSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| MoveCacheStorage&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 37&lt;br /&gt;
| DeviceTreeBlob&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 38&lt;br /&gt;
| NotifyErrorContextServiceReady&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 39&lt;br /&gt;
| CalibrationSystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 40&lt;br /&gt;
| CalibrationLog&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 41&lt;br /&gt;
| StorageSecure&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 42&lt;br /&gt;
| StorageControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 43&lt;br /&gt;
| GameCardReport&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 44&lt;br /&gt;
| MarkBeforeEraseBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 45-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]]. Ignored on non-DebugMode.&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set. Ignored on non-DebugMode.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the [[Filesystem_services#Permissions|filesystem permissions]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Size (length of the service-name without null-terminator minus 1)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| IsServer (service is allowed to be registered)&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to.&lt;br /&gt;
&lt;br /&gt;
The service name string starts after the first byte and supports the wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= KernelCapability =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| [[#ThreadInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| [[#EnableSystemCalls]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| [[#MemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| [[#IoMemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxx01111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit10&lt;br /&gt;
| [8.0.0+] [[#MemoryRegionMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| [[#EnableInterrupts]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| [[#MiscParams]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| [[#KernelVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| [[#HandleTableSize]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| [[#MiscFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
== ThreadInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| LowestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 10-15&lt;br /&gt;
| HighestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| MinCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| MaxCoreNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableSystemCalls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 5-28&lt;br /&gt;
| SystemCallId&lt;br /&gt;
|-&lt;br /&gt;
| 29-31&lt;br /&gt;
| Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryMap ==&lt;br /&gt;
MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-30&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| PermissionType (0=RW, 1=RO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-26&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 27-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| MappingType (0=Io, 1=Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== IoMemoryMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryRegionMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 11-16&lt;br /&gt;
| RegionType0 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RegionIsReadOnly0&lt;br /&gt;
|-&lt;br /&gt;
| 18-23&lt;br /&gt;
| RegionType1 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| RegionIsReadOnly1&lt;br /&gt;
|-&lt;br /&gt;
| 25-30&lt;br /&gt;
| RegionType2 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| RegionIsReadOnly2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableInterrupts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| InterruptNumber0&lt;br /&gt;
|-&lt;br /&gt;
| 22-31&lt;br /&gt;
| InterruptNumber1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
0x3FF means empty.&lt;br /&gt;
&lt;br /&gt;
== MiscParams ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 14-16&lt;br /&gt;
| ProgramType (0 = System, 1 = Application, 2 = Applet)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ProgramType is parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
&lt;br /&gt;
== KernelVersion ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15-18&lt;br /&gt;
| MinorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 19-31&lt;br /&gt;
| MajorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This encodes the intended kernel version for the program.&lt;br /&gt;
&lt;br /&gt;
The kernel requires that the intended version is &amp;gt;= the minimum supported version (3.0 for all released kernels), and &amp;lt;= the current version.&lt;br /&gt;
&lt;br /&gt;
Kernel version is derived from/equivalent to SDK version:&lt;br /&gt;
* Kernel Major = SDK Major + 4&lt;br /&gt;
* Kernel Minor = SDK Minor&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Corresponding SDK Version&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0 || 1.0.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1 || 2.1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3 || 5.3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0 || 14.4 || 10.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0 || 15.4 || 11.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1 || 15.4 || 11.4.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandleTableSize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MiscFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [19.0.0+] ForceDebugProd ([1.0.0-18.1.0] ForceDebug)&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| [19.0.0+] ForceDebug&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=14100</id>
		<title>SPL services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=14100"/>
		<updated>2025-11-12T01:37:57Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add note on valid key generations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SPL (&amp;quot;Secure Platform services&amp;quot;) is responsible for handling all cryptographic operations within the system and relaying them to the [[SMC|Secure Monitor]] when necessary.&lt;br /&gt;
&lt;br /&gt;
During [1.0.0-3.0.2], the only existing services were &amp;quot;csrng&amp;quot; and &amp;quot;spl:&amp;quot;. However, in [4.0.0+] the &amp;quot;spl:&amp;quot; service was refactored and split into new services with different permission levels. Each service exposes the IPC command list differently in order to prevent cryptographic operations to take place in the wrong context.&lt;br /&gt;
&lt;br /&gt;
In [2.0.0+] where previously only one AES keyslot was used, there is now support for 4 of them and when the session closes, all allocated AES keyslots are automatically freed.&lt;br /&gt;
&lt;br /&gt;
[S2] The spl services were overhauled. New services were added, this appears to replace spl:mig where required for the relevant sysmodules. GenerateAesKek is no longer directly exposed, thus the Kek AccessKey and KeySource are no longer exposed.&lt;br /&gt;
&lt;br /&gt;
= csrng =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IRandomInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenerateRandomBytes ==&lt;br /&gt;
Takes an output type-0xA buffer and fills it with random data from [[SMC#GenerateRandomBytes|GenerateRandomBytes SMC]]. Same command for &amp;quot;spl:&amp;quot; and &amp;quot;csrng&amp;quot; services, except for buffer-type.&lt;br /&gt;
&lt;br /&gt;
= spl: =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IGeneralInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Going by spl:ldn, this likely has a new interface on [S2]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetConfig|GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetConfigWithBuffer|GetConfigWithBuffer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetConfig ==&lt;br /&gt;
Wrapper for [[SMC#GetConfig|GetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039;. Returns one or more output u64s &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== ModularExponentiate ==&lt;br /&gt;
Wrapper for [[SMC#ModularExponentiate|ModularExponentiate SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039; and 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ExpIn&#039;&#039;&#039; and &#039;&#039;&#039;ModIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Performs asymmetric crypto with user supplied modulus and exponent.&lt;br /&gt;
&lt;br /&gt;
== Cmd2 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input, returns 0x10-bytes of output.&lt;br /&gt;
&lt;br /&gt;
This returns the first 0xD-bytes from [[#GetConfigWithBuffer|GetConfigWithBuffer]] ConfigItem 8, byteswapped.&lt;br /&gt;
&lt;br /&gt;
== Cmd3 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input. Returns unknown output, usually zeros?&lt;br /&gt;
&lt;br /&gt;
== Cmd4 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input. Returns unknown output, usually zeros?&lt;br /&gt;
&lt;br /&gt;
== GetConfigWithBuffer ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Some config is incomplete when accessed with [[#GetConfig|GetConfig]], this allows returning the full config.&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; and an output type-0xA buffer.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKek ==&lt;br /&gt;
Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== LoadAesKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039; , an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;KeySlot&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Now verifies that the keyslot in use (0..3) is allocated by the current spl session, otherwise errors with 0xD21A. Previously, keyslot was hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKey ==&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a new key by decrypting (AES-ECB) &#039;&#039;&#039;KeySource&#039;&#039;&#039; with a key generated from the supplied &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and the key set with [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Previously, it always used keyslot 0. Now it tries to allocate a keyslot to be used and returns 0xD01A if they&#039;re all busy. When the command is done, the keyslot is released.&lt;br /&gt;
&lt;br /&gt;
== SetConfig ==&lt;br /&gt;
Wrapper for [[SMC#SetConfig|SetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; and an input u64 &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Only &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; 13 (IsChargerHiZModeEnabled) can be set.&lt;br /&gt;
&lt;br /&gt;
== DecryptAndStoreGcKey ==&lt;br /&gt;
Wrapper for [[SMC#DecryptAndImportLotusKey|DecryptAndImportLotusKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== DecryptGcMessage ==&lt;br /&gt;
Takes 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Uses the [[SMC#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey SMC]] to decrypt &#039;&#039;&#039;DataIn&#039;&#039;&#039; using the private key imported with [[#DecryptAndStoreGcKey]] and the supplied &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IsDevelopment ==&lt;br /&gt;
No input. Returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
Uses [[#GetConfig]] internally.&lt;br /&gt;
&lt;br /&gt;
== GenerateSpecificAesKey ==&lt;br /&gt;
Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== DecryptDeviceUniqueData ==&lt;br /&gt;
Wrapper for [[SMC#DecryptDeviceUniqueData|DecryptDeviceUniqueData SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039;, an input type-0x9 &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Used by [[SSL_services|SSL]] for TLS client-privk.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed.&lt;br /&gt;
&lt;br /&gt;
== DecryptAesKey ==&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Decrypts (AES-ECB) &#039;&#039;&#039;KeySource&#039;&#039;&#039; with a key set with [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]].&lt;br /&gt;
&lt;br /&gt;
== ComputeCtr ==&lt;br /&gt;
Takes an output type-0x46 buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039;, an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;, an input type-0x45 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;IvCtr&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Uses [[SMC#ComputeAes|ComputeAes SMC]] to decrypt &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; using the key set in the specified &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated by the current session.&lt;br /&gt;
&lt;br /&gt;
== ComputeCmac ==&lt;br /&gt;
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;Cmac&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated by the current session.&lt;br /&gt;
&lt;br /&gt;
== LoadEsDeviceKey ==&lt;br /&gt;
Wrapper for [[SMC#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== PrepareEsTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039; and 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;DataOutSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes an input u32 &#039;&#039;&#039;Generation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; using the private key imported with [[#LoadEsDeviceKey]] and the supplied &#039;&#039;&#039;ModIn&#039;&#039;&#039;. Afterwards, verifies RSA-OAEP encoding using &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== LoadPreparedAesKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadPreparedAesKey|LoadPreparedAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated in the current session.&lt;br /&gt;
&lt;br /&gt;
== PrepareCommonEsTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#PrepareEsCommonKey|PrepareEsCommonKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes an input u32 &#039;&#039;&#039;Generation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== AllocateAesKeySlot ==&lt;br /&gt;
Returns an output u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns error 0xD01A if all keyslots are taken.&lt;br /&gt;
&lt;br /&gt;
== DeallocateAesKeySlot ==&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns error 0xD21A if the keyslot wasn&#039;t allocated by current session.&lt;br /&gt;
&lt;br /&gt;
== GetAesKeySlotAvailableEvent ==&lt;br /&gt;
Returns an output event handle for synchronizing with the AES keyslots.&lt;br /&gt;
&lt;br /&gt;
== SetBootReason ==&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;BootReason&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Returns 0xD41A if a value has been previously set without being [[#GetBootReason|gotten]].&lt;br /&gt;
&lt;br /&gt;
== GetBootReason ==&lt;br /&gt;
Returns an output u32 &#039;&#039;&#039;BootReason&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it.&lt;br /&gt;
&lt;br /&gt;
= spl:mig =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ICryptoInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:fs =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IFsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#DecryptAndStoreGcKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#DecryptGcMessage]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GenerateSpecificAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [5.0.0+] GetPackage2Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:ssl =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ISslInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [5.0.0+] DecryptAndStoreSslClientCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [5.0.0+] ModularExponentiateWithSslClientCertKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:es =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IEsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#LoadEsDeviceKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#PrepareEsTitleKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [2.0.0+] [[#PrepareCommonEsTitleKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [5.0.0+] DecryptAndStoreDrmDeviceCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [5.0.0+] ModularExponentiateWithDrmDeviceCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [6.0.0+] PrepareEsArchiveKey&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [6.0.0+] [[#LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [18.0.0+] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:manu =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IManuInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [5.0.0+] ReencryptDeviceUniqueData&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:da =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:gc =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:nv =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:hid =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:ldn =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ILdnInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This has IPC max_sessions 1?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetConfig|GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetConfigWithBuffer|GetConfigWithBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7000 || [[#GenerateNxAdvertiseKey|GenerateNxAdvertiseKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7001 || [[#GenerateNxSessionKey|GenerateNxSessionKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7002 || [[#GenerateNxLp2pKeyIndex1|GenerateNxLp2pKeyIndex1]]&lt;br /&gt;
|-&lt;br /&gt;
| 7003 || [[#GenerateNxLp2pKeyIndex2|GenerateNxLp2pKeyIndex2]]&lt;br /&gt;
|-&lt;br /&gt;
| 7004 || [[#GenerateOunceAdvertiseKey|GenerateOunceAdvertiseKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7005 || [[#GenerateOunceSessionKey|GenerateOunceSessionKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The below 7000+ cmds take a KeySource (equivalent to NX-GenerateAesKey) and an u32. Bitmask 0x1F of the u32 is the Generation, 0x20 is valid but doesn&#039;t seem to do anything. Values &amp;gt;=0x21 throw error. A 0x10-byte outbuf is used for the output key. Cmd7004/Cmd7005 use a 0x20-byte outbuf. These are equivalent to GenerateAesKek+GenerateAesKey combined.&lt;br /&gt;
&lt;br /&gt;
With Nx commands, valid key generations match what&#039;s expected for S1. With Ounce commands, the valid key generations on 20.x are 0/1.&lt;br /&gt;
&lt;br /&gt;
All of these use AES-ECB with the input KeySource, with the buffer as the output.&lt;br /&gt;
&lt;br /&gt;
== GenerateNxAdvertiseKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the ldn Kek-action_keysource. &lt;br /&gt;
&lt;br /&gt;
== GenerateNxSessionKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the ldn Kek-data_keysource.&lt;br /&gt;
&lt;br /&gt;
== GenerateNxLp2pKeyIndex1 ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the lp2p Kek-Index1. &lt;br /&gt;
&lt;br /&gt;
== GenerateNxLp2pKeyIndex2 ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the lp2p Kek-Index2.&lt;br /&gt;
&lt;br /&gt;
== GenerateOunceAdvertiseKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 32-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ounce version of [[#GenerateNxAdvertiseKey|GenerateNxAdvertiseKey]]. [[LDN_services|ldn]] only uses the first 0x10-bytes of the output key.&lt;br /&gt;
&lt;br /&gt;
== GenerateOunceSessionKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 32-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ounce version of [[#GenerateNxSessionKey|GenerateNxSessionKey]]. [[LDN_services|ldn]] only uses the first 0x10-bytes of the output key.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=21.0.0&amp;diff=14098</id>
		<title>21.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=21.0.0&amp;diff=14098"/>
		<updated>2025-11-12T01:05:30Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Fix some kernel diffs that were new in 20.1.0, not 21.0.0. I bindiff&amp;#039;d against 20.0.0, sorry :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 21.0.0 system update was released on November 11, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     Added symbols above software icons displayed on the HOME Menu to indicate whether the software is a physical or a digital version.&lt;br /&gt;
*     Added the ability to download data for a virtual game card even if the “Use Online License&amp;quot; setting is turned off. &lt;br /&gt;
*     &lt;br /&gt;
*       This option is available in the Options of a virtual game card when accessed via Virtual Game Cards from the HOME Menu.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The information regarding Save Data Cloud Backup that appears when launching certain software has been updated. &lt;br /&gt;
*     The option &amp;quot;Platinum Point Notification Settings” was renamed to &amp;quot;Nintendo Switch Online Notification Settings&amp;quot; in the Notifications menu in System Settings.&lt;br /&gt;
*     Added the ability to disable the following options when performing a system transfer from a Nintendo Switch system to a Nintendo Switch&amp;amp;nbsp;2 system using System Transfer to Nintendo Switch&amp;amp;nbsp;2 in System Settings. &lt;br /&gt;
*     &lt;br /&gt;
*       Redownload Software on Nintendo Switch&amp;amp;nbsp;2&lt;br /&gt;
*       Transfer Album Data&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     Added the ability to adjust the volume from the Quick Settings menu while in VR mode.&lt;br /&gt;
*     General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware, ClientCertData, GameCardConfigurationData.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, controller, dataErase, error, playerSelect, swkbd, miiEdit, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, splay.&lt;br /&gt;
&lt;br /&gt;
The [[NGCT_services|ngct]]-sysmodule is now stubbed, the ngct:u service was moved into [[NGC_services|ngc]].&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* Bus: KernelCap HandleTableSize: removed HandleTableSize=0x100.&lt;br /&gt;
* bcat: Service access: removed bsdcfg, npns:u.&lt;br /&gt;
* friends: Service access: removed bsdcfg.&lt;br /&gt;
* ptm: Service server access: added fgm:0, fgm, fgm:9, removed fgm*.&lt;br /&gt;
* capmtp: Service access: removed fsp-srv, lm.&lt;br /&gt;
* ns: Service access: removed htc.&lt;br /&gt;
* psc: Service server access: added psc:c, psc:l, psc:m, srepo:a, srepo:u, removed psc*, srepo:*.&lt;br /&gt;
* npns: Service access: removed time:u.&lt;br /&gt;
* eclct: Service access: removed npns:s, psc:m.&lt;br /&gt;
* sdb: Service access: removed set.&lt;br /&gt;
* migration: Service access: removed nim:shp.&lt;br /&gt;
* pgl: Service access: removed erpt:c, lm, set.&lt;br /&gt;
* ngc: Service server access: added ngct:u.&lt;br /&gt;
* LibAppletShop: Service access: added friend:m.&lt;br /&gt;
* overlayDisp: Service access: added mnpp:sys.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/effective_tld_names.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/icudt62l.dat.lz4&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/MediaControls.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControls.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/RootCaSdkAdditional.pem&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Browse/NodeMouse.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/Browse/TapHighlight.arc&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/core_0/default/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_0/Default/&amp;quot; added&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/default/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/Default/&amp;quot; added&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/0.txt&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* ControllerFirmware: &amp;quot;/FirmwareInfo.csv&amp;quot; updated, &amp;quot;/ukyosakyo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
* swkbd applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/swkbd_action.bksnd&amp;quot; updated&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletOff/LibAppletWeb/LibAppletShop/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
* splay applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/splay_action.bksnd&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::settings::IFirmwareDebugSettingsServer&lt;br /&gt;
** Added:      27 - buffer_entry_sizes: [0x141], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::settings::ISystemSettingsServer&lt;br /&gt;
** Added:     315 - buffer_entry_sizes: [0x141], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     319 - buffer_entry_sizes: [0x40], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     320 - buffer_entry_sizes: [0x40], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     321 - inbytes: 0x0, outbytes: 0x40&lt;br /&gt;
* Interface Changed: nn::pinmux::ISession&lt;br /&gt;
** Added:      11 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
** Added:     200 - buffer_entry_sizes: [0x194], buffers: [0x16], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
** Added:   10106 - buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:   10107 - buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:   20102 - buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20103 - buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710008741C&lt;br /&gt;
* Unknown Interface cur-version: 0x7100088640&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710008741C&#039;] -&amp;gt; [&#039;0x7100088640&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100088640&#039;])&lt;br /&gt;
* Interface Changed: nn::nifm::detail::IRequest&lt;br /&gt;
** Added:      26 - buffer_entry_sizes: [0x100], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      25 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::socket::sf::IClient&lt;br /&gt;
** Changed:    39 - outhandles: [1, 1] -&amp;gt; {} (final state: inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:      41 - inbytes: 0x4, outbytes: 0x8, outhandles: [1, 1, 1, 1, 1, 1]&lt;br /&gt;
** Added:      42 - buffers: [0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21], inbytes: 0x0, outbytes: 0x24&lt;br /&gt;
** Added:      43 - buffers: [0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22], inbytes: 0x10, outbytes: 0x24&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:      23 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     261 - inbytes: 0x40, outbytes: 0x0&lt;br /&gt;
** Added:     266 - buffer_entry_sizes: [0x4], buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     267 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:     268 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     700 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:     320 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, pid: True&lt;br /&gt;
** Added:     321 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:    3012 - buffer_entry_sizes: [0x80], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    3013 - buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    3014 - inbytes: 0x0, outbytes: 0x68&lt;br /&gt;
** Added:    3015 - inbytes: 0x68, outbytes: 0x0&lt;br /&gt;
** Added:    3150 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:    1323 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1324 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    1325 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1326 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioDevice&lt;br /&gt;
** Added:      21 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:      43 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Removed:     4 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:     5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055C0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      14 - buffers: [0x22], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Added:      15 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:     291 - buffer_entry_sizes: [0x1000], buffers: [0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:     291 - buffer_entry_sizes: [0x1000], buffers: [0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     428 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     429 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     430 - inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Added:     516 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     517 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     518 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     519 - inbytes: 0x4, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     934 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     935 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     936 - inbytes: 0x0, outbytes: 0x88&lt;br /&gt;
** Added:    2369 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:    4099 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IContentManagementInterface&lt;br /&gt;
** Added:     608 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
** Added:      29 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IECommerceInterface&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:      18 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:      19 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      20 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      22 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Changed: 10100 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
** Changed: 10101 - inbytes: 0x18 -&amp;gt; 0x20 (final state: buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:   50010 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationAccessor&lt;br /&gt;
** Added:     310 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Changed:    14 - ininterfaces: [None] -&amp;gt; [&#039;nn::am::service::IStorage&#039;] (final state: buffer_entry_sizes: [0x20], buffers: [0x15], inbytes: 0x8, ininterfaces: [&#039;nn::am::service::IStorage&#039;], outbytes: 0x0)&lt;br /&gt;
** Changed:   310 - inbytes: 0x1 -&amp;gt; 0x18 (final state: inbytes: 0x18, ininterfaces: [None], outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:     130 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     610 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    1003 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    1004 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1005 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Added:     150 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      70 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      71 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      75 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:      73 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslService&lt;br /&gt;
** Added:      10 - buffers: [0x6, 0x6], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Added:      10 - buffers: [0x6, 0x6], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:      92 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:     174 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     175 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     176 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     177 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Added:       5 - buffer_entry_sizes: [0x0, 0x0, 0x0, 0xC, 0x0, 0x0], buffers: [0x5, 0x5, 0x5, 0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Changed:     6 - buffer_entry_sizes: [0x4C8, 0x0] -&amp;gt; [0xC, 0x10, 0x0], buffers: [0x15, 0x5] -&amp;gt; [0x5, 0x5, 0x5] (final state: buffer_entry_sizes: [0xC, 0x10, 0x0], buffers: [0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:     7 - inbytes: 0x0 -&amp;gt; 0x10 (final state: inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::visrv::sf::IApplicationDisplayService&lt;br /&gt;
** Added:    2103 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    1021 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1022 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1456 - inbytes: 0x0, outbytes: 0x34&lt;br /&gt;
** Removed:  1951 - inbytes: 0x34, outbytes: 0x0&lt;br /&gt;
** Added:    2024 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Changed: 145601 - outbytes: 0x36 -&amp;gt; 0x44 (final state: inbytes: 0x0, outbytes: 0x44)&lt;br /&gt;
** Changed: 195101 - inbytes: 0x36 -&amp;gt; 0x44 (final state: inbytes: 0x44, outbytes: 0x0)&lt;br /&gt;
* Unknown Interface prev-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100099A00 [ID = 0xfe214da9]&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:     204 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IActiveRightsContext&lt;br /&gt;
** Added:      19 - buffer_entry_sizes: [0x20, 0x8], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Added:    1038 - buffer_entry_sizes: [0x8, 0x8], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    3001 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
** Added:      51 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fatalsrv::IService&lt;br /&gt;
** Added:       3 - inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IContinuousRecorder&lt;br /&gt;
** Removed:     1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710005EC90 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface cur-version: 0x710005FEB0 [ID = 0xef2a5618]&lt;br /&gt;
* Interface Changed: nn::pdm::detail::INotifyService&lt;br /&gt;
** Changed:   100 - outinterfaces: [&#039;0x710005EC90 [ID = 0xef2a5618]&#039;] -&amp;gt; [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;] (final state: inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;])&lt;br /&gt;
** Changed:   101 - outinterfaces: [&#039;0x710005EC90 [ID = 0xef2a5618]&#039;] -&amp;gt; [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;] (final state: inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;])&lt;br /&gt;
* Interface Changed: nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
** Removed:  1000 - buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** Removed:  1001 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Removed: nn::migration::detail::IAsyncSaveDataMigrationPolicyInfoContext&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140F78 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100127590 [ID = 0x29d8801c]&lt;br /&gt;
* Interface Changed: nn::migration::device::IDownloader&lt;br /&gt;
** Added:     390 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::device::IServer&lt;br /&gt;
** Removed:   120 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     121 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Removed:   510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     511 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::device::IUploader&lt;br /&gt;
** Removed:   100 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     101 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Removed:   610 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     611 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Removed:   221 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     222 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Added:     220 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Removed:   510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     511 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Removed:  1001 - inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncSaveDataMigrationPolicyInfoContext&#039;]&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x7100140F78 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100127590 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100127590 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x7100140F78 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100127590 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100127590 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Added:     206 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
** Added:     302 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:     300 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     301 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Added: nn::ngc::t::detail::IService&lt;br /&gt;
* Interface Changed: nn::ngc::detail::IService&lt;br /&gt;
** Added:       4 - buffers: [0x5], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:       5 - buffers: [0x6, 0x5], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_14 (previously master_key_13). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler was upgraded (to clang 18.1.0+).&lt;br /&gt;
** Besides the usual reordering, this is now most noticeable in the following:&lt;br /&gt;
*** Many atomic st(l)xrs now use cmp + csetm + tbz instead of cbnz.&lt;br /&gt;
**** Testing on godbolt indicates this seems to be a change made in clang 18.1.0+ (not present in 17.0.1).&lt;br /&gt;
*** Many cases where they previously did some_condition ? m_a : m_b now have different assembly.&lt;br /&gt;
**** Previously: add Xn, Xz, #A; add Xm, Xz, #B; csel Xn, Xn, Xm; ldr Xn, [Xn]&lt;br /&gt;
**** Now: mov Xn, #A; mov Xn, #B; csel Xn, Xn, Xm; ldr Xn, [Xz, Xn]&lt;br /&gt;
*** Many cases of booleans now explicitly test for 1 instead of &amp;lt;any non-zero value&amp;gt;&lt;br /&gt;
**** Previously: ldrb w8, [x8]; cbz w8, some_loc&lt;br /&gt;
**** Now: ldrb w8, [x8]; cmp w8, #1; b.ne some_loc&lt;br /&gt;
** Many, many cases of superfluous red-black-tree iteration prior to calls to KIntrusiveRedBlackTree::Remove have finally been optimized out.&lt;br /&gt;
*** Basically, KIntrusiveRedBlackTree::erase returns an iterator to the next item in the tree.&lt;br /&gt;
*** Previously, the table walk to find the next item was being performed even when the result was discarded/not-used, which was almost every case.&lt;br /&gt;
*** Now, it&#039;s successfully getting optimized out.&lt;br /&gt;
* KAutoObject&#039;s class token has been devirtualized.&lt;br /&gt;
** It is now stored as a 16-bit value in previously unused padding bytes, after the reference count.&lt;br /&gt;
** KAutoObject::Create() sets this to the correct value when setting refcount=1.&lt;br /&gt;
** This implementation is generally identical to the one already present in mesosphere.&lt;br /&gt;
* HandleFloatingPointException now sets a previously unused StackParameters flag (+0x2F) to 1.&lt;br /&gt;
** This flag doesn&#039;t seem to be referenced/used anywhere else in the kernel?&lt;br /&gt;
* KThread StackParameter exception_flags bitflags are now volatile and mostly atomic; many bits now use atomic read-modify-write loops to set and clear bits.&lt;br /&gt;
** This is not done for bit 0 (&amp;quot;is in svc&amp;quot;), accesses specifically for bit 0 continue to use non-atomic reads/writes.&lt;br /&gt;
** This generates pretty terrible assembly for GetThreadUserContext, which now must perform a volatile read of this value over and over in a loop.&lt;br /&gt;
* KIoRegion fields were reordered to save 8 bytes.&lt;br /&gt;
** The 8-byte size/alignment lock field is no longer wedged inbetween two 1-byte booleans.&lt;br /&gt;
* KScheduler::SwitchThread now writes a tick differential (thread-&amp;gt;GetCpuTime() - context_switch_time) to user-tls + 0x108.&lt;br /&gt;
** NOTE: This is an ABI change which will not affect official software, but will force any homebrew software which uses TLS-slots to need re-compile.&lt;br /&gt;
* UserspaceAccess::CopyMemoryToUserSize32Bit now takes in a 32-bit word to write, instead of a kernel-pointer-to-32-bit-word.&lt;br /&gt;
* Nintendo appears to have done something akin to marking nn::Result nodiscard + gone through and fixed literally every instance of Result return values not being used.&lt;br /&gt;
** This results in sweeping changes (many Result-return functions are now void return, many new kernel panics, some changed behaviors), including e,g,&lt;br /&gt;
** KInterruptManager::ClearInterrupt no longer checks if a handler has been registered, and always clear the table entry.&lt;br /&gt;
** KInterruptManager::UnbindHandler is now void-return instead of Result; it no longer checks if the handler has been registered, and unconditionally clears to unbound state.&lt;br /&gt;
** KPageTableBase::InitializeForKernel now returns void, and panics if the KMemoryBlockManager::Initialize fails.&lt;br /&gt;
** KDebugBase::OnExitProcess/OnTerminateProcess now return void instead of Result.&lt;br /&gt;
** KEvent/KReadableEvent::Signal/Clear now return void instead of Result; svc::ClearEvent/SignalEvent now just calls the relevant function and returns ResultSuccess.&lt;br /&gt;
** KThreadLocalPage::Finalize now returns void + kernel-panics if unmapping the page fails; KProcess::DeleteThreadLocalRegion now returns void instead of Result.&lt;br /&gt;
** Every kernel-use of KInterruptManager::BindHandler now panics on failure.&lt;br /&gt;
** Every kernel-use of cpu::StoreDataCache and cpu::FlushDataCache and cpu::InvalidateDataCache now panics on failure.&lt;br /&gt;
** Every kernel-use of KThread::Initialize now panics on failure&lt;br /&gt;
** Every kernel-use of KThread::Run now panics on failure.&lt;br /&gt;
** The kernel-use of KDynamicSlabHeapPageAllocator::Initialize in resource manager init now panics on failure&lt;br /&gt;
** There are more cases, too many to fully enumerate with high confidence.&lt;br /&gt;
&lt;br /&gt;
=== [[LDN_services|ldn]] ===&lt;br /&gt;
A vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-11-11_03-15-07&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=14097</id>
		<title>SPL services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=14097"/>
		<updated>2025-11-12T00:57:37Z</updated>

		<summary type="html">&lt;p&gt;SciresM: add some spl:ldn cmd details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SPL (&amp;quot;Secure Platform services&amp;quot;) is responsible for handling all cryptographic operations within the system and relaying them to the [[SMC|Secure Monitor]] when necessary.&lt;br /&gt;
&lt;br /&gt;
During [1.0.0-3.0.2], the only existing services were &amp;quot;csrng&amp;quot; and &amp;quot;spl:&amp;quot;. However, in [4.0.0+] the &amp;quot;spl:&amp;quot; service was refactored and split into new services with different permission levels. Each service exposes the IPC command list differently in order to prevent cryptographic operations to take place in the wrong context.&lt;br /&gt;
&lt;br /&gt;
In [2.0.0+] where previously only one AES keyslot was used, there is now support for 4 of them and when the session closes, all allocated AES keyslots are automatically freed.&lt;br /&gt;
&lt;br /&gt;
[S2] The spl services were overhauled. New services were added, this appears to replace spl:mig where required for the relevant sysmodules. GenerateAesKek is no longer directly exposed, thus the Kek AccessKey and KeySource are no longer exposed.&lt;br /&gt;
&lt;br /&gt;
= csrng =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IRandomInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GenerateRandomBytes ==&lt;br /&gt;
Takes an output type-0xA buffer and fills it with random data from [[SMC#GenerateRandomBytes|GenerateRandomBytes SMC]]. Same command for &amp;quot;spl:&amp;quot; and &amp;quot;csrng&amp;quot; services, except for buffer-type.&lt;br /&gt;
&lt;br /&gt;
= spl: =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IGeneralInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Going by spl:ldn, this likely has a new interface on [S2]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetConfig|GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetConfigWithBuffer|GetConfigWithBuffer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetConfig ==&lt;br /&gt;
Wrapper for [[SMC#GetConfig|GetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039;. Returns one or more output u64s &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== ModularExponentiate ==&lt;br /&gt;
Wrapper for [[SMC#ModularExponentiate|ModularExponentiate SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039; and 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ExpIn&#039;&#039;&#039; and &#039;&#039;&#039;ModIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Performs asymmetric crypto with user supplied modulus and exponent.&lt;br /&gt;
&lt;br /&gt;
== Cmd2 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input, returns 0x10-bytes of output.&lt;br /&gt;
&lt;br /&gt;
This returns the first 0xD-bytes from [[#GetConfigWithBuffer|GetConfigWithBuffer]] ConfigItem 8, byteswapped.&lt;br /&gt;
&lt;br /&gt;
== Cmd3 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input. Returns unknown output, usually zeros?&lt;br /&gt;
&lt;br /&gt;
== Cmd4 ==&lt;br /&gt;
This is for the [S2] interface.&lt;br /&gt;
&lt;br /&gt;
Takes no input. Returns unknown output, usually zeros?&lt;br /&gt;
&lt;br /&gt;
== GetConfigWithBuffer ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Some config is incomplete when accessed with [[#GetConfig|GetConfig]], this allows returning the full config.&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; and an output type-0xA buffer.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKek ==&lt;br /&gt;
Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== LoadAesKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039; , an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;KeySlot&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Now verifies that the keyslot in use (0..3) is allocated by the current spl session, otherwise errors with 0xD21A. Previously, keyslot was hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKey ==&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a new key by decrypting (AES-ECB) &#039;&#039;&#039;KeySource&#039;&#039;&#039; with a key generated from the supplied &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and the key set with [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Previously, it always used keyslot 0. Now it tries to allocate a keyslot to be used and returns 0xD01A if they&#039;re all busy. When the command is done, the keyslot is released.&lt;br /&gt;
&lt;br /&gt;
== SetConfig ==&lt;br /&gt;
Wrapper for [[SMC#SetConfig|SetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; and an input u64 &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Only &#039;&#039;&#039;ConfigItem&#039;&#039;&#039; 13 (IsChargerHiZModeEnabled) can be set.&lt;br /&gt;
&lt;br /&gt;
== DecryptAndStoreGcKey ==&lt;br /&gt;
Wrapper for [[SMC#DecryptAndImportLotusKey|DecryptAndImportLotusKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== DecryptGcMessage ==&lt;br /&gt;
Takes 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Uses the [[SMC#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey SMC]] to decrypt &#039;&#039;&#039;DataIn&#039;&#039;&#039; using the private key imported with [[#DecryptAndStoreGcKey]] and the supplied &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IsDevelopment ==&lt;br /&gt;
No input. Returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
Uses [[#GetConfig]] internally.&lt;br /&gt;
&lt;br /&gt;
== GenerateSpecificAesKey ==&lt;br /&gt;
Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== DecryptDeviceUniqueData ==&lt;br /&gt;
Wrapper for [[SMC#DecryptDeviceUniqueData|DecryptDeviceUniqueData SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039;, an input type-0x9 &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Used by [[SSL_services|SSL]] for TLS client-privk.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed.&lt;br /&gt;
&lt;br /&gt;
== DecryptAesKey ==&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and two input u32s &#039;&#039;&#039;Generation&#039;&#039;&#039; and &#039;&#039;&#039;Option&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Decrypts (AES-ECB) &#039;&#039;&#039;KeySource&#039;&#039;&#039; with a key set with [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Introduced same keyslot allocation code as for [[#GenerateAesKey]].&lt;br /&gt;
&lt;br /&gt;
== ComputeCtr ==&lt;br /&gt;
Takes an output type-0x46 buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039;, an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;, an input type-0x45 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;IvCtr&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Uses [[SMC#ComputeAes|ComputeAes SMC]] to decrypt &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; using the key set in the specified &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated by the current session.&lt;br /&gt;
&lt;br /&gt;
== ComputeCmac ==&lt;br /&gt;
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;Cmac&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated by the current session.&lt;br /&gt;
&lt;br /&gt;
== LoadEsDeviceKey ==&lt;br /&gt;
Wrapper for [[SMC#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input type-0x9 buffer &#039;&#039;&#039;DataIn&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;, an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039; and an input u32 &#039;&#039;&#039;Version&#039;&#039;&#039; (0 for normal keys or 1 for extended keys).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;AccessKey&#039;&#039;&#039; and &#039;&#039;&#039;KeySource&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] The &#039;&#039;&#039;Version&#039;&#039;&#039; argument was removed and this now calls the [[SMC#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== PrepareEsTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an output type-0xA buffer &#039;&#039;&#039;DataOut&#039;&#039;&#039; and 3 input type-0x9 buffers &#039;&#039;&#039;DataIn&#039;&#039;&#039;, &#039;&#039;&#039;ModIn&#039;&#039;&#039; and &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;. Returns an output u32 &#039;&#039;&#039;DataOutSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes an input u32 &#039;&#039;&#039;Generation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;DataIn&#039;&#039;&#039; into &#039;&#039;&#039;DataOut&#039;&#039;&#039; using the private key imported with [[#LoadEsDeviceKey]] and the supplied &#039;&#039;&#039;ModIn&#039;&#039;&#039;. Afterwards, verifies RSA-OAEP encoding using &#039;&#039;&#039;LabelHashIn&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== LoadPreparedAesKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadPreparedAesKey|LoadPreparedAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039; and an input 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the keyslot was allocated in the current session.&lt;br /&gt;
&lt;br /&gt;
== PrepareCommonEsTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#PrepareEsCommonKey|PrepareEsCommonKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;. Returns an output 16-byte &#039;&#039;&#039;AccessKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes an input u32 &#039;&#039;&#039;Generation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== AllocateAesKeySlot ==&lt;br /&gt;
Returns an output u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns error 0xD01A if all keyslots are taken.&lt;br /&gt;
&lt;br /&gt;
== DeallocateAesKeySlot ==&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;KeySlot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns error 0xD21A if the keyslot wasn&#039;t allocated by current session.&lt;br /&gt;
&lt;br /&gt;
== GetAesKeySlotAvailableEvent ==&lt;br /&gt;
Returns an output event handle for synchronizing with the AES keyslots.&lt;br /&gt;
&lt;br /&gt;
== SetBootReason ==&lt;br /&gt;
Takes an input u32 &#039;&#039;&#039;BootReason&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Returns 0xD41A if a value has been previously set without being [[#GetBootReason|gotten]].&lt;br /&gt;
&lt;br /&gt;
== GetBootReason ==&lt;br /&gt;
Returns an output u32 &#039;&#039;&#039;BootReason&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Returns 0xD61A if a value has not previously been set and unsets the value after getting it.&lt;br /&gt;
&lt;br /&gt;
= spl:mig =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ICryptoInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:fs =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IFsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#DecryptAndStoreGcKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#DecryptGcMessage]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GenerateSpecificAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [5.0.0+] GetPackage2Hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:ssl =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ISslInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [5.0.0+] DecryptAndStoreSslClientCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [5.0.0+] ModularExponentiateWithSslClientCertKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:es =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IEsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#LoadEsDeviceKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#PrepareEsTitleKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [2.0.0+] [[#PrepareCommonEsTitleKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [5.0.0+] DecryptAndStoreDrmDeviceCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [5.0.0+] ModularExponentiateWithDrmDeviceCertKey&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [6.0.0+] PrepareEsArchiveKey&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [6.0.0+] [[#LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 33 || [18.0.0+] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= spl:manu =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IManuInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ModularExponentiate]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetBootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#ComputeCtr]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#AllocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#DeallocateAesKeySlot]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetAesKeySlotAvailableEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [5.0.0+] ReencryptDeviceUniqueData&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:da =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:gc =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:nv =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:hid =&lt;br /&gt;
&lt;br /&gt;
= (S2) spl:ldn =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::ILdnInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This has IPC max_sessions 1?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GenerateRandomBytes|GenerateRandomBytes]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetConfig|GetConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetConfigWithBuffer|GetConfigWithBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7000 || [[#GenerateNxAdvertiseKey|GenerateNxAdvertiseKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7001 || [[#GenerateNxSessionKey|GenerateNxSessionKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7002 || [[#GenerateNxLp2pKeyIndex1|GenerateNxLp2pKeyIndex1]]&lt;br /&gt;
|-&lt;br /&gt;
| 7003 || [[#GenerateNxLp2pKeyIndex2|GenerateNxLp2pKeyIndex2]]&lt;br /&gt;
|-&lt;br /&gt;
| 7004 || [[#GenerateOunceAdvertiseKey|GenerateOunceAdvertiseKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 7005 || [[#GenerateOunceSessionKey|GenerateOunceSessionKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The below 7000+ cmds take a KeySource (equivalent to NX-GenerateAesKey) and an u32. Bitmask 0x1F of the u32 is the Generation, 0x20 is valid but doesn&#039;t seem to do anything. Values &amp;gt;=0x21 throw error. A 0x10-byte outbuf is used for the output key. Cmd7004/Cmd7005 use a 0x20-byte outbuf. These are equivalent to GenerateAesKek+GenerateAesKey combined.&lt;br /&gt;
&lt;br /&gt;
All of these use AES-ECB with the input KeySource, with the buffer as the output.&lt;br /&gt;
&lt;br /&gt;
== GenerateNxAdvertiseKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the ldn Kek-action_keysource. &lt;br /&gt;
&lt;br /&gt;
== GenerateNxSessionKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the ldn Kek-data_keysource.&lt;br /&gt;
&lt;br /&gt;
== GenerateNxLp2pKeyIndex1 ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the lp2p Kek-Index1. &lt;br /&gt;
&lt;br /&gt;
== GenerateNxLp2pKeyIndex2 ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 16-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates a key using the NX-equivalent of the lp2p Kek-Index2.&lt;br /&gt;
&lt;br /&gt;
== GenerateOunceAdvertiseKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 32-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ounce version of [[#GenerateNxAdvertiseKey|GenerateNxAdvertiseKey]]. [[LDN_services|ldn]] only uses the first 0x10-bytes of the output key.&lt;br /&gt;
&lt;br /&gt;
== GenerateOunceSessionKey ==&lt;br /&gt;
Unofficial name.&lt;br /&gt;
&lt;br /&gt;
Takes an input 32-byte &#039;&#039;&#039;KeySource&#039;&#039;&#039;, an input u32, and an output type-0xA buffer &#039;&#039;&#039;AesKey&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ounce version of [[#GenerateNxSessionKey|GenerateNxSessionKey]]. [[LDN_services|ldn]] only uses the first 0x10-bytes of the output key.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=21.0.0&amp;diff=14034</id>
		<title>21.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=21.0.0&amp;diff=14034"/>
		<updated>2025-11-11T17:42:37Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add 20 -&amp;gt; 21 kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 21.0.0 system update was released on November 11, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     Added symbols above software icons displayed on the HOME Menu to indicate whether the software is a physical or a digital version.&lt;br /&gt;
*     Added the ability to download data for a virtual game card even if the “Use Online License&amp;quot; setting is turned off. &lt;br /&gt;
*     &lt;br /&gt;
*       This option is available in the Options of a virtual game card when accessed via Virtual Game Cards from the HOME Menu.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The information regarding Save Data Cloud Backup that appears when launching certain software has been updated. &lt;br /&gt;
*     The option &amp;quot;Platinum Point Notification Settings” was renamed to &amp;quot;Nintendo Switch Online Notification Settings&amp;quot; in the Notifications menu in System Settings.&lt;br /&gt;
*     Added the ability to disable the following options when performing a system transfer from a Nintendo Switch system to a Nintendo Switch&amp;amp;nbsp;2 system using System Transfer to Nintendo Switch&amp;amp;nbsp;2 in System Settings. &lt;br /&gt;
*     &lt;br /&gt;
*       Redownload Software on Nintendo Switch&amp;amp;nbsp;2&lt;br /&gt;
*       Transfer Album Data&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     Added the ability to adjust the volume from the Quick Settings menu while in VR mode.&lt;br /&gt;
*     General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware, ClientCertData, GameCardConfigurationData.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, controller, dataErase, error, playerSelect, swkbd, miiEdit, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, splay.&lt;br /&gt;
&lt;br /&gt;
The [[NGCT_services|ngct]]-sysmodule is now stubbed, the ngct:u service was moved into [[NGC_services|ngc]].&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* Bus: KernelCap HandleTableSize: removed HandleTableSize=0x100.&lt;br /&gt;
* bcat: Service access: removed bsdcfg, npns:u.&lt;br /&gt;
* friends: Service access: removed bsdcfg.&lt;br /&gt;
* ptm: Service server access: added fgm:0, fgm, fgm:9, removed fgm*.&lt;br /&gt;
* capmtp: Service access: removed fsp-srv, lm.&lt;br /&gt;
* ns: Service access: removed htc.&lt;br /&gt;
* psc: Service server access: added psc:c, psc:l, psc:m, srepo:a, srepo:u, removed psc*, srepo:*.&lt;br /&gt;
* npns: Service access: removed time:u.&lt;br /&gt;
* eclct: Service access: removed npns:s, psc:m.&lt;br /&gt;
* sdb: Service access: removed set.&lt;br /&gt;
* migration: Service access: removed nim:shp.&lt;br /&gt;
* pgl: Service access: removed erpt:c, lm, set.&lt;br /&gt;
* ngc: Service server access: added ngct:u.&lt;br /&gt;
* LibAppletShop: Service access: added friend:m.&lt;br /&gt;
* overlayDisp: Service access: added mnpp:sys.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/effective_tld_names.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/icudt62l.dat.lz4&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/MediaControls.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControls.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/RootCaSdkAdditional.pem&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Browse/NodeMouse.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/Browse/TapHighlight.arc&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/core_0/default/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_0/Default/&amp;quot; added&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/default/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/Default/&amp;quot; added&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/0.txt&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* ControllerFirmware: &amp;quot;/FirmwareInfo.csv&amp;quot; updated, &amp;quot;/ukyosakyo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
* swkbd applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/swkbd_action.bksnd&amp;quot; updated&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletOff/LibAppletWeb/LibAppletShop/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
* splay applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/splay_action.bksnd&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::settings::IFirmwareDebugSettingsServer&lt;br /&gt;
** Added:      27 - buffer_entry_sizes: [0x141], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::settings::ISystemSettingsServer&lt;br /&gt;
** Added:     315 - buffer_entry_sizes: [0x141], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     319 - buffer_entry_sizes: [0x40], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     320 - buffer_entry_sizes: [0x40], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     321 - inbytes: 0x0, outbytes: 0x40&lt;br /&gt;
* Interface Changed: nn::pinmux::ISession&lt;br /&gt;
** Added:      11 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
** Added:     200 - buffer_entry_sizes: [0x194], buffers: [0x16], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
** Added:   10106 - buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:   10107 - buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:   20102 - buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20103 - buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710008741C&lt;br /&gt;
* Unknown Interface cur-version: 0x7100088640&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710008741C&#039;] -&amp;gt; [&#039;0x7100088640&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100088640&#039;])&lt;br /&gt;
* Interface Changed: nn::nifm::detail::IRequest&lt;br /&gt;
** Added:      26 - buffer_entry_sizes: [0x100], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      25 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::socket::sf::IClient&lt;br /&gt;
** Changed:    39 - outhandles: [1, 1] -&amp;gt; {} (final state: inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:      41 - inbytes: 0x4, outbytes: 0x8, outhandles: [1, 1, 1, 1, 1, 1]&lt;br /&gt;
** Added:      42 - buffers: [0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21], inbytes: 0x0, outbytes: 0x24&lt;br /&gt;
** Added:      43 - buffers: [0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22], inbytes: 0x10, outbytes: 0x24&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:      23 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     261 - inbytes: 0x40, outbytes: 0x0&lt;br /&gt;
** Added:     266 - buffer_entry_sizes: [0x4], buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     267 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:     268 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     700 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:     320 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, pid: True&lt;br /&gt;
** Added:     321 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:    3012 - buffer_entry_sizes: [0x80], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    3013 - buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    3014 - inbytes: 0x0, outbytes: 0x68&lt;br /&gt;
** Added:    3015 - inbytes: 0x68, outbytes: 0x0&lt;br /&gt;
** Added:    3150 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:    1323 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1324 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    1325 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1326 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioDevice&lt;br /&gt;
** Added:      21 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:      43 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Removed:     4 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:     5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055C0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      14 - buffers: [0x22], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Added:      15 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:     291 - buffer_entry_sizes: [0x1000], buffers: [0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:     291 - buffer_entry_sizes: [0x1000], buffers: [0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     428 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     429 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     430 - inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Added:     516 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     517 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     518 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     519 - inbytes: 0x4, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     934 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     935 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     936 - inbytes: 0x0, outbytes: 0x88&lt;br /&gt;
** Added:    2369 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:    4099 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IContentManagementInterface&lt;br /&gt;
** Added:     608 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
** Added:      29 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IECommerceInterface&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:      18 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:      19 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      20 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
** Added:      22 - buffers: [0x6], inbytes: 0x10, outbytes: 0xC&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Changed: 10100 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
** Changed: 10101 - inbytes: 0x18 -&amp;gt; 0x20 (final state: buffers: [0x9, 0x5], inbytes: 0x20, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:   50010 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationAccessor&lt;br /&gt;
** Added:     310 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Changed:    14 - ininterfaces: [None] -&amp;gt; [&#039;nn::am::service::IStorage&#039;] (final state: buffer_entry_sizes: [0x20], buffers: [0x15], inbytes: 0x8, ininterfaces: [&#039;nn::am::service::IStorage&#039;], outbytes: 0x0)&lt;br /&gt;
** Changed:   310 - inbytes: 0x1 -&amp;gt; 0x18 (final state: inbytes: 0x18, ininterfaces: [None], outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:     130 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     610 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    1003 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    1004 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1005 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Added:     150 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      70 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      71 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      75 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:      73 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslService&lt;br /&gt;
** Added:      10 - buffers: [0x6, 0x6], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Added:      10 - buffers: [0x6, 0x6], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:      92 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:     174 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     175 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     176 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     177 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Added:       5 - buffer_entry_sizes: [0x0, 0x0, 0x0, 0xC, 0x0, 0x0], buffers: [0x5, 0x5, 0x5, 0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Changed:     6 - buffer_entry_sizes: [0x4C8, 0x0] -&amp;gt; [0xC, 0x10, 0x0], buffers: [0x15, 0x5] -&amp;gt; [0x5, 0x5, 0x5] (final state: buffer_entry_sizes: [0xC, 0x10, 0x0], buffers: [0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:     7 - inbytes: 0x0 -&amp;gt; 0x10 (final state: inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::visrv::sf::IApplicationDisplayService&lt;br /&gt;
** Added:    2103 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    1021 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1022 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1456 - inbytes: 0x0, outbytes: 0x34&lt;br /&gt;
** Removed:  1951 - inbytes: 0x34, outbytes: 0x0&lt;br /&gt;
** Added:    2024 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Changed: 145601 - outbytes: 0x36 -&amp;gt; 0x44 (final state: inbytes: 0x0, outbytes: 0x44)&lt;br /&gt;
** Changed: 195101 - inbytes: 0x36 -&amp;gt; 0x44 (final state: inbytes: 0x44, outbytes: 0x0)&lt;br /&gt;
* Unknown Interface prev-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100099A00 [ID = 0xfe214da9]&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:     204 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IActiveRightsContext&lt;br /&gt;
** Added:      19 - buffer_entry_sizes: [0x20, 0x8], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Added:    1038 - buffer_entry_sizes: [0x8, 0x8], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    3001 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
** Added:      51 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fatalsrv::IService&lt;br /&gt;
** Added:       3 - inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IContinuousRecorder&lt;br /&gt;
** Removed:     1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710005EC90 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface cur-version: 0x710005FEB0 [ID = 0xef2a5618]&lt;br /&gt;
* Interface Changed: nn::pdm::detail::INotifyService&lt;br /&gt;
** Changed:   100 - outinterfaces: [&#039;0x710005EC90 [ID = 0xef2a5618]&#039;] -&amp;gt; [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;] (final state: inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;])&lt;br /&gt;
** Changed:   101 - outinterfaces: [&#039;0x710005EC90 [ID = 0xef2a5618]&#039;] -&amp;gt; [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;] (final state: inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005FEB0 [ID = 0xef2a5618]&#039;])&lt;br /&gt;
* Interface Changed: nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
** Removed:  1000 - buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** Removed:  1001 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Removed: nn::migration::detail::IAsyncSaveDataMigrationPolicyInfoContext&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140F78 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100127590 [ID = 0x29d8801c]&lt;br /&gt;
* Interface Changed: nn::migration::device::IDownloader&lt;br /&gt;
** Added:     390 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::device::IServer&lt;br /&gt;
** Removed:   120 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     121 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Removed:   510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     511 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::device::IUploader&lt;br /&gt;
** Removed:   100 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     101 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Removed:   610 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     611 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Removed:   221 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     222 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Added:     220 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Removed:   510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     511 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Removed:  1001 - inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncSaveDataMigrationPolicyInfoContext&#039;]&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x7100140F78 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100127590 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100127590 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x7100140F78 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100127590 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100127590 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Added:     206 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
** Added:     302 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:     300 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     301 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Added: nn::ngc::t::detail::IService&lt;br /&gt;
* Interface Changed: nn::ngc::detail::IService&lt;br /&gt;
** Added:       4 - buffers: [0x5], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:       5 - buffers: [0x6, 0x5], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_14 (previously master_key_13). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler was upgraded (to clang 18.1.0+).&lt;br /&gt;
** Besides the usual reordering, this is now most noticeable in the following:&lt;br /&gt;
*** Many atomic st(l)xrs now use cmp + csetm + tbz instead of cbnz.&lt;br /&gt;
**** Testing on godbolt indicates this seems to be a change made in clang 18.1.0+ (not present in 17.0.1).&lt;br /&gt;
*** Many cases where they previously did some_condition ? m_a : m_b now have different assembly.&lt;br /&gt;
**** Previously: add Xn, Xz, #A; add Xm, Xz, #B; csel Xn, Xn, Xm; ldr Xn, [Xn]&lt;br /&gt;
**** Now: mov Xn, #A; mov Xn, #B; csel Xn, Xn, Xm; ldr Xn, [Xz, Xn]&lt;br /&gt;
*** Many cases of booleans now explicitly test for 1 instead of &amp;lt;any non-zero value&amp;gt;&lt;br /&gt;
**** Previously: ldrb w8, [x8]; cbz w8, some_loc&lt;br /&gt;
**** Now: ldrb w8, [x8]; cmp w8, #1; b.ne some_loc&lt;br /&gt;
** Many, many cases of superfluous red-black-tree iteration prior to calls to KIntrusiveRedBlackTree::Remove have finally been optimized out.&lt;br /&gt;
*** Basically, KIntrusiveRedBlackTree::erase returns an iterator to the next item in the tree.&lt;br /&gt;
*** Previously, the table walk to find the next item was being performed even when the result was discarded/not-used, which was almost every case.&lt;br /&gt;
*** Now, it&#039;s successfully getting optimized out.&lt;br /&gt;
* KAutoObject&#039;s class token has been devirtualized.&lt;br /&gt;
** It is now stored as a 16-bit value in previously unused padding bytes, after the reference count.&lt;br /&gt;
** KAutoObject::Create() sets this to the correct value when setting refcount=1.&lt;br /&gt;
** This implementation is generally identical to the one already present in mesosphere.&lt;br /&gt;
* HandleFloatingPointException now sets a previously unused StackParameters flag (+0x2F) to 1.&lt;br /&gt;
** This flag doesn&#039;t seem to be referenced/used anywhere else in the kernel?&lt;br /&gt;
* KInterruptManager/Controller was changed:&lt;br /&gt;
** KInterruptController::LocalState now stores the private spendsgir, which is also now saved/restored by KInterruptController::SaveLocalState/RestoreLocalState&lt;br /&gt;
** KSleepManager now spins for 100 microseconds before calling KInterruptManager::Save, after synchronizing all cores.&lt;br /&gt;
* cpu::DoCoreInterruptBarrier now uses a global KLightLock; this prevents more than one thread from performing an interrupt barrier at the same time.&lt;br /&gt;
* KThread StackParameter exception_flags bitflags are now volatile and mostly atomic; many bits now use atomic read-modify-write loops to set and clear bits.&lt;br /&gt;
** This is not done for bit 0 (&amp;quot;is in svc&amp;quot;), accesses specifically for bit 0 continue to use non-atomic reads/writes.&lt;br /&gt;
** This generates pretty terrible assembly for GetThreadUserContext, which now must perform a volatile read of this value over and over in a loop.&lt;br /&gt;
* KIoRegion fields were reordered to save 8 bytes.&lt;br /&gt;
** The 8-byte size/alignment lock field is no longer wedged inbetween two 1-byte booleans.&lt;br /&gt;
* KScheduler::SwitchThread now writes a tick differential (thread-&amp;gt;GetCpuTime() - context_switch_time) to user-tls + 0x108.&lt;br /&gt;
** NOTE: This is an ABI change which will not affect official software, but will force any homebrew software which uses TLS-slots to need re-compile.&lt;br /&gt;
* UserspaceAccess::CopyMemoryToUserSize32Bit now takes in a 32-bit word to write, instead of a kernel-pointer-to-32-bit-word.&lt;br /&gt;
* Nintendo appears to have done something akin to marking nn::Result nodiscard + gone through and fixed literally every instance of Result return values not being used.&lt;br /&gt;
** This results in sweeping changes (many Result-return functions are now void return, many new kernel panics, some changed behaviors), including e,g,&lt;br /&gt;
** KInterruptManager::ClearInterrupt no longer checks if a handler has been registered, and always clear the table entry.&lt;br /&gt;
** KInterruptManager::UnbindHandler is now void-return instead of Result; it no longer checks if the handler has been registered, and unconditionally clears to unbound state.&lt;br /&gt;
** KPageTableBase::InitializeForKernel now returns void, and panics if the KMemoryBlockManager::Initialize fails.&lt;br /&gt;
** KDebugBase::OnExitProcess/OnTerminateProcess now return void instead of Result.&lt;br /&gt;
** KEvent/KReadableEvent::Signal/Clear now return void instead of Result; svc::ClearEvent/SignalEvent now just calls the relevant function and returns ResultSuccess.&lt;br /&gt;
** KThreadLocalPage::Finalize now returns void + kernel-panics if unmapping the page fails; KProcess::DeleteThreadLocalRegion now returns void instead of Result.&lt;br /&gt;
** Every kernel-use of KInterruptManager::BindHandler now panics on failure.&lt;br /&gt;
** Every kernel-use of cpu::StoreDataCache and cpu::FlushDataCache and cpu::InvalidateDataCache now panics on failure.&lt;br /&gt;
** Every kernel-use of KThread::Initialize now panics on failure&lt;br /&gt;
** Every kernel-use of KThread::Run now panics on failure.&lt;br /&gt;
** The kernel-use of KDynamicSlabHeapPageAllocator::Initialize in resource manager init now panics on failure&lt;br /&gt;
** There are more cases, too many to fully enumerate with high confidence.&lt;br /&gt;
&lt;br /&gt;
=== [[LDN_services|ldn]] ===&lt;br /&gt;
A vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-11-11_03-15-07&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=13747</id>
		<title>System Version Title</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=13747"/>
		<updated>2025-08-11T07:14:20Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Retail */ add ounce 19.0.0, it has &amp;quot;/digest&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the system data archive with ProgramId 0100000000000809. It contains the files &amp;quot;/file&amp;quot; and, with [5.0.0+], &amp;quot;/digest&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With [S2] &amp;quot;/digest&amp;quot; was removed. Besides different platform strings, on [S2] this is identical besides the version hash.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Major&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Minor&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Micro&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| Revision Major&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| Revision Minor&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| Platform string (&amp;quot;NX&amp;quot; with zeros afterwards, &amp;quot;Ounce&amp;quot; with [S2])&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x40&lt;br /&gt;
| Version hash (Hex ASCII string). 0x28-bytes(not including NUL-terminator) normally with zeros afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x18&lt;br /&gt;
| Display version (System-version in string form with zeros afterwards, e.g. &amp;quot;2.1.0&amp;quot;). This is what is displayed in System settings.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| Display title (System version in longform, e.g. &amp;quot;NintendoSDK Firmware for NX 2.0.0-15&amp;quot;). This is what is displayed in DevMenu.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Known Versions =&lt;br /&gt;
== NX ==&lt;br /&gt;
=== Retail ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! &amp;quot;/digest&amp;quot; contents&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-15&lt;br /&gt;
| 84b8da475a02261c456e6472b403b31416480165&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-15&lt;br /&gt;
| 25233e518f580062b41f45fae7ce56bff261094a&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.1.0-0&lt;br /&gt;
| e548f82b0aaff5fd18cfd80e7b9bd9808eeb7c99&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.2.0-1&lt;br /&gt;
| c83b637205048e61e73c870f21271cc3c6364396&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2.3.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.3.0-0&lt;br /&gt;
| 3ed3bbc8885b6362f4f244dcecd2b430fa27310e&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 7fbde2b0bba4d14107bf836e4643043d9f6c8e47&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.1-0.0&lt;br /&gt;
| a3363e086791370ed89dca69c697b4a8bc443d66&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.2-0.0&lt;br /&gt;
| 56bc7f71d0e13179ccb6543bbb33d7f537859e49&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.0-4.0&lt;br /&gt;
| 875be0f6edc29b23938b7aea50764421b9f217e5&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.1-0.0&lt;br /&gt;
| 826588c45cecab1672c46f5de87d83ea6008d583&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.1.0-0.0&lt;br /&gt;
| 314f9468b704e84e1ffed449dfa6108ba4be221d&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.0-3.0&lt;br /&gt;
| 66790aa646927601523df36a6750205cd944b3de&lt;br /&gt;
| gW93A#00050000#QRnTiv2kqQV-KO9DAn1Wzz4S2-SDH4Zd10y8Jx5KalI=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.1-0.0&lt;br /&gt;
| 4b51b56242cc388ef487e148048e2c80e25994ad&lt;br /&gt;
| gW93A#00050001#wBt05i54vmIPr7cs44Vvod3M9s5M2Yl2ZVd_pd036MY=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.2-0.0&lt;br /&gt;
| 683ab6ea765f68aa7b84cfafbe8bfb6cebb8cfa9&lt;br /&gt;
| gW93A#00050002#_Azj02OenS1rVwdAUqofLE16n9h3ECO6tgML5A50d7U=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.1.0-3.0&lt;br /&gt;
| 23f9df53e25709d756e0c76effcb2473bd3447dd&lt;br /&gt;
| gW93A#00050100#29uVhARHOdeTZmfdPnP785egrfRbPUW5n3IAACuHoPw=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.0-5.0&lt;br /&gt;
| ef435c4fcf83831d535424f6fc28e6c91f7669d1&lt;br /&gt;
| gW93A#00060000#9k9lgdev3glK0ltQTdWmdK7jU1BL9oWNJRAFkQpHUYI=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.1-1.0&lt;br /&gt;
| 880a0ba230a9b9225a87abe1de6c8ab8d832551e&lt;br /&gt;
| gW93A#00060001#a4EXpeev_mWNw7Dk0vkOsCMIxlosx2JuXPiOa5hEMd0=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.1.0-4.0&lt;br /&gt;
| 3e478da6353b192c36490f4aa34df0d10d575146&lt;br /&gt;
| gW93A#00060100#FziXCoELZt0C7o-t_rro9xWTcKkgPrsksov-OVrL00c=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.2.0-1.0&lt;br /&gt;
| 921f86701e69af7ac02712e24abf18a666c2b5fb&lt;br /&gt;
| CusHY#00060200#-uAUBEUSc-Se5mvfhJsj3Krr9ayN7IyTX60_XcLsZkQ=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.0-5.0&lt;br /&gt;
| e4b38b15e880d251c182323894077508803abaaf&lt;br /&gt;
| CusHY#00070000#5PRVTLegTfFlaOw3kznosYec9d8BxGj8pN3wqGa80so=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.1-1.0&lt;br /&gt;
| b9d2547128fa22760492cf09bffd0a3e43f2132c&lt;br /&gt;
| CusHY#00070001#rBuhja_901l8V8bKFqeiNBCY-fflYlZVa_iqvkpEGJI=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 8.0.0-4.99&lt;br /&gt;
| e19a1c3067a96ec3028d53564704e4fb76ef7c59&lt;br /&gt;
| CusHY#00080000#s7CpDsmxJh1kenRjC5cfTDfbrMFNHxBbzr6XvNTA5RI=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 8.0.1-1.0&lt;br /&gt;
| c7b483d6d953f515b9b449489dcfd828cb50fd69&lt;br /&gt;
| CusHY#00080001#fgCfbpEweqCg1S49PsWL_b9R-C1Vj_hJ6aTmSRxycSQ=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 8.1.0-1.0&lt;br /&gt;
| 250fc5984a776bf488cdbde04acfac2cd853978f&lt;br /&gt;
| CusHY#00080100#OvqIXdglAGfnEd_VQr28t7rUtxNE6LHjMQicnQ9o7zk=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.0.0-4.0&lt;br /&gt;
| 4de65c071fd0869695b7629f75eb97b2551dbf2f&lt;br /&gt;
| CusHY#00090000#-80vwBkUjWLb5Kpb_cnuTjBZ0rHwZHhN7R1-vg0Ti5c=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 9.0.1-1.0&lt;br /&gt;
| 2a6263de2d9f790a0df759d365a8a971a2be1101&lt;br /&gt;
| CusHY#00090001#qVDSOCehwMDCHyDnkXiTSJ1wEJZHtpRV_CLMKgD-fSw=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.1.0-1.0&lt;br /&gt;
| 5914af412282e4b9c0ced8fc19b7d04f74490a48&lt;br /&gt;
| CusHY#00090100#vIPNrRbf30SoU8ZJ6uGklMqKAkyjHfdE9m6yLFeChkE=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.2.0-1.0&lt;br /&gt;
| f420eb7a1345c3d7067c1fc8b9b0989d030e1041&lt;br /&gt;
| CusHY#00090200#Uxxmc8gYnfMqxzdZdygZ_OrKo98O7QA65s_EkZnGsDo=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-6.0&lt;br /&gt;
| 0fa58d66530d710027dfcd6ecfd78ae4940cd7ec&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.1-1.0&lt;br /&gt;
| df6cdaee9e2a21e63d3f29485f682f72c0a3c6df&lt;br /&gt;
| CusHY#000a0001#JEuSEdid24qqHqQzfW1tuNsCGcCk-86gcPq0I7M1x18=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.2-1.0&lt;br /&gt;
| f90143fa8bbc061d4f68c35f95f04f8080c0ecdc&lt;br /&gt;
| CusHY#000a0002#BTOGo0giC7bbrNoi8JEm-FBzmXb2Kgpq4K3OzQrD5l8=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.0.3&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.3-1.0&lt;br /&gt;
| 254bdca8851c49b707c91f407aa2ab06e6be39f8&lt;br /&gt;
| CusHY#000a0003#4mBbTFYnE0Rtmh8NLCVq61rbvx0kJPQUxXkDpwj0V84=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.0.4&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.3-1.0&lt;br /&gt;
| 254bdca8851c49b707c91f407aa2ab06e6be39f8&lt;br /&gt;
| CusHY#000a0003#4mBbTFYnE0Rtmh8NLCVq61rbvx0kJPQUxXkDpwj0V84=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.1.0-1.0&lt;br /&gt;
| 4f496dc60fa0ebb4e731a3ec355ea80d9d9e98e9&lt;br /&gt;
| CusHY#000a0100#Vlw9dIEqjxE2F5jDOQPYWXs2p7wIGyDYWXXIyQGdxcE=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 10.1.0-1.0&lt;br /&gt;
| 4f496dc60fa0ebb4e731a3ec355ea80d9d9e98e9&lt;br /&gt;
| CusHY#000a0100#Vlw9dIEqjxE2F5jDOQPYWXs2p7wIGyDYWXXIyQGdxcE=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.2.0-1.0&lt;br /&gt;
| 7bcaa2b57b032fe0f73944072a55fb4cff5b5eb6&lt;br /&gt;
| CusHY#000a0200#90k0dE_eO7hRcs6ByTZMvgUm4lhEoqAlik96WkznQcQ=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-5.0&lt;br /&gt;
| 34197eba8810e2edd5e9dfcfbde7b340882e856d&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.1-1.0&lt;br /&gt;
| 69103fcb2004dace877094c2f8c29e6113be5dbf&lt;br /&gt;
| CusHY#000b0001#iI0rZ0Q2dg3Evhd-8GoYmp-KTE8malKe0GOJgXa-XG8=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-4.0&lt;br /&gt;
| 97942e96fe34284d4820fdcc1e3818afe6fba88d&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.1-1.0&lt;br /&gt;
| c564464a2f47db6a84b98685cfbb3a2ee25b240a&lt;br /&gt;
| CusHY#000c0001#YXsU5FTbkUh18QH27L3woGqw5n1gIDpMGbPXM8oACzY=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.2-1.0&lt;br /&gt;
| 2b43ddacdd02c08245d3d77ba8c296a24f54ccdc&lt;br /&gt;
| CusHY#000c0002#6tB3UVnmvT_nsNBMPSD-K1oe0IA1cYvYDyqDCjy2W_I=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.0.3&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.3-1.0&lt;br /&gt;
| 0cb3bc4061383f14258be29e1382512630ef5874&lt;br /&gt;
| CusHY#000c0003#E8Ph6vISWsJtN0E3hsfVRoZMG1Qqkc-qGRlAp-Bs2SI=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.1.0-1.0&lt;br /&gt;
| 76b10c2dab7d3aa73fc162f8dff1655e6a21caf4&lt;br /&gt;
| CusHY#000c0100#Hzs8Gtp6yKgGKMb732-5Q-NvbQcHCgBh_LQrrpg0bIs=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.0.0-4.0&lt;br /&gt;
| 9b87ee6cd509f49e7df100cae8b31bdcf628ebcb&lt;br /&gt;
| CusHY#000d0000#r1xneESd4PiTRYIhVIl0bK1ST5L5BUmv_uGPLqc4PPo=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.1.0-1.2&lt;br /&gt;
| 687351451968bf8d46d2abb927c0a1e3cb4025f0&lt;br /&gt;
| CusHY#000d0100#plps6S3C43QHhkI2oNvYIFjNxQjTcLdUX2_biEI5w2w=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.2.0-1.0&lt;br /&gt;
| 12047e7b29ae8263d4d498f7322a3ef20d73a73e&lt;br /&gt;
| CusHY#000d0200#JFVNVuG9x3V5tRshdD9FdJjgHOmzsrgXHocEPvW5eMM=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13.2.1&lt;br /&gt;
| NintendoSDK Firmware for NX 13.2.1-1.0&lt;br /&gt;
| 6e99217a1ec1f19388cf40fadbb29990a18bfb06&lt;br /&gt;
| CusHY#000d0201#V1i7M7oEhkDaH1lcGlHhGAnyHONMAnTAA6pGdZ7MFqc=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-4.0&lt;br /&gt;
| 4775bf5e4fef675c759e34a2c3005bd0206f9d62&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.1.0-1.0&lt;br /&gt;
| 43e2fb60ac6f1d3f08e445469f1aaeae01fae3ff&lt;br /&gt;
| CusHY#000e0100#ctIxSPR4jenzQNGc6y4zXIvzvF75ty53jN0T15Rjtmk=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 14.1.1-1.0&lt;br /&gt;
| aacbee77373bad2823dc30571f0bc12eebb5db09&lt;br /&gt;
| CusHY#000e0101#uTt4IVydkYqwYArOFR3BzOCmw0MkEeF_tZxHENYDh4E=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14.1.2&lt;br /&gt;
| NintendoSDK Firmware for NX 14.1.2-1.0&lt;br /&gt;
| ad52f4983f7857a7bf0b9824de15cc4e92c5d2ab&lt;br /&gt;
| CusHY#000e0102#jHk6_VwXVPPl3ijRZ5jRy5MIAcUW_Q2uFdfJ0vrjhCA=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 15.0.0-4.0&lt;br /&gt;
| 064be9b3f0aabfda75944f03065d3a32f7523e67&lt;br /&gt;
| CusHY#000f0000#MJE7we0zvVhAnXN9uCU7fQAM7GiqGHpR5ECuC9G_nuU=&lt;br /&gt;
|-&lt;br /&gt;
| 16.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 16.0.0-3.0&lt;br /&gt;
| be1a2ac25b07bcd6f16924127003bbeb1b46ca19&lt;br /&gt;
| CusHY#00100000#k_VrW8iX7QgupPlYZYhg3dLEVDhqGN_iXW5Mm0VYEvQ=&lt;br /&gt;
|-&lt;br /&gt;
| 16.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 16.0.1-1.0&lt;br /&gt;
| 8b55ab2d7248f88a5cc35cfd0859e57a6d1b7e87&lt;br /&gt;
| CusHY#00100001#qHay53MkzVLOUU_Iy7_kyPlUMnaoi7HXCAmESYTft_c=&lt;br /&gt;
|-&lt;br /&gt;
| 16.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 16.0.2-1.0&lt;br /&gt;
| 4aa80cec72bb25cdde406f00527df6ff53f1475c&lt;br /&gt;
| CusHY#00100002#qjeCnaxVt5NjGjxosJOMVw-ZyR219B3qgAB3YtSil6g=&lt;br /&gt;
|-&lt;br /&gt;
| 16.0.3&lt;br /&gt;
| NintendoSDK Firmware for NX 16.0.3-1.0&lt;br /&gt;
| 479b0f2d1e187b9eef7661fca1f7fdb15f7c5d64&lt;br /&gt;
| CusHY#00100003#Lis4m_Z4pXlDAaBBxeRO66_glyu92IAf2-dHKNxYAJs=&lt;br /&gt;
|-&lt;br /&gt;
| 16.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 16.1.0-1.0&lt;br /&gt;
| 8c40cd350cdcf150593c0d31ff152586c6e7c7ee&lt;br /&gt;
| CusHY#00100100#3kOLHmbuMWa-kHN-SMtCkgNvwdwBHIb2b4f60BNNmrw=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 17.0.0-6.0&lt;br /&gt;
| d993bc431c51073d5a29a6c953d9f4008d6b68e8&lt;br /&gt;
| CusHY#00110000#ntMZ00Jmb7Rdu18Fy1FPZo7RO3h_MYIqxozbQQDcVaA=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 17.0.1-1.0&lt;br /&gt;
| 30dd7d0584cd38e3a1db26a5719566d21d77110e&lt;br /&gt;
| CusHY#00110001#7CmXEDXEN8wnVu-e7WY6Cv5CvmzjuG6EnKEkf1_jaC8=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 18.0.0-4.0&lt;br /&gt;
| 12dd67abcd6e05f44dc8a526e5af9c1f14202c8b&lt;br /&gt;
| CusHY#00120000#U531L4Si9RbhOVeyVppe18WHkJ0k4_KzrNtygsekMNo=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 18.0.1-1.0&lt;br /&gt;
| 8cf56436d71e12b36c6481c52c5afdc24ed40da2&lt;br /&gt;
| CusHY#00120001#chuxR_O35JFyJq7dIlT8yP1A-j1yBcF-iU4iVDjHt9g=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 18.1.0-1.0&lt;br /&gt;
| 437857bcb1604c717ae3fe62d03ae1fcaa783264&lt;br /&gt;
| CusHY#00120100#7pfwz-8raijuW2lv4UOi4Hukp-DuY898HEK6hEYUjSM=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 19.0.0-4.0&lt;br /&gt;
| 52971eebbba7ab9e6e23d73753aa63e0c3794b16&lt;br /&gt;
| CusHY#00130000#x2jf5al2EkqJmdvmnTFaL6s4ic7X68N0dY9jnwwcL98=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 19.0.1-1.0&lt;br /&gt;
| 835c78223df116284ef7e36e8441760edc81729c&lt;br /&gt;
| CusHY#00130001#6I1eeoSqDdjA7eXPDrsWBbdM-VxVhveQYiG1oNfNSt0=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 20.0.0-9.0&lt;br /&gt;
| 7147e1386c9b6c15d8f14e6ed68c4b9a7f28fb9b&lt;br /&gt;
| CusHY#00140000#x6A4ywhjzZU3HyC3CZRCfSndPILH3YfkRE9VfTo_pog=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 20.0.1-1.0&lt;br /&gt;
| 0b2540e5cd7498dd61f6caeca5136c73d9b1d21a&lt;br /&gt;
| CusHY#00140001#HmPjOvVID7TDJopFmbbEUVnz6xIL8gU8cNsGdFkVMEY=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 20.1.0-1.0&lt;br /&gt;
| fa9b24a1d97b9adf5fe462f7f0ee97e6ed6294d0&lt;br /&gt;
| CusHY#00140100#NbHLVbambSfa-7KueUgBsDVkof2MGPq66Tc2-0ZR-6E=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 20.1.1-1.0&lt;br /&gt;
| 9ffad64d79dd150490201461bdf66c8db963f57d&lt;br /&gt;
| CusHY#00140101#NKhZdIWIKBk5DuMY-ZAcIVD_THEHFAyfts1oab0oIuk=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.1.5&lt;br /&gt;
| NintendoSDK Firmware for NX 20.1.5-1.0&lt;br /&gt;
| 0605c36a7aa2535fb8989a0d133a0b96b0d97a12&lt;br /&gt;
| CusHY#00140105#mhy47tYgj1X6xuIIEzgm_eFw9DTa3ZZvwZwDVJPVYWQ=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 20.2.0-1.0&lt;br /&gt;
| ad939aa8ed828aa87f8ca9c6231bc76697298b8d&lt;br /&gt;
| CusHY#00140200#TT-sGuFXcg00F7aLle4yO-Oad3L_8CDBcPUOO6M3bWA=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20.3.0&lt;br /&gt;
| NintendoSDK Firmware for NX 20.3.0-1.0&lt;br /&gt;
| c6061464f68281807f4780ae737392516d4813c7&lt;br /&gt;
| CusHY#00140300#g9uOjrFTeFaZmkMKnbwNB9dUs_tcVX6CmTqdRTxQz3w=&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Development ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! &amp;quot;/digest&amp;quot; contents&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0.1.0&lt;br /&gt;
| SystemUpdater for NX 0.1.0-0&lt;br /&gt;
| 3ea0c0e345e1722ff680ca25c6cd3103ceed8771&lt;br /&gt;
| N/A&lt;br /&gt;
| Mislabelled as pre-SDK firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.1.0-0&lt;br /&gt;
| 3ea0c0e345e1722ff680ca25c6cd3103ceed8771&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 0.1.1&lt;br /&gt;
| 20ef5fa83ad495b62a4eb622b392f1d2190d1057&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.2.0-0&lt;br /&gt;
| 8a76dab01ce5184ef0b49563c0e34477c0ff0acc&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.2.0-2&lt;br /&gt;
| 789b0cfcb4b426f295ee731da2670a7d6c365a79&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.2.0-4&lt;br /&gt;
| 82e0e249cceca1b603e733866b9f1ee6a7b62190&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.4.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.4.0-0&lt;br /&gt;
| 5686fc6f648e48671abbea0f0779aa35dc947dd7&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-installed on DPRD consoles.&lt;br /&gt;
|-&lt;br /&gt;
| 0.4.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.4.0-0&lt;br /&gt;
| 32393bb753612184500a4da77d59c4f85f1fad39&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.5.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.5.0-0&lt;br /&gt;
| 00813b5cef05e218f580d9fa1daf67307ed80f02&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.5.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.5.0-3&lt;br /&gt;
| 37ff4f65e03e1e2076147e5f1df3d833f39d92a3&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-installed on certain SDEV MP consoles.&lt;br /&gt;
|-&lt;br /&gt;
| 0.5.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.5.0-3&lt;br /&gt;
| 3a3abe4672d4239f8170c530714d9be8b1b31dfa&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-installed on certain EDEV MP consoles.&lt;br /&gt;
|-&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.6.0-0&lt;br /&gt;
| 71b5fecf27c06ed69fdc5e1b1ec36c176678f545&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.6.0-2&lt;br /&gt;
| 439c2e0624a149a122221fa9273182ca208ef40b&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.6.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.6.0-2&lt;br /&gt;
| bc02e9b3826cf80f3716416b75b945cef2fdd36f&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.7.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.7.0-0&lt;br /&gt;
| b08d4289d3649ce920d81347663b979ab2ebe0e4&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.7.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.7.0-1&lt;br /&gt;
| bb914d5b3c0548dc34f9e84e8ae1d7b37cbc5042&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.7.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.7.0-1&lt;br /&gt;
| 3fd5f2c9daf130867a1ab7db237de6c1d8c9be25&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.0-2&lt;br /&gt;
| 2b9ac2b11f137f92336665d07d5bf4eb395cf692&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.4&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.4-0&lt;br /&gt;
| b8d85144f9d43ad72dd293cb66e295e0506eadd7&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.5&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.5-0&lt;br /&gt;
| 136abeb28b902570295d6a8898c9518b182f5123&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.5&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.5-0&lt;br /&gt;
| 3dd94e3e75a61a7a828756919dba98c42ed7069a&lt;br /&gt;
| N/A&lt;br /&gt;
| Version of 0.8.5 with all the normal applets&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.5&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.5-0&lt;br /&gt;
| 36733157fb1d0a3e0926015093bb1a19125d76df&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.7&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.7-0&lt;br /&gt;
| 086dfbea06fb48b15975df8935bbb0c610040e37&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-5&lt;br /&gt;
| 1f8c8eea9a629ea55fa8351cc5091e6db78aced9&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-17&lt;br /&gt;
| 6263af8c7d7724fd11c573dd9467dedbb61cbec7&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-2&lt;br /&gt;
| a76769473b39479ee40aaa96b0991412f382d637&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-3&lt;br /&gt;
| 646274cb0611ee0d07a664b58f24f3c36843f60c&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-1.0&lt;br /&gt;
| 46b7df4a4286b0ce191417e8ef5fbb1ef766b7b9&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-7.0&lt;br /&gt;
| aafadd9f3bd88c8cb4c9dd598aba6d4f23545b4c&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.1-1.0&lt;br /&gt;
| 917c9c125078bf604f762322b38dde1a9f01651e&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.1-0.0&lt;br /&gt;
| cfdbf4bf29913bfa965ddd31063d4577a13f634e&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.1.0-1.0&lt;br /&gt;
| 2eb7c2f82c588ad5cb73e88fcd656ecf6d0ecf4b&lt;br /&gt;
| N/A&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.1.0-2.0&lt;br /&gt;
| 1e6eeb584624ec74cd7f0aad1f4e27fe34421916&lt;br /&gt;
| gW93A#00050100#29uVhARHOdeTZmfdPnP785egrfRbPUW5n3IAACuHoPw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.0-1.0&lt;br /&gt;
| cec29af339974a31f085bd970bc00ff801409d6d&lt;br /&gt;
| gW93A#00060000#9k9lgdev3glK0ltQTdWmdK7jU1BL9oWNJRAFkQpHUYI=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.2.0-1.0&lt;br /&gt;
| 84e27a0321707eb641f8a6a0eefa8e72f57263f0&lt;br /&gt;
| CusHY#00060200#-uAUBEUSc-Se5mvfhJsj3Krr9ayN7IyTX60_XcLsZkQ=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.0-1.0&lt;br /&gt;
| 76e673b87fe461a6942a062b66942f20ca7c67a8&lt;br /&gt;
| gW93A#00070000#-yCvsyiPWY6z6z_sxqtNBQQLl9f6roDNZc5ErfWucIU=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.1-1.0&lt;br /&gt;
| 507cc44ebc5db0ee7ecc888b068373729d6721dc&lt;br /&gt;
| CusHY#00070001#rBuhja_9O1l8V8bKFqeiNBCY-fflYlZVa_iqvkpEGJI=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 8.0.1-1.0&lt;br /&gt;
| 77b000cb1de3d987ff5fccdb4c35c0865a82c57b&lt;br /&gt;
| CusHY#00080001#fgCfbpEweqCg1S49PsWL_b9R-C1Vj_hJ6aTmSRxycSQ=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 8.1.0-1.0&lt;br /&gt;
| ea2157a12d37e66546d999d67e6fb46aa29d16cd&lt;br /&gt;
| CusHY#00080100#OvqIXdglAGfnEd_VQr28t7rUtxNE6LHjMQicnQ9o7zk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.0.0-1.0&lt;br /&gt;
| 3258337b6455534c1347a8c4f6ea44becc38c5ea&lt;br /&gt;
| CusHY#00090000#-80vwBkUjWLb5Kpb_cnuTjBZ0rHwZHhN7R1-vg0Ti5c=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.0.0-5.0&lt;br /&gt;
| 9527665016204363d31502161fadefa85f99081a&lt;br /&gt;
| CusHY#00090000#-80vwBkUjWLb5Kpb_cnuTjBZ0rHwZHhN7R1-vg0Ti5c=&lt;br /&gt;
| Pre-installed on certain EDEV-D MP and HDEV MP consoles.&lt;br /&gt;
|-&lt;br /&gt;
| 9.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 9.0.1-1.0&lt;br /&gt;
| 64975f7d2f19214a45d7749d2e9b0a6aa2d2c9e1&lt;br /&gt;
| CusHY#00090001#qVDSOCehwMDCHyDnkXiTSJ1wEJZHtpRV_CLMKgD-fSw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.1.0-1.0&lt;br /&gt;
| 3f7f4f966e283d8c490de7c74356402534a2d8e1&lt;br /&gt;
| CusHY#00090100#vIPNrRbf30SoU8ZJ6uGklMqKAkyjHfdE9m6yLFeChkE=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.1.0-2.0&lt;br /&gt;
| 6d4a80bc865b69674dcf97fa2f3d511ed8f0a4e1&lt;br /&gt;
| CusHY#00090100#vIPNrRbf30SoU8ZJ6uGklMqKAkyjHfdE9m6yLFeChkE=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.2.0-1.0&lt;br /&gt;
| 0d8a2066a53c2ed5fa8d3b9dc486a0e877ecc4d7&lt;br /&gt;
| CusHY#00090200#Uxxmc8gYnfMqxzdZdygZ_OrKo98O7QA65s_EkZnGsDo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-1.0&lt;br /&gt;
| 25bd1fcccda8ff3ffa54d8ddf2dbb37667df97c2&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-2.0&lt;br /&gt;
| 16b7761efb697e273396a6b37beb0fc892eefcb0&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-3.0&lt;br /&gt;
| ebbb57d71133383dfe894b81b6ab598ffbc34da7&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-4.0&lt;br /&gt;
| 45797b8dd053c47405b77d2f24d30841c9c27145&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.0-6.0&lt;br /&gt;
| 0b36d72cc9038954202842583e694f5dce9728dd&lt;br /&gt;
| CusHY#000a0000#EmdxOnZjZ9Ihf3Zskt_48pYgowAUeeJccU6tCBIweEc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.1-1.0&lt;br /&gt;
| e3f269e19490592fd6c83957983ca49458cf9932&lt;br /&gt;
| CusHY#000a0001#JEuSEdid24qqHqQzfW1tuNsCGcCk-86gcPq0I7M1x18=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.2-1.0&lt;br /&gt;
| f72302ca144a1bce988310f4473248e4fe6f88b1&lt;br /&gt;
| CusHY#000a0002#BTOGo0giC7bbrNoi8JEm-FBzmXb2Kgpq4K3OzQrD5l8=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.3&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.3-1.0&lt;br /&gt;
| c189eeac744f64fe2bf9bc3a1717c5470b5cac65&lt;br /&gt;
| CusHY#000a0003#4mBbTFYnE0Rtmh8NLCVq61rbvx0kJPQUxXkDpwj0V84=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.4&lt;br /&gt;
| NintendoSDK Fimrware for NX 10.0.4-1.0&lt;br /&gt;
| d48ab1fee03a4e0e9bdecb536418146240cda28c&lt;br /&gt;
| CusHY#000a0004#zTIjlVsAjVPsrLrASfdwd4r03O94n3jtDS7V53hIcR4=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.4&lt;br /&gt;
| NintendoSDK Firmware for NX 10.0.4-1.1&lt;br /&gt;
| b37bd75e54c842e21f931562e0efddf6375681c7&lt;br /&gt;
| CusHY#000a0004#zTIjlVsAjVPsrLrASfdwd4r03O94n3jtDS7V53hIcR4=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.1.0-3.0&lt;br /&gt;
| 811f1f87deedddaddba4425ae5fb3b892b865cbf&lt;br /&gt;
| CusHY#000a0100#Vlw9dIEqjxE2F5jDOQPYWXs2p7wIGyDYWXXIyQGdxcE=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.2.0-3.0&lt;br /&gt;
| a1382cea70005bea869673c40bacd111f8785c1b&lt;br /&gt;
| CusHY#000a0200#90k0dE_eO7hRcs6ByTZMvgUm4lhEoqAlik96WkznQcQ=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 10.2.0-4.0&lt;br /&gt;
| 79797e08e261632caf8a306c60518c0e91cc8800&lt;br /&gt;
| CusHY#000a0200#90k0dE_eO7hRcs6ByTZMvgUm4lhEoqAlik96WkznQcQ=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-1.0&lt;br /&gt;
| 6fec683f603b9ee0ec3cb8138f7a91f74d782ff4&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-2.0&lt;br /&gt;
| a39e2ee536c93c13ca879a50a9d1b457cde81dc4&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-3.0&lt;br /&gt;
| 39fc6a3b0a95469c878e754e0bd24eba9f217051&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-3.1&lt;br /&gt;
| d642c137a44d7f4b30ddce9f696c281998a0dc26&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-4.0&lt;br /&gt;
| d64f1b3004555fb4279b14cea1e06370114bf2f6&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.0-6.0&lt;br /&gt;
| ec03314d2d4b4dcd240d83a5217bc80800aa8456&lt;br /&gt;
| CusHY#000b0000#VyA0fsWi6ZBEOzVsseXIcEfFLqQMgW0tWzN2oJ7viqk=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.1-1.0&lt;br /&gt;
| 994fa419fbc9cf13ced5986794a669dc0160c7df&lt;br /&gt;
| CusHY#000b0001#iI0rZ0Q2dg3Evhd-8GoYmp-KTE8malKe0GOJgXa-XG8=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 11.0.1-1.2&lt;br /&gt;
| 54a19d40c9f834e728b7290084a16e37f19e1ff0&lt;br /&gt;
| CusHY#000b0001#iI0rZ0Q2dg3Evhd-8GoYmp-KTE8malKe0GOJgXa-XG8=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-1.0&lt;br /&gt;
| 69d9b0f4931f50c7fcc1a96e14ea159b7b7a835a&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-2.0&lt;br /&gt;
| 5c281eb3aca91d851708f42aec4481d19d8cf6be&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-3.0&lt;br /&gt;
| 4aca53fcbe7f17c05411ef663c256d0b59e105ba&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-3.0&lt;br /&gt;
| 4b71ea4ac11fa019da7405b4fbbf3af452f9786e&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
| Pre-installed on certain ADEV MP consoles.&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.0-5.0&lt;br /&gt;
| 3b474c8053b4ccb6ba34f2692885d4710a564076&lt;br /&gt;
| CusHY#000c0000#C-BynYNPXdQJNBZjx02Hizi8lRUSIKLwPGa5p8EY1uo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.1-1.0&lt;br /&gt;
| b59f4e032faf08d9f210ae83cc4ca4d0c27ff082&lt;br /&gt;
| CusHY#000c0001#YXsU5FTbkUh18QH27L3woGqw5n1gIDpMGbPXM8oACzY=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.2-1.0&lt;br /&gt;
| b6ceec060059816fc5431d9218c297118e74cc3a&lt;br /&gt;
| CusHY#000c0002#6tB3UVnmvT_nsNBMPSD-K1oe0IA1cYvYDyqDCjy2W_I=&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12.0.3&lt;br /&gt;
| NintendoSDK Firmware for NX 12.0.3-1.0&lt;br /&gt;
| 8aa8e9452ef235ce3f730557c94811072f193a03&lt;br /&gt;
| CusHY#000c0003#E8Ph6vISWsJtN0E3hsfVRoZMG1Qqkc-qGRlAp-Bs2SI=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 12.1.0-1.0&lt;br /&gt;
| ca01cff44337796c3274c9fdf33bd6a8611cf31b&lt;br /&gt;
| CusHY#000c0100#Hzs8Gtp6yKgGKMb732-5Q-NvbQcHCgBh_LQrrpg0bIs=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.0.0-1.0&lt;br /&gt;
| e83fe527e549561d4113f6ffc70e7196df489997&lt;br /&gt;
| CusHY#000d0000#r1xneESd4PiTRYIhVIl0bK1ST5L5BUmv_uGPLqc4PPo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.0.0-2.0&lt;br /&gt;
| a1083d2e97d9d9b672a3037dc9f4d9e45a50d8f6&lt;br /&gt;
| CusHY#000d0000#r1xneESd4PiTRYIhVIl0bK1ST5L5BUmv_uGPLqc4PPo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.0.0-3.0&lt;br /&gt;
| 56c6892300351126ed61f8e6f68e2f8027e062c8&lt;br /&gt;
| CusHY#000d0000#r1xneESd4PiTRYIhVIl0bK1ST5L5BUmv_uGPLqc4PPo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.0.0-5.0&lt;br /&gt;
| c33e24efa623098a1eef78443c42839e74587414&lt;br /&gt;
| CusHY#000d0000#r1xneESd4PiTRYIhVIl0bK1ST5L5BUmv_uGPLqc4PPo=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 13.1.0-1.3&lt;br /&gt;
| a18493fa4ce9eaa7ff257540abe54e2387eab082&lt;br /&gt;
| CusHY#000d0100#plps6S3C43QHhkI2oNvYIFjNxQjTcLdUX2_biEI5w2w=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.2.0 &lt;br /&gt;
| NintendoSDK Firmware for NX 13.2.0-1.0&lt;br /&gt;
| 9f181d351ab659a32cc618561398d86cce274e62&lt;br /&gt;
| CusHY#000d0200#JFVNVuG9x3V5tRshdD9FdJjgHOmzsrgXHocEPvW5eMM=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.2.1&lt;br /&gt;
| NintendoSDK Firmware for NX 13.2.1-1.0&lt;br /&gt;
| 7b0bad6d7a2d7cfbc96dc88a6bfacb4a87d8633a&lt;br /&gt;
| CusHY#000d0201#V1i7M7oEhkDaH1lcGlHhGAnyHONMAnTAA6pGdZ7MFqc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 13.2.1&lt;br /&gt;
| NintendoSDK Firmware for NX 13.2.1-1.1&lt;br /&gt;
| c275501689eceb5c6e88479e9c5ae4c5fd712882&lt;br /&gt;
| CusHY#000d0201#V1i7M7oEhkDaH1lcGlHhGAnyHONMAnTAA6pGdZ7MFqc=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-1.0&lt;br /&gt;
| 52128cd3de097af16870f1c617e813d5ce9de1ef&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-2.0&lt;br /&gt;
| ae112b9d0abdad2c0ae99fc5cdaae7d1a62097fb&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-3.0&lt;br /&gt;
| 780db0b6d293d08c792d9680ad6b9ee2a7e58c09&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-5.0&lt;br /&gt;
| 99ec0f583e3ddb5d70e9e26abbc65c2df592f894&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 14.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.1.0-1.0&lt;br /&gt;
| d4f087695beccb014a8ef8c259a5f0a61f9ddb1c&lt;br /&gt;
| CusHY#000e0100#ctIxSPR4jenzQNGc6y4zXIvzvF75ty53jN0T15Rjtmk=&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! &amp;quot;/digest&amp;quot; contents&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.0&lt;br /&gt;
| SystemUpdater for NX 0.8.0-3&lt;br /&gt;
| a228ae430829d6324cd80c7bb5953889ffc950f9&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-SDK firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| SystemUpdater for NX 0.9.0-0&lt;br /&gt;
| 4ef77bf71d3da940a0b75f791d341157ffae075a&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-SDK firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0.9.0&lt;br /&gt;
| SystemUpdater for NX 0.9.0-0&lt;br /&gt;
| 8fcc7067deaca6a8f2b7754503ae535df8c83b08&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-SDK firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0.7.0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.7.0-0&lt;br /&gt;
| 07814d60b31c5925b0c9330d68a7ade1f39f350d&lt;br /&gt;
| N/A&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0-89d9b_r49916&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-7&lt;br /&gt;
| 89d9b7e2576ce56866be5b16de85906157a7e72d&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-release version of firmware 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-2&lt;br /&gt;
| 665fafc03935d12eebba8060a135516b021ccbaa&lt;br /&gt;
| N/A&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-13&lt;br /&gt;
| 5c53d88ef4b4e7fd1ba8e34fef8535712da9a149&lt;br /&gt;
| N/A&lt;br /&gt;
| Pre-release version of firmware 2.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-13&lt;br /&gt;
| 60b5fa391b0055f50fec362d29ac18395f387412&lt;br /&gt;
| N/A&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 83480e96a810a6c7cd3a8fb58dfb5b53961ac781&lt;br /&gt;
| N/A&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.1-0.0&lt;br /&gt;
| 1fc07046046a3677a08b7cf9d49b4de0c957fb25&lt;br /&gt;
| N/A&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.0-4.0&lt;br /&gt;
| 5dc1909aea612d7a444884faca584fa8ae895b5c&lt;br /&gt;
| gW93A#00060000#9k9lgdev3glK0ltQTdWmdK7jU1BL9oWNJRAFkQpHUYI=&lt;br /&gt;
| Pre-release version of firmware 6.0.0.&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.0-5.0&lt;br /&gt;
| bceb282da2e3053a7de410df29ee53128e85702e&lt;br /&gt;
| CusHY#00070000#5PRVTLegTfFlaOw3kznosYec9d8BxGj8pN3wqGa80so=&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 8.1.1-12.0&lt;br /&gt;
| 0d124bb8ddfe1065087d6837957357b369878ba3&lt;br /&gt;
| CusHY#00080101#PNfaWb4Y5K1aH-JaerDQijXvq460tJdVp5kwe8HlGbA=&lt;br /&gt;
| Present on certain Chinese game cards&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| NintendoSDK Firmware for NX 8.1.1-100.0&lt;br /&gt;
| 16593da95879534f7d67af8edef0be017c8fcc32&lt;br /&gt;
| CusHY#00080101#PNfaWb4Y5K1aH-JaerDQijXvq460tJdVp5kwe8HlGbA=&lt;br /&gt;
| Pre-installed on certain Lite devices&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 9.1.0-1.0&lt;br /&gt;
| 4f9001d7fc04469cffe95812b0086c3c13badbad&lt;br /&gt;
| CusHY#00090100#vIPNrRbf30SoU8ZJ6uGklMqKAkyjHfdE9m6yLFeChkE=&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 14.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 14.0.0-4.0&lt;br /&gt;
| c0245d4e92aa5e6ec5d0862cd837ad360480ecdd&lt;br /&gt;
| CusHY#000e0000#35hWb15SBXTnbUfTMLBz9sCnfheuRGis0OTZqa7l8yw=&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ounce ==&lt;br /&gt;
=== Retail ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! &amp;quot;/digest&amp;quot; contents&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 19.0.0&lt;br /&gt;
| NintendoSDK Firmware for Ounce 19.0.0-4.0&lt;br /&gt;
| cca59ba31e315a7623da1e4dc6c7b8c2ff303569&lt;br /&gt;
| CusHY#00130000#x2jf5al2EkqJmdvmnTFaL6s4ic7X68N0dY9jnwwcL98=&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 20.1.1&lt;br /&gt;
| NintendoSDK Firmware for Ounce 20.1.1-1.0&lt;br /&gt;
| d4148c28417c3438d2d020ca545ce3e7b6388628&lt;br /&gt;
| N/A&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Development ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Version hash&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.5&amp;diff=13471</id>
		<title>20.1.5</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.5&amp;diff=13471"/>
		<updated>2025-06-19T02:08:18Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* System Titles */ erpt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.5 system update was released on June 19, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: account, ns, erpt, pctl, migration.&lt;br /&gt;
** Applets: qlaunch.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* migration: Service access: added eupld:c.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== [[Error_Report_services|erpt]] ===&lt;br /&gt;
Only a single instruction was changed (besides GNU build-id). Previously, when validating the CreateReportContext in Reporter::CreateReport, Nintendo checks that FieldId_ErrorCode is present, and that the field corresponding to FieldId_ErrorCode has type == FieldType_String (ResultFieldTypeMismatch if not) and that it has size &amp;lt;= 0xE (ResultArrayFieldTooLarge if not). &lt;br /&gt;
&lt;br /&gt;
It now checks that the error code string is size &amp;lt;= 0xF instead of &amp;lt;= 0xE.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x71002673BC [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71002669F4 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x71002655A8 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A65C0 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266C8C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71002670E0 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5FBC [ID = 0x04dea048]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Changed:   292 - outinterfaces: [&#039;0x7100266784 [ID = 0x3af03446]&#039;] -&amp;gt; [&#039;0x71002669F4 [ID = 0x3af03446]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71002669F4 [ID = 0x3af03446]&#039;])&lt;br /&gt;
** Changed:   293 - outinterfaces: [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;] -&amp;gt; [&#039;0x7100266C8C [ID = 0x38f0bb3d]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266C8C [ID = 0x38f0bb3d]&#039;])&lt;br /&gt;
** Changed:   350 - outinterfaces: [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;] -&amp;gt; [&#039;0x71002670E0 [ID = 0x36f3a242]&#039;] (final state: inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x71002670E0 [ID = 0x36f3a242]&#039;])&lt;br /&gt;
** Changed:   352 - outinterfaces: [&#039;0x710026714C [ID = 0x0919ff75]&#039;] -&amp;gt; [&#039;0x71002673BC [ID = 0x0919ff75]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71002673BC [ID = 0x0919ff75]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x71002655A8 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71002655A8 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x71002655A8 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71002655A8 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x71002655A8 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71002655A8 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x71002655A8 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71002655A8 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:  4026 - outinterfaces: [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;] -&amp;gt; [&#039;0x71001A5FBC [ID = 0x04dea048]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A5FBC [ID = 0x04dea048]&#039;])&lt;br /&gt;
** Changed:  4027 - outinterfaces: [&#039;0x71001A6348 [ID = 0x4e930893]&#039;] -&amp;gt; [&#039;0x71001A65C0 [ID = 0x4e930893]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A65C0 [ID = 0x4e930893]&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x710013C728 [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001408F8 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100141D04 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140D7C [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013E3E8 [ID = 0x8cf617a1]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013E538 [ID = 0x8cf617a1]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140ECC [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013C878 [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140A48 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100141E54 [ID = 0x3c7c9db7]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Changed:  2100 - outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C878 [ID = 0x6e021695]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C878 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2110 - outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C878 [ID = 0x6e021695]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C878 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2200 - outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E538 [ID = 0x8cf617a1]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E538 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2210 - outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E538 [ID = 0x8cf617a1]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E538 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100140A48 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140A48 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x7100140A48 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140A48 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2300 - outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140ECC [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140ECC [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2310 - outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140ECC [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140ECC [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2400 - outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141E54 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141E54 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
** Changed:  2420 - outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141E54 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141E54 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-06-19_01-05-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.1&amp;diff=13470</id>
		<title>20.1.1</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.1&amp;diff=13470"/>
		<updated>2025-06-19T02:08:02Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Reverted edit by SciresM (talk) to last revision by Yellows8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.1 system update was released on June 3, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   Fixed an issue where some software would not start after updating to system version 20.1.0.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: ns.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump): none.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
&lt;br /&gt;
=== [[NS_services|ns]] ===&lt;br /&gt;
This seems to be a rebuild?(IPC-client vfuncs were added)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-06-03_00-04-35&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.1&amp;diff=13469</id>
		<title>20.1.1</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.1&amp;diff=13469"/>
		<updated>2025-06-19T02:07:49Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* System Titles */ erpt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.1 system update was released on June 3, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   Fixed an issue where some software would not start after updating to system version 20.1.0.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: ns.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump): none.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
&lt;br /&gt;
=== [[Error_Report_services|erpt]] ===&lt;br /&gt;
Only a single instruction was changed (besides GNU build-id). Previously, when validating the CreateReportContext in Reporter::CreateReport, Nintendo checks that FieldId_ErrorCode is present, and that the field corresponding to FieldId_ErrorCode has type == FieldType_String (ResultFieldTypeMismatch if not) and that it has size &amp;lt;= 0xE (ResultArrayFieldTooLarge if not). &lt;br /&gt;
&lt;br /&gt;
It now checks that the error code string is size &amp;lt;= 0xF instead of &amp;lt;= 0xE.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-06-03_00-04-35&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13288</id>
		<title>20.1.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13288"/>
		<updated>2025-05-28T21:21:21Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add ro diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.0 system update was released on May 28, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     Visual updates have been made to the Parental Control settings.&lt;br /&gt;
*     The sound that plays when Nintendo Switch Online is launched from the HOME Menu has been changed.&lt;br /&gt;
*     General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
*   Note: If performing a system transfer from Nintendo Switch to Nintendo Switch 2 using local communication, the Nintendo Switch console will need to be updated to this latest system version to perform the transfer. See System Transfer from Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2 for more information.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, NgWord, SsidList, LocalNews, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware, 0100000000000859, 010000000000085C.&lt;br /&gt;
** Applets: qlaunch, auth, controller, dataErase, error, netConnect, playerSelect, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, splay.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump): none.&lt;br /&gt;
&lt;br /&gt;
Sysmodules were rebuilt with latest SDK, unless noted otherwise the only .text changes are from sdkver-update / logging-constants-update. The sysmodules with actual changes are (besides ones with IPC changes):&lt;br /&gt;
* bcat, jit, ...&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cruiser.bfsar&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnMoonIntro/list.jpg&amp;quot; updated, &amp;quot;/image/LnMoonIntro/main.jpg&amp;quot; updated, &amp;quot;/message/CNzhT/&amp;quot; added&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* ControllerFirmware: &amp;quot;/FirmwareInfo.csv&amp;quot; updated, &amp;quot;/tera_fullkey_ota.bin&amp;quot; updated, &amp;quot;/tera_fullkey_ota_iap.bin&amp;quot; updated, &amp;quot;/tera_ota.bin&amp;quot; updated, &amp;quot;/tera_ota_iap.bin&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth.bfsar&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/error.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect.bfsar&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/infoLHub.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoPtcl.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimerOver.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimer.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage.bfsar&amp;quot; updated&lt;br /&gt;
* splay applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/splay_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/splay.bfsar&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x710008741C&lt;br /&gt;
* Unknown Interface cur-version: 0x710008741C&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     214 - inbytes: 0x8, outbytes: 0x1D&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:    1158 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    1159 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:   120 - outbytes: 0x28 -&amp;gt; 0x2C (final state: inbytes: 0x0, outbytes: 0x2C)&lt;br /&gt;
* Unknown Interface prev-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A4F60 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264B34 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264DCC [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265220 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002654FC [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A495C [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002636E8 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Changed:   292 - outinterfaces: [&#039;0x7100264B34 [ID = 0x3af03446]&#039;] -&amp;gt; [&#039;0x7100266784 [ID = 0x3af03446]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266784 [ID = 0x3af03446]&#039;])&lt;br /&gt;
** Changed:   293 - outinterfaces: [&#039;0x7100264DCC [ID = 0x38f0bb3d]&#039;] -&amp;gt; [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;])&lt;br /&gt;
** Changed:   350 - outinterfaces: [&#039;0x7100265220 [ID = 0x36f3a242]&#039;] -&amp;gt; [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;] (final state: inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;])&lt;br /&gt;
** Changed:   352 - outinterfaces: [&#039;0x71002654FC [ID = 0x0919ff75]&#039;] -&amp;gt; [&#039;0x710026714C [ID = 0x0919ff75]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710026714C [ID = 0x0919ff75]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     933 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
** Added:    2183 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Changed:  4026 - outinterfaces: [&#039;0x71001A495C [ID = 0x04dea048]&#039;] -&amp;gt; [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;])&lt;br /&gt;
** Changed:  4027 - outinterfaces: [&#039;0x71001A4F60 [ID = 0x4e930893]&#039;] -&amp;gt; [&#039;0x71001A6348 [ID = 0x4e930893]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A6348 [ID = 0x4e930893]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IContentManagementInterface&lt;br /&gt;
** Added:      58 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      71 - inbytes: 0x1, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:      17 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
* Unknown Interface prev-version: 0x71000CE314 [ID = 0x359536d2]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000CE4B4 [ID = 0x359536d2]&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Changed:   460 - outinterfaces: [&#039;0x71000CE314 [ID = 0x359536d2]&#039;] -&amp;gt; [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;])&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     173 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface prev-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface cur-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface prev-version: 0x710014064C [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140AD0 [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013C47C [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100141A58 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013E13C [ID = 0x8cf617a1]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013C728 [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001408F8 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100141D04 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140D7C [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013E3E8 [ID = 0x8cf617a1]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Changed:  2100 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2110 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2200 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2210 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2300 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2310 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2400 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
** Changed:  2420 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x7100133FE0 [ID = 0x17291af3]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001357F4 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013A720 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100138F0C [ID = 0x17291af3]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IDaemonController&lt;br /&gt;
** Changed:    13 - outinterfaces: [&#039;0x71001357F4 [ID = 0xa036ce80]&#039;, None] -&amp;gt; [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:  1000 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Changed:   800 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::ITransferTaskListController&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      28 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      30 - inbytes: 0x1, outbytes: 0x38&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      50 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* &amp;quot;/nx/package2&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
[[Package2|INI1]] changes:&lt;br /&gt;
* BootImagePackage/BootImagePackageExFat: &lt;br /&gt;
** All FIRM Sysmodules were just re-built, resulting in updated GNU build-id. The *only* changes besides this are:&lt;br /&gt;
*** Loader: Anti-downgrade list is updated.&lt;br /&gt;
*** FS: UpdateResult&#039;s logging constants/hashes were updated.&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* cpu::DoCoreInterruptBarrier now uses a KLightLock instead of a KSpinLock.&lt;br /&gt;
* Sleep entry now waits 1920 ticks after synchronizing cores and before saving the interrupt manager&lt;br /&gt;
* KInterruptController::SaveLocalState/RestoreLocalState now saves and restores spendsgir&lt;br /&gt;
&lt;br /&gt;
=== [[JIT_services|jit]] ===&lt;br /&gt;
The only updated func was L_177b0 (this is the func called by nn::ro::RegisterModuleInfo):&lt;br /&gt;
* The order of the validation after magicnum-check ([[NRR]]) was swapped.&lt;br /&gt;
&lt;br /&gt;
=== [[RO_services|ro]] ===&lt;br /&gt;
* RoServer object now has two new fields, &amp;quot;m_SupportedPlatforms&amp;quot;, &amp;quot;m_NumSupportedPlatforms&amp;quot;.&lt;br /&gt;
** These are initialized for both JitPlugin and User servers to point to an array of size 1, containing only Platform 0 (NX).&lt;br /&gt;
* During NRR validation, the NRR platform byte (NRR + 0x6) is now checked to be contained within the server&#039;s supported platforms array before header is copied onto stack, if it is not then error 0xC16 is returned.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-05-28_00-02-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13287</id>
		<title>20.1.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13287"/>
		<updated>2025-05-28T21:16:16Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* BootImagePackages */ FIRM sysmodules -&amp;gt; no real changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.0 system update was released on May 28, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     Visual updates have been made to the Parental Control settings.&lt;br /&gt;
*     The sound that plays when Nintendo Switch Online is launched from the HOME Menu has been changed.&lt;br /&gt;
*     General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
*   Note: If performing a system transfer from Nintendo Switch to Nintendo Switch 2 using local communication, the Nintendo Switch console will need to be updated to this latest system version to perform the transfer. See System Transfer from Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2 for more information.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, NgWord, SsidList, LocalNews, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware, 0100000000000859, 010000000000085C.&lt;br /&gt;
** Applets: qlaunch, auth, controller, dataErase, error, netConnect, playerSelect, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, splay.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump): none.&lt;br /&gt;
&lt;br /&gt;
Sysmodules were rebuilt with latest SDK, unless noted otherwise the only .text changes are from sdkver-update / logging-constants-update. The sysmodules with actual changes are (besides ones with IPC changes):&lt;br /&gt;
* bcat, jit, ...&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cruiser.bfsar&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnMoonIntro/list.jpg&amp;quot; updated, &amp;quot;/image/LnMoonIntro/main.jpg&amp;quot; updated, &amp;quot;/message/CNzhT/&amp;quot; added&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* ControllerFirmware: &amp;quot;/FirmwareInfo.csv&amp;quot; updated, &amp;quot;/tera_fullkey_ota.bin&amp;quot; updated, &amp;quot;/tera_fullkey_ota_iap.bin&amp;quot; updated, &amp;quot;/tera_ota.bin&amp;quot; updated, &amp;quot;/tera_ota_iap.bin&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth.bfsar&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/error.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect.bfsar&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/infoLHub.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoPtcl.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimerOver.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimer.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage.bfsar&amp;quot; updated&lt;br /&gt;
* splay applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/splay_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/splay.bfsar&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x710008741C&lt;br /&gt;
* Unknown Interface cur-version: 0x710008741C&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     214 - inbytes: 0x8, outbytes: 0x1D&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:    1158 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    1159 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:   120 - outbytes: 0x28 -&amp;gt; 0x2C (final state: inbytes: 0x0, outbytes: 0x2C)&lt;br /&gt;
* Unknown Interface prev-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A4F60 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264B34 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264DCC [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265220 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002654FC [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A495C [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002636E8 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Changed:   292 - outinterfaces: [&#039;0x7100264B34 [ID = 0x3af03446]&#039;] -&amp;gt; [&#039;0x7100266784 [ID = 0x3af03446]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266784 [ID = 0x3af03446]&#039;])&lt;br /&gt;
** Changed:   293 - outinterfaces: [&#039;0x7100264DCC [ID = 0x38f0bb3d]&#039;] -&amp;gt; [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;])&lt;br /&gt;
** Changed:   350 - outinterfaces: [&#039;0x7100265220 [ID = 0x36f3a242]&#039;] -&amp;gt; [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;] (final state: inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;])&lt;br /&gt;
** Changed:   352 - outinterfaces: [&#039;0x71002654FC [ID = 0x0919ff75]&#039;] -&amp;gt; [&#039;0x710026714C [ID = 0x0919ff75]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710026714C [ID = 0x0919ff75]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     933 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
** Added:    2183 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Changed:  4026 - outinterfaces: [&#039;0x71001A495C [ID = 0x04dea048]&#039;] -&amp;gt; [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;])&lt;br /&gt;
** Changed:  4027 - outinterfaces: [&#039;0x71001A4F60 [ID = 0x4e930893]&#039;] -&amp;gt; [&#039;0x71001A6348 [ID = 0x4e930893]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A6348 [ID = 0x4e930893]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IContentManagementInterface&lt;br /&gt;
** Added:      58 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      71 - inbytes: 0x1, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:      17 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
* Unknown Interface prev-version: 0x71000CE314 [ID = 0x359536d2]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000CE4B4 [ID = 0x359536d2]&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Changed:   460 - outinterfaces: [&#039;0x71000CE314 [ID = 0x359536d2]&#039;] -&amp;gt; [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;])&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     173 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface prev-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface cur-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface prev-version: 0x710014064C [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140AD0 [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013C47C [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100141A58 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013E13C [ID = 0x8cf617a1]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013C728 [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001408F8 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100141D04 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140D7C [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013E3E8 [ID = 0x8cf617a1]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Changed:  2100 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2110 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2200 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2210 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2300 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2310 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2400 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
** Changed:  2420 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x7100133FE0 [ID = 0x17291af3]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001357F4 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013A720 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100138F0C [ID = 0x17291af3]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IDaemonController&lt;br /&gt;
** Changed:    13 - outinterfaces: [&#039;0x71001357F4 [ID = 0xa036ce80]&#039;, None] -&amp;gt; [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:  1000 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Changed:   800 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::ITransferTaskListController&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      28 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      30 - inbytes: 0x1, outbytes: 0x38&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      50 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* &amp;quot;/nx/package2&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
[[Package2|INI1]] changes:&lt;br /&gt;
* BootImagePackage/BootImagePackageExFat: &lt;br /&gt;
** All FIRM Sysmodules were just re-built, resulting in updated GNU build-id. The *only* changes besides this are:&lt;br /&gt;
*** Loader: Anti-downgrade list is updated.&lt;br /&gt;
*** FS: UpdateResult&#039;s logging constants/hashes were updated.&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* cpu::DoCoreInterruptBarrier now uses a KLightLock instead of a KSpinLock.&lt;br /&gt;
* Sleep entry now waits 1920 ticks after synchronizing cores and before saving the interrupt manager&lt;br /&gt;
* KInterruptController::SaveLocalState/RestoreLocalState now saves and restores spendsgir&lt;br /&gt;
&lt;br /&gt;
=== [[JIT_services|jit]] ===&lt;br /&gt;
The only updated func was L_177b0 (this is the func called by nn::ro::RegisterModuleInfo):&lt;br /&gt;
* The order of the validation after magicnum-check ([[NRR]]) was swapped.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-05-28_00-02-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=RO_services&amp;diff=13286</id>
		<title>RO services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=RO_services&amp;diff=13286"/>
		<updated>2025-05-28T20:56:56Z</updated>

		<summary type="html">&lt;p&gt;SciresM: fixup ro command names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Prior to 3.0.0, ro was included as part of [[Loader_services|Loader]]. Despite the separation, the service name ldr:ro is retained to maintain compatibility with old games.&lt;br /&gt;
&lt;br /&gt;
= ldr:ro, ro:1 =&lt;br /&gt;
[1.0.0-2.3.0] This is &amp;quot;nn::ldr::detail::IRoInterface&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] This is &amp;quot;nn::ro::detail::IRoInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] ro:1 was added and is also &amp;quot;nn::ro::detail::IRoInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#MapManualLoadModuleMemory]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnmapManualLoadModuleMemory]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterModuleInfo]] &lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterModuleInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterProcessHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [7.0.0+] [[#RegisterModuleInfoWithUserProcessHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MapManualLoadModuleMemory ==&lt;br /&gt;
Takes a PID-descriptor and 4 input u64s (&#039;&#039;&#039;nro_address&#039;&#039;&#039;, &#039;&#039;&#039;nro_size&#039;&#039;&#039;, &#039;&#039;&#039;bss_address&#039;&#039;&#039; and &#039;&#039;&#039;bss_size&#039;&#039;&#039;). Returns an output u64 (&#039;&#039;&#039;out_address&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== UnmapManualLoadModuleMemory ==&lt;br /&gt;
Takes a PID-descriptor and an input u64 (&#039;&#039;&#039;nro_address&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
== RegisterModuleInfo ==&lt;br /&gt;
Takes a PID-descriptor and 2 input u64s (&#039;&#039;&#039;nrr_address&#039;&#039;&#039; and &#039;&#039;&#039;nrr_size&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
[7.0.0+] [[NRR|NrrKind]] must be 0 (User) for this function to succeed.&lt;br /&gt;
&lt;br /&gt;
== UnregisterModuleInfo ==&lt;br /&gt;
Takes a PID-descriptor and an input u64s (&#039;&#039;&#039;nrr_address&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
== RegisterProcessHandle ==&lt;br /&gt;
Takes PID-descriptor and a process handle.&lt;br /&gt;
&lt;br /&gt;
== RegisterModuleInfoWithUserProcessHandle ==&lt;br /&gt;
Takes a PID-descriptor, a process handle and 2 input u64s (&#039;&#039;&#039;nrr_address&#039;&#039;&#039; and &#039;&#039;&#039;nrr_size&#039;&#039;&#039;). &lt;br /&gt;
&lt;br /&gt;
First, this validates that the pid descriptor matches the pid for the process handle sent to this-&amp;gt;Initialize() earlier. Then, this calls the same function as [[#RegisterModuleInfo|RegisterModuleInfo]], except using the passed process handle instead of the one sent to Initialize. &lt;br /&gt;
&lt;br /&gt;
When called from an ro:1 session, [[NRR|NrrKind]] must be 1 (JitPlugin). When called from ldr:ro session, [[NRR|NrrKind]] must be 0 (User).&lt;br /&gt;
&lt;br /&gt;
= ro:dmnt =&lt;br /&gt;
This is &amp;quot;nn::ro::detail::IDebugMonitorInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetProcessModuleInfo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetProcessModuleInfo ==&lt;br /&gt;
Same as [[Loader_services#GetProcessModuleInfo|GetProcessModuleInfo]] from [[Loader_services#ldr:dmnt|ldr:dmnt]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13284</id>
		<title>20.1.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.1.0&amp;diff=13284"/>
		<updated>2025-05-28T17:34:51Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* BootImagePackages */ Kernel changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.1.0 system update was released on May 28, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     Visual updates have been made to the Parental Control settings.&lt;br /&gt;
*     The sound that plays when Nintendo Switch Online is launched from the HOME Menu has been changed.&lt;br /&gt;
*     General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
*   Note: If performing a system transfer from Nintendo Switch to Nintendo Switch 2 using local communication, the Nintendo Switch console will need to be updated to this latest system version to perform the transfer. See System Transfer from Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2 for more information.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, NgWord, SsidList, LocalNews, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware, 0100000000000859, 010000000000085C.&lt;br /&gt;
** Applets: qlaunch, auth, controller, dataErase, error, netConnect, playerSelect, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, splay.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump): none.&lt;br /&gt;
&lt;br /&gt;
Sysmodules were rebuilt with latest SDK, unless noted otherwise the only .text changes are from sdkver-update / logging-constants-update. The sysmodules with actual changes are (besides ones with IPC changes):&lt;br /&gt;
* bcat, jit, ...&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cruiser.bfsar&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnMoonIntro/list.jpg&amp;quot; updated, &amp;quot;/image/LnMoonIntro/main.jpg&amp;quot; updated, &amp;quot;/message/CNzhT/&amp;quot; added&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* ControllerFirmware: &amp;quot;/FirmwareInfo.csv&amp;quot; updated, &amp;quot;/tera_fullkey_ota.bin&amp;quot; updated, &amp;quot;/tera_fullkey_ota_iap.bin&amp;quot; updated, &amp;quot;/tera_ota.bin&amp;quot; updated, &amp;quot;/tera_ota_iap.bin&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth.bfsar&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/error.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonCNzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUde.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUen.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUes.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUfr.bntx&amp;quot; removed&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUit.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUnl.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUpt.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonEUru.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonJPja.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonTWzh.bntx&amp;quot; added&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSen.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSes.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSfr.bntx&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/LogoMoonUSpt.bntx&amp;quot; added&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect.bfsar&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/infoLHub.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoPtcl.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimerOver.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoTimer.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage.bfsar&amp;quot; updated&lt;br /&gt;
* splay applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/splay_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/splay.bfsar&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Unknown Interface prev-version: 0x710008741C&lt;br /&gt;
* Unknown Interface cur-version: 0x710008741C&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     214 - inbytes: 0x8, outbytes: 0x1D&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:    1158 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    1159 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:   120 - outbytes: 0x28 -&amp;gt; 0x2C (final state: inbytes: 0x0, outbytes: 0x2C)&lt;br /&gt;
* Unknown Interface prev-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055E0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A4F60 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264B34 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100264DCC [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100265220 [ID = 0x36f3a242]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002654FC [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001A495C [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface prev-version: 0x71002636E8 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266784 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265338 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A5D44 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266A1C [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026714C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A6348 [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100266E70 [ID = 0x36f3a242]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Changed:   292 - outinterfaces: [&#039;0x7100264B34 [ID = 0x3af03446]&#039;] -&amp;gt; [&#039;0x7100266784 [ID = 0x3af03446]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266784 [ID = 0x3af03446]&#039;])&lt;br /&gt;
** Changed:   293 - outinterfaces: [&#039;0x7100264DCC [ID = 0x38f0bb3d]&#039;] -&amp;gt; [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100266A1C [ID = 0x38f0bb3d]&#039;])&lt;br /&gt;
** Changed:   350 - outinterfaces: [&#039;0x7100265220 [ID = 0x36f3a242]&#039;] -&amp;gt; [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;] (final state: inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100266E70 [ID = 0x36f3a242]&#039;])&lt;br /&gt;
** Changed:   352 - outinterfaces: [&#039;0x71002654FC [ID = 0x0919ff75]&#039;] -&amp;gt; [&#039;0x710026714C [ID = 0x0919ff75]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710026714C [ID = 0x0919ff75]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   181 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
** Changed:   182 - outinterfaces: [&#039;0x71002636E8 [ID = 0x107aa108]&#039;] -&amp;gt; [&#039;0x7100265338 [ID = 0x107aa108]&#039;] (final state: inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100265338 [ID = 0x107aa108]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     933 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
** Added:    2183 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Changed:  4026 - outinterfaces: [&#039;0x71001A495C [ID = 0x04dea048]&#039;] -&amp;gt; [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A5D44 [ID = 0x04dea048]&#039;])&lt;br /&gt;
** Changed:  4027 - outinterfaces: [&#039;0x71001A4F60 [ID = 0x4e930893]&#039;] -&amp;gt; [&#039;0x71001A6348 [ID = 0x4e930893]&#039;] (final state: inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A6348 [ID = 0x4e930893]&#039;])&lt;br /&gt;
* Interface Changed: nn::ns::detail::IContentManagementInterface&lt;br /&gt;
** Added:      58 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      71 - inbytes: 0x1, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:      17 - buffers: [0x6], inbytes: 0x90, outbytes: 0x4&lt;br /&gt;
* Unknown Interface prev-version: 0x71000CE314 [ID = 0x359536d2]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000CE4B4 [ID = 0x359536d2]&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Changed:   460 - outinterfaces: [&#039;0x71000CE314 [ID = 0x359536d2]&#039;] -&amp;gt; [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000CE4B4 [ID = 0x359536d2]&#039;])&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     173 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Unknown Interface prev-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface cur-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Unknown Interface prev-version: 0x710014064C [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100140AD0 [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013C47C [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100141A58 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface prev-version: 0x710013E13C [ID = 0x8cf617a1]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013C728 [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001408F8 [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100141D04 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140D7C [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013E3E8 [ID = 0x8cf617a1]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Changed:  2100 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2110 - outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;] -&amp;gt; [&#039;0x710013C728 [ID = 0x6e021695]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C728 [ID = 0x6e021695]&#039;])&lt;br /&gt;
** Changed:  2200 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2210 - outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;] -&amp;gt; [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E3E8 [ID = 0x8cf617a1]&#039;])&lt;br /&gt;
** Changed:  2250 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2260 - outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;] -&amp;gt; [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001408F8 [ID = 0x29d8801c]&#039;])&lt;br /&gt;
** Changed:  2300 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2310 - outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;] -&amp;gt; [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140D7C [ID = 0xeb5e4ee2]&#039;])&lt;br /&gt;
** Changed:  2400 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
** Changed:  2420 - outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;] -&amp;gt; [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;] (final state: inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141D04 [ID = 0x3c7c9db7]&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x7100133FE0 [ID = 0x17291af3]&lt;br /&gt;
* Unknown Interface prev-version: 0x71001357F4 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013A720 [ID = 0xa036ce80]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100138F0C [ID = 0x17291af3]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IDaemonController&lt;br /&gt;
** Changed:    13 - outinterfaces: [&#039;0x71001357F4 [ID = 0xa036ce80]&#039;, None] -&amp;gt; [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710013A720 [ID = 0xa036ce80]&#039;, None])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:  1000 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Changed:   800 - outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;] -&amp;gt; [&#039;0x7100138F0C [ID = 0x17291af3]&#039;] (final state: buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100138F0C [ID = 0x17291af3]&#039;])&lt;br /&gt;
* Interface Changed: nn::olsc::srv::ITransferTaskListController&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IRemoteStorageController&#039;]&lt;br /&gt;
** Added:      28 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      30 - inbytes: 0x1, outbytes: 0x38&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      50 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* &amp;quot;/nx/package2&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* cpu::DoCoreInterruptBarrier now uses a KLightLock instead of a KSpinLock.&lt;br /&gt;
* Sleep entry now waits 1920 ticks after synchronizing cores and before saving the interrupt manager&lt;br /&gt;
* KInterruptController::SaveLocalState/RestoreLocalState now saves and restores spendsgir&lt;br /&gt;
&lt;br /&gt;
=== [[JIT_services|jit]] ===&lt;br /&gt;
The only updated func was L_177b0:&lt;br /&gt;
* The order of the validation after magicnum-check ([[NRR]]) was swapped.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-05-28_00-02-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.0.0&amp;diff=13207</id>
		<title>20.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.0.0&amp;diff=13207"/>
		<updated>2025-05-01T21:51:17Z</updated>

		<summary type="html">&lt;p&gt;SciresM: improve kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.0.0 system update was released on April 30, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     The following icons for new features have been added to the HOME Menu:&lt;br /&gt;
*     	&lt;br /&gt;
*           Vitrual Game Card &lt;br /&gt;
*           	&lt;br /&gt;
*               Purchased Nintendo Switch digital software, DLC, and some free software, are now virtual game cards and displayed in a list in this menu.&lt;br /&gt;
*               You can virtually load and eject virtual game cards between up to two Nintendo Switch systems.&lt;br /&gt;
*               Virtual game cards can be lent to others in the same Nintendo Account family group. For more information, see Virtual Game Card Guide.&lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*           GameShare &lt;br /&gt;
*           	&lt;br /&gt;
*               Compatible software can be shared from a Nintendo Switch&amp;amp;nbsp;2 system to other nearby system(s) to play together. &lt;br /&gt;
*               	&lt;br /&gt;
*                   You can only play together via local wireless, and the Nintendo Switch&amp;amp;nbsp;2 system must initiate GameShare.&lt;br /&gt;
*                   This feature cannot be used between two Nintendo Switch, Nintendo Switch – OLED Model and/or Nintendo Switch Lite systems.&lt;br /&gt;
*                 &lt;br /&gt;
*               &lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     User-Verification Settings has been added under User &amp;gt; User Settings. &lt;br /&gt;
*     &lt;br /&gt;
*       You can restrict access to the Virtual Game Card menu by requiring entry of a PIN or signing in to your Nintendo Account.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     Online License Settings has been added. &lt;br /&gt;
*     &lt;br /&gt;
*       When turned on, you can play downloaded software or DLC you&#039;ve purchased while the system is connected to the internet, even if you don&#039;t have the virtual game card loaded.&lt;br /&gt;
*       For more information, please refer to the details about the option on the System Settings screen.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The Nintendo eShop and Nintendo Switch News icon colors on the HOME Menu have been changed.&lt;br /&gt;
*     Multiple save data can be selected and transferred at once in “Transfer Your Save Data” menu.&lt;br /&gt;
*     System Transfer to Nintendo Switch&amp;amp;nbsp;2 has been added under System Settings &amp;gt; System. &lt;br /&gt;
*     	&lt;br /&gt;
*           You can perform a system transfer from your Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2 using local communication.&lt;br /&gt;
*           	&lt;br /&gt;
*               	For users that will lose access to their Nintendo Switch before receiving their Nintendo Switch&amp;amp;nbsp;2, there is an option to upload system transfer data to a dedicated server which can then be retrieved on their Nintendo Switch&amp;amp;nbsp;2. After you upload your system transfer data to the dedicated server, the Nintendo Switch system will be initialized to factory settings, so only perform this transfer if you’ll be able to complete the transfer on Nintendo Switch&amp;amp;nbsp;2.&lt;br /&gt;
*               If you want to continue using your Nintendo Switch until you have a Nintendo Switch&amp;amp;nbsp;2, we recommend completing the system transfer using local communication after you have acquired a Nintendo Switch&amp;amp;nbsp;2 system. &lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*           An internet connection and Nintendo Account is required to complete both local and the server-based system transfer service.&lt;br /&gt;
*           For more information, see System Transfer from Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The appearance of some user icons have been updated.&lt;br /&gt;
*   &lt;br /&gt;
*   For detailed information on Nintendo Switch&amp;amp;nbsp;2, see the Nintendo website.&lt;br /&gt;
*   Note that the use of “Primary Console” has been deprecated with the transition to virtual game cards, and “Pass-enabled console” will be used instead. On a console set as the “Pass-enabled console” for a user, all users on the console can access certain subscriptions or passes for some software. For more information, see How to Set or Change the Pass-Enabled Console for a Nintendo Account.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following new titles were added: 0100000000000859, 010000000000085C, 0100000000001048 (splay).&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, AvatarImage, LocalNews, UrlBlackList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, controller, dataErase, error, netConnect, playerSelect, swkbd, miiEdit, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* bluetooth: Name updated: bluetooth -&amp;gt; bluetooth.autog.&lt;br /&gt;
* hid: Service access: added lm.&lt;br /&gt;
* wlan: Service access: added erpt:c, pm:bm.&lt;br /&gt;
* ns: Service access: added hid:sys, removed hid.&lt;br /&gt;
* capsrv: Service access: added srepo:u.&lt;br /&gt;
* erpt: Fac.FsAccessFlag updated: set bitmask 0x0000080000000000 (bit43).&lt;br /&gt;
* pctl: MainThreadStackSize updated: 0x4000 -&amp;gt; 0x6000.&lt;br /&gt;
* npns: Service server access: added npns:a. KernelCap HandleTableSize: updated HandleTableSize = 0x80 -&amp;gt; 0x100.&lt;br /&gt;
* eclct: Service access: added pctl:s, pm:bm, srepo:a.&lt;br /&gt;
* creport: Service access: removed fsp-srv. SVC access: removed CreateSession, AcceptSession, ReplyAndReceiveLight, ReplyAndReceive, ReplyAndReceiveWithUserBuffer, CreateEvent.&lt;br /&gt;
* ro: Service access: removed csrng.&lt;br /&gt;
* migration: Service access: added nifm:a, notif:s, pctl:s, removed nifm:s.&lt;br /&gt;
* omm: Service access: added time:al.&lt;br /&gt;
* cabinet: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* controller: Service access: added bsd:a, removed bsd:u, htcs.&lt;br /&gt;
* dataErase: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
* error: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* playerSelect: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* swkbd: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
* overlayDisp: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* photoViewer: Service access: added bsd:a, htcs:sys, removed bsd:s, htcs.&lt;br /&gt;
* LibAppletLns: Service access: added ns:sweb, removed ns:web.&lt;br /&gt;
* myPage: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* maintenance: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services#CertStore|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated, &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/effective_tld_names.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageFilteringTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageSubFrameTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/skin/&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/Skin.dat&amp;quot; removed&lt;br /&gt;
** &amp;quot;/browser/UserCss.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/BrowserOffscreenDrawer.bnsh&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/MediaPlayerDrawer.bnsh&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Browse/MouseEffect.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/MediaPlayer/MovieCanvasNative.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/labelConversionTable.json&amp;quot; added&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/core_2/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/&amp;quot; added&lt;br /&gt;
** &amp;quot;/shader/OceanShader.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/cruiser.bfsar&amp;quot; updated&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/immersion.png&amp;quot; removed&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/js/tapaction.js&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* AvatarImage:&lt;br /&gt;
** &amp;quot;/chara/00000001.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000002.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000003.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000004.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000005.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000006.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000A.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000B.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000D.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000E.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000F.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000010.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000011.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000012.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000034.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000035.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000036.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/DatabaseInfo.bin&amp;quot; updated&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnShopIntro/list.jpg&amp;quot; updated, &amp;quot;/image/LnShopIntro/main.jpg&amp;quot; updated, &amp;quot;/image/LnSupIntro/main_Terra.jpg&amp;quot; removed, &amp;quot;/message/CNzhT/&amp;quot; removed, &amp;quot;/message/revision.txt&amp;quot; updated&lt;br /&gt;
* UrlBlackList: &amp;quot;/listLnsGlobal.txt&amp;quot; updated&lt;br /&gt;
* FontNintendoExtension: &amp;quot;/nintendo_ext2_003.bfttf&amp;quot; updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/icon/hatena174.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/hatena.jpg&amp;quot; updated&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareFrom_ForDemo.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareFrom_ForDemo.png&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareTo_ForDemo.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareTo_ForDemo.png&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/SubstituteUserIcon.jpg&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/DataTransfer.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/Vgc.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzh/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzh/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzh/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/EUde/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUde/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUde/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/IcoPctl.bntx&amp;quot; removed&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth_module.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/cabinet.bfsar&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/controller.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/controller_module.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/icon/&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/hatena.jpg&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/dataErase.bfsar&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/error.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/IcoPctl.bntx&amp;quot; removed&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/netConnect.bfsar&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Pin.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect_module.bksnd&amp;quot; updated&lt;br /&gt;
* swkbd applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/swkbd_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/swkbd.bfsar&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/icon/hatena174.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/hatena.jpg&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/batteryIn.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/batteryOut.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoAlarm.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoCapture.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoLHub.raw&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/infoPtcl.raw&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/infoReactionError.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/photoViewer.bfsar&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/starter.bfsar&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage_module.bksnd&amp;quot; updated&lt;br /&gt;
* maintenance applet:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/maintenance_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/maintenance.bfsar&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::settings::IFirmwareDebugSettingsServer&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::settings::ISystemSettingsServer&lt;br /&gt;
** Added:     263 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     264 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:     282 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     283 - inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Added:     289 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     300 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     301 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     306 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     307 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::IDownloadContext&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x48&lt;br /&gt;
* Unknown Interface prev-version: 0x71000844C0&lt;br /&gt;
* Unknown Interface cur-version: 0x710008741C&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   20107 - buffer_entry_sizes: [0x800], buffers: [0x1A], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   20202 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Removed: 20302 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Removed: 20303 - buffer_entry_sizes: [0x380], buffers: [0x1A], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Removed: 20304 - buffer_entry_sizes: [0x400], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:   20402 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:   30218 - buffer_entry_sizes: [0x48, 0x48], buffers: [0x19, 0x19], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
** Removed: 30300 - buffer_entry_sizes: [0x1000], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Removed: 30301 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   30403 - buffer_entry_sizes: [0x48], buffers: [0x19], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x71000844C0&#039;] -&amp;gt; [&#039;0x710008741C&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710008741C&#039;])&lt;br /&gt;
* Interface Changed: nn::nifm::detail::IGeneralService&lt;br /&gt;
** Added:      48 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      53 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      54 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      55 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      56 - buffer_entry_sizes: [0x1438], buffers: [0x32], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      57 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Removed:    21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::psm::IPsmSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::tc::IManager&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x20&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x70&lt;br /&gt;
* Interface Changed: nn::socket::sf::IClient&lt;br /&gt;
** Added:      39 - inbytes: 0x10, outbytes: 0x8, outhandles: [1, 1]&lt;br /&gt;
** Added:      40 - buffers: [0x21], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     213 - inbytes: 0x8, outbytes: 0x1D&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:     137 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:    1005 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:     333 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** Added:     334 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], pid: True&lt;br /&gt;
** Added:     551 - buffer_entry_sizes: [0x48], buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     711 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     712 - inbytes: 0x8, outbytes: 0x34&lt;br /&gt;
** Added:    1012 - inbytes: 0x8, outbytes: 0x1D&lt;br /&gt;
** Added:    1322 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], pid: True&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioSnoopManager&lt;br /&gt;
** Added:       1 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       2 - buffer_entry_sizes: [0x40], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       3 - buffer_entry_sizes: [0x40], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioSystemManagerForApplet&lt;br /&gt;
** Removed:    10 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:       6 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:      25 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Changed:    40 - buffer_entry_sizes: [0x1000] -&amp;gt; [0x2000], inbytes: 0x0 -&amp;gt; 0x4 (final state: buffer_entry_sizes: [0x2000], buffers: [0x16], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
** Removed:    41 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed: 10000 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed: 10001 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed: 10002 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Changed: 10100 - buffer_entry_sizes: {} -&amp;gt; [0x400], buffers: {} -&amp;gt; [0x16], outbytes: 0x9 -&amp;gt; 0x0 (final state: buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Removed: 10102 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed: 10103 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed: 10104 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed: 10105 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed: 10106 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:   10200 - buffer_entry_sizes: [0x100], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed: 50001 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::lm::ILogger&lt;br /&gt;
** Added:       2 - buffers: [0x21], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       3 - buffers: [0x21], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Changed:     6 - outbytes: 0x58 -&amp;gt; 0x5C (final state: inbytes: 0x0, outbytes: 0x5C)&lt;br /&gt;
** Removed:     8 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:   111 - inbytes: 0x18 -&amp;gt; 0x40 (final state: inbytes: 0x40, outbytes: 0x0)&lt;br /&gt;
** Changed:   120 - outbytes: 0x18 -&amp;gt; 0x28 (final state: inbytes: 0x0, outbytes: 0x28)&lt;br /&gt;
** Added:     130 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     140 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     900 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Changed:   505 - inbytes: 0x4 -&amp;gt; 0x2 (final state: inbytes: 0x2, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Changed:   505 - inbytes: 0x4 -&amp;gt; 0x2 (final state: inbytes: 0x2, outbytes: 0x0)&lt;br /&gt;
* Unknown Interface prev-version: 0x7100004EF0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000055E0&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstManager&lt;br /&gt;
** Added:       7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Changed:    13 - inbytes: 0x8 -&amp;gt; 0x4, outbytes: 0x0 -&amp;gt; 0x2 (final state: inbytes: 0x4, outbytes: 0x2)&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086504 [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085DD4 [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000846F0 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100085B3C [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100086228 [ID = 0x36f3a242]&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     251 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     292 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100085B3C [ID = 0x3af03446]&#039;]&lt;br /&gt;
** Added:     293 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100085DD4 [ID = 0x38f0bb3d]&#039;]&lt;br /&gt;
** Added:     350 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100086228 [ID = 0x36f3a242]&#039;]&lt;br /&gt;
** Added:     351 - inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     352 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100086504 [ID = 0x0919ff75]&#039;]&lt;br /&gt;
** Added:     353 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Removed:   411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:   412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     413 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     251 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     292 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100085B3C [ID = 0x3af03446]&#039;]&lt;br /&gt;
** Added:     293 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100085DD4 [ID = 0x38f0bb3d]&#039;]&lt;br /&gt;
** Added:     350 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100086228 [ID = 0x36f3a242]&#039;]&lt;br /&gt;
** Added:     351 - inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     352 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100086504 [ID = 0x0919ff75]&#039;]&lt;br /&gt;
** Added:     353 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Removed:   411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:   412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     413 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Removed:   180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     181 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000846F0 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Added:     182 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71000846F0 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Removed:   204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Removed:   180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     181 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000846F0 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Added:     182 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71000846F0 [ID = 0x107aa108]&#039;]&lt;br /&gt;
* Unknown Interface cur-version: 0x710026550C [ID = 0x0919ff75]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100264DDC [ID = 0x38f0bb3d]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A4F6C [ID = 0x4e930893]&lt;br /&gt;
* Unknown Interface cur-version: 0x71002636F8 [ID = 0x107aa108]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001A4968 [ID = 0x04dea048]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100264B44 [ID = 0x3af03446]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100265230 [ID = 0x36f3a242]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     251 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     292 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100264B44 [ID = 0x3af03446]&#039;]&lt;br /&gt;
** Added:     293 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x7100264DDC [ID = 0x38f0bb3d]&#039;]&lt;br /&gt;
** Added:     350 - inbytes: 0x1, outbytes: 0x0, outinterfaces: [&#039;0x7100265230 [ID = 0x36f3a242]&#039;]&lt;br /&gt;
** Added:     351 - inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     352 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710026550C [ID = 0x0919ff75]&#039;]&lt;br /&gt;
** Added:     353 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Removed:   411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:   412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     413 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Removed:   191 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     403 - buffers: [0xA], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     404 - buffers: [0x5], inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:     405 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Removed:   180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     181 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71002636F8 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Added:     182 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71002636F8 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Removed:   204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Removed:   180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     181 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71002636F8 [ID = 0x107aa108]&#039;]&lt;br /&gt;
** Added:     182 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;0x71002636F8 [ID = 0x107aa108]&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     422 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     423 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     424 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:     425 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:     426 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     427 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     513 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     514 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     515 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     917 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     918 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     919 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     920 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     921 - inbytes: 0x8, outbytes: 0x80&lt;br /&gt;
** Added:     922 - buffers: [0x6], inbytes: 0x88, outbytes: 0x4&lt;br /&gt;
** Added:     923 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     928 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     929 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::ns::detail::IProgressAsyncResult&#039;]&lt;br /&gt;
** Added:     930 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     931 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    1508 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    1509 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    1510 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1511 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1512 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Changed:  1704 - buffer_entry_sizes: [0x70, 0x8] -&amp;gt; [0x78, 0x8] (final state: buffer_entry_sizes: [0x78, 0x8], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Added:    1706 - buffer_entry_sizes: [0x58, 0x8], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    2019 - buffer_entry_sizes: [0x100, 0x100, 0x100], buffers: [0x15, 0x5, 0x5], inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    2052 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    2053 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:    2362 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2363 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2364 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2365 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2366 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2367 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2368 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Changed:  2402 - buffer_entry_sizes: [0x20] -&amp;gt; [0x28] (final state: buffer_entry_sizes: [0x28], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Added:    2525 - inbytes: 0x20, outbytes: 0x1&lt;br /&gt;
** Added:    4000 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:    4004 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    4006 - inbytes: 0x45, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4007 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4008 - inbytes: 0x18, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4009 - inbytes: 0x18, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4010 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4011 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4012 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4013 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4015 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4017 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4019 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4020 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4021 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4022 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    4023 - inbytes: 0x0, outbytes: 0x58&lt;br /&gt;
** Added:    4024 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4025 - inbytes: 0x28, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4026 - inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A4968 [ID = 0x04dea048]&#039;]&lt;br /&gt;
** Added:    4027 - inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;0x71001A4F6C [ID = 0x4e930893]&#039;]&lt;br /&gt;
** Added:    4028 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4029 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4030 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4031 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4032 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:    4033 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4034 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:    4035 - inbytes: 0x28, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4037 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4038 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4039 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4040 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4041 - inbytes: 0x45, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4042 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4043 - inbytes: 0x45, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4044 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x4, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4045 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4046 - inbytes: 0x50, outbytes: 0x0&lt;br /&gt;
** Added:    4049 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4050 - buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:    4051 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4052 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4053 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4054 - inbytes: 0x0, outbytes: 0x22&lt;br /&gt;
** Added:    4055 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4056 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4057 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    4058 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4059 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4060 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4061 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4062 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:    4063 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4064 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4065 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x4, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4066 - buffer_entry_sizes: [0x200, 0x0, 0x0], buffers: [0x16, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4067 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    4068 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4069 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4070 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4071 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4072 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:    4073 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4074 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    4075 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4076 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    4077 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4078 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4079 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4080 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4081 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4083 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4084 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4085 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:    4086 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4087 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4088 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    4089 - inbytes: 0x0, outbytes: 0x58&lt;br /&gt;
** Added:    4090 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4091 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4092 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4093 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    4094 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    4095 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    4096 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    4097 - inbytes: 0x22, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDownloadTaskInterface&lt;br /&gt;
** Added:     710 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
** Added:      27 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:      28 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IECommerceInterface&lt;br /&gt;
** Added:       8 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:       9 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:      10 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:      11 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:      12 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:      13 - buffer_entry_sizes: [0x0, 0x8], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IFactoryResetInterface&lt;br /&gt;
** Added:     107 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     108 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:       7 - inbytes: 0x8, outbytes: 0x80&lt;br /&gt;
** Added:       8 - buffers: [0x6], inbytes: 0x88, outbytes: 0x4&lt;br /&gt;
** Added:       9 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      10 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      11 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      12 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      13 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      14 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      15 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:      16 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationRecordInterface&lt;br /&gt;
** Added:       3 - buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   12010 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed: 13001 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Changed: 13002 - inbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:   13003 - buffers: [0x6], inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:   13004 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:      20 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     121 - buffer_entry_sizes: [0x20, 0x10], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     122 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     123 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x18, outbytes: 0x8&lt;br /&gt;
** Added:     170 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     171 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     172 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - buffer_entry_sizes: [0x20, 0x0], buffers: [0x5, 0x6], inbytes: 0x2, outbytes: 0x0&lt;br /&gt;
** Added:     600 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:    8031 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    8032 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:   50021 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:   50022 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:   50023 - buffers: [0x6], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** Added:   50024 - buffers: [0x45], inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:   50031 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:   50032 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlService&lt;br /&gt;
** Added:    2015 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    2016 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Changed:  2202 - inbytes: 0x30 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x200, 0x0], buffers: [0x15, 0x45], inbytes: 0x70, outbytes: 0x8)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2436 - inbytes: 0x48, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000CE314 [ID = 0x359536d2]&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x80], buffers: [0x15], inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::am::service::ISystemAppletProxy&#039;], pid: True&lt;br /&gt;
** Added:     460 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000CE314 [ID = 0x359536d2]&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:     311 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     322 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     340 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     341 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     342 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     350 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
** Added:     360 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationAccessor&lt;br /&gt;
** Added:     300 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     301 - inbytes: 0x0, outbytes: 0x20, outinterfaces: [&#039;nn::am::service::IStorage&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Added:     112 - buffer_entry_sizes: [0x18, 0x8], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     113 - buffer_entry_sizes: [0x18, 0x8], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     210 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     220 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     310 - inbytes: 0x1, ininterfaces: [None], outbytes: 0x0&lt;br /&gt;
** Added:     320 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::am::service::IAudioController&lt;br /&gt;
** Added:       5 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:     600 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Added:     430 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     431 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     910 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::am::service::ILibraryAppletAccessor&lt;br /&gt;
** Added:      90 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ILibraryAppletCreator&lt;br /&gt;
** Added:       3 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::ILibraryAppletAccessor&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:     200 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     210 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     211 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     220 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     221 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     230 - inbytes: 0x4, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslConnection&lt;br /&gt;
** Added:      36 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      37 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Changed:    31 - buffer_entry_sizes: [0x10] -&amp;gt; [0x18] (final state: buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x20, outbytes: 0x10)&lt;br /&gt;
** Removed:    92 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Changed:   119 - buffer_entry_sizes: {} -&amp;gt; [0x18], buffers: {} -&amp;gt; [0x6], outbytes: 0x18 -&amp;gt; 0x4 (final state: buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x10, outbytes: 0x4)&lt;br /&gt;
** Changed:   143 - inbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;])&lt;br /&gt;
** Added:     151 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     152 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     153 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     154 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     155 - inbytes: 0x22, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     156 - inbytes: 0x22, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     157 - inbytes: 0x4A, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:     158 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     159 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     160 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     161 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     162 - buffer_entry_sizes: [0x10, 0x8], buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     163 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     164 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     165 - buffer_entry_sizes: [0x18, 0x18], buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     166 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x50, outbytes: 0x10&lt;br /&gt;
** Added:     167 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     168 - buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x14, outbytes: 0x4&lt;br /&gt;
** Added:     169 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     170 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     171 - inbytes: 0x11, outbytes: 0x0&lt;br /&gt;
** Added:     172 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:    2000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2001 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2002 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2003 - buffer_entry_sizes: [0x8, 0x8], buffers: [0x5, 0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2004 - inbytes: 0x28, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2007 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2011 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2012 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2013 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2014 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2015 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2016 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2017 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2018 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2019 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2020 - buffers: [0x5], inbytes: 0x1, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2021 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2022 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2023 - inbytes: 0x25, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2024 - buffer_entry_sizes: [0x80, 0x80], buffers: [0x15, 0x15], inbytes: 0x25, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2025 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2026 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2027 - inbytes: 0x40, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2028 - inbytes: 0x40, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2029 - buffers: [0x5], inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2030 - inbytes: 0x22, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2031 - buffers: [0x5], inbytes: 0x25, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2032 - inbytes: 0x25, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2033 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2034 - inbytes: 0x25, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2035 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2036 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2037 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2038 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2039 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2040 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2041 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    2042 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2043 - inbytes: 0x20, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2044 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2045 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2046 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2047 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2048 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2049 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2050 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    2051 - buffer_entry_sizes: [0x8, 0x8], buffers: [0x5, 0x5], inbytes: 0x28, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Added:      13 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x14&lt;br /&gt;
** Added:      14 - buffers: [0x5, 0x5, 0x5, 0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IManager&lt;br /&gt;
** Removed:     5 - buffers: [0x6], inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
** Added:       6 - buffers: [0x6], inbytes: 0x14, outbytes: 0x4&lt;br /&gt;
** Added:      10 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Added:    9000 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotService&lt;br /&gt;
** Added:    2000 - buffer_entry_sizes: [0x88, 0x104], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x20&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    1019 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    1020 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    1050 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    1051 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:  1425 - buffer_entry_sizes: [0x60], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed:  1426 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed:  1427 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:    1459 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
** Added:    1501 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:    1958 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1959 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1960 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    2021 - inbytes: 0x0, outbytes: 0x8, outhandles: [1]&lt;br /&gt;
** Added:    2022 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:    2023 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    3001 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    9401 - buffer_entry_sizes: [0x60], buffers: [0x6], inbytes: 0x2, outbytes: 0x4&lt;br /&gt;
** Added:    9402 - buffer_entry_sizes: [0x60, 0x0], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    9403 - buffer_entry_sizes: [0x60], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    9404 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    9405 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x7100097948 [ID = 0xfe214da9]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100096B3C [ID = 0xdf171f31]&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Removed:    34 - buffer_entry_sizes: [0x8], buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      45 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      52 - buffers: [0x6, 0x9], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:      53 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100096B3C [ID = 0xdf171f31]&#039;]&lt;br /&gt;
** Added:      70 - buffers: [0x9, 0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [None]&lt;br /&gt;
** Changed:   143 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffers: [0x9], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;])&lt;br /&gt;
** Added:     146 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     147 - buffers: [0x9, 0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     203 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   301 - buffers: [0xA], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:   302 - buffer_entry_sizes: [0x10, 0x0], buffers: [0xA, 0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Removed:   303 - buffer_entry_sizes: [0x138, 0x138], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Removed:   304 - inbytes: 0x0, outbytes: 0x50&lt;br /&gt;
** Removed:   305 - buffer_entry_sizes: [0x48], buffers: [0x6], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Removed:   306 - buffers: [0x6, 0x9], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::notification::server::INotificationServices&lt;br /&gt;
** Added:    3000 - buffer_entry_sizes: [0x20], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    3010 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Added:     105 - buffer_entry_sizes: [0x0, 0x10], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1030 - buffer_entry_sizes: [0x10, 0x8, 0x0, 0x0], buffers: [0x6, 0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    1031 - buffer_entry_sizes: [0x138, 0x8], buffers: [0x15, 0x6], inbytes: 0x0, outbytes: 0x28&lt;br /&gt;
** Added:    1032 - buffer_entry_sizes: [0x8, 0x0, 0x0], buffers: [0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1033 - buffer_entry_sizes: [0x40, 0x10], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    1034 - buffer_entry_sizes: [0x50], buffers: [0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    1035 - inbytes: 0x18, outbytes: 0x80&lt;br /&gt;
** Added:    1036 - buffer_entry_sizes: [0x8, 0x0], buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:    1037 - buffer_entry_sizes: [0x10, 0x8, 0x0, 0x0], buffers: [0x6, 0x5, 0x5, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:    1601 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1602 - buffers: [0x5, 0x5, 0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:    1603 - buffer_entry_sizes: [0x20], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1604 - buffer_entry_sizes: [0x40, 0x20], buffers: [0x16, 0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1605 - buffer_entry_sizes: [0x80, 0x40], buffers: [0x16, 0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1606 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
** Added:      47 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:      48 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:      49 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** Added:      50 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IContinuousRecorder&lt;br /&gt;
** Added:       5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x710005ECA0 [ID = 0xef2a5618]&lt;br /&gt;
* Interface Changed: nn::mii::detail::IDatabaseService&lt;br /&gt;
** Removed:    27 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::mii::detail::IImageDatabaseService&lt;br /&gt;
** Added:      19 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pdm::detail::INotifyService&lt;br /&gt;
** Added:      20 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     100 - inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005ECA0 [ID = 0xef2a5618]&#039;]&lt;br /&gt;
** Added:     101 - inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;0x710005ECA0 [ID = 0xef2a5618]&#039;]&lt;br /&gt;
* Interface Changed: nn::pdm::detail::IQueryService&lt;br /&gt;
** Added:     100 - buffer_entry_sizes: [0x38], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x40, 0x40, 0x8], buffers: [0x6, 0x6, 0x5], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:     118 - buffer_entry_sizes: [0x18, 0x8], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     119 - buffer_entry_sizes: [0x18, 0x8], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
** Added:     108 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Unknown Interface cur-version: 0x710014064C [ID = 0x29d8801c]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100140AD0 [ID = 0xeb5e4ee2]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013C47C [ID = 0x6e021695]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100141A58 [ID = 0x3c7c9db7]&lt;br /&gt;
* Unknown Interface cur-version: 0x710013E13C [ID = 0x8cf617a1]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Added:     101 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Changed:   201 - buffer_entry_sizes: [0x128] -&amp;gt; [0x130] (final state: buffer_entry_sizes: [0x130], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Removed:   500 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Removed:     1 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     102 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     202 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     203 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Removed:   500 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::migration::user::IClient&lt;br /&gt;
** Added:     102 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::migration::user::IServer&lt;br /&gt;
** Added:     102 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Added:       1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       2 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:    10 - inbytes: 0x0, outbytes: 0xC&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Removed:  1100 - buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x20, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::migration::savedata::IServer&#039;]&lt;br /&gt;
** Added:    2001 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    2010 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    2100 - buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;]&lt;br /&gt;
** Added:    2110 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013C47C [ID = 0x6e021695]&#039;]&lt;br /&gt;
** Added:    2200 - buffer_entry_sizes: [0x100], buffers: [0x19], inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;]&lt;br /&gt;
** Added:    2210 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710013E13C [ID = 0x8cf617a1]&#039;]&lt;br /&gt;
** Added:    2220 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    2230 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    2231 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    2232 - inbytes: 0x0, outbytes: 0x21&lt;br /&gt;
** Added:    2233 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2234 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2250 - inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;]&lt;br /&gt;
** Added:    2260 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710014064C [ID = 0x29d8801c]&#039;]&lt;br /&gt;
** Added:    2270 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    2280 - inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:    2300 - inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;]&lt;br /&gt;
** Added:    2310 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100140AD0 [ID = 0xeb5e4ee2]&#039;]&lt;br /&gt;
** Added:    2400 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;]&lt;br /&gt;
** Added:    2420 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x7100141A58 [ID = 0x3c7c9db7]&#039;]&lt;br /&gt;
* Unknown Interface cur-version: 0x7100133FE0 [ID = 0x17291af3]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001357F4 [ID = 0xa036ce80]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IDaemonController&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71001357F4 [ID = 0xa036ce80]&#039;, None]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;]&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IRemoteStorageController&lt;br /&gt;
** Added:      26 - buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:      27 - inbytes: 0x8, outbytes: 0x38&lt;br /&gt;
** Added:     800 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100133FE0 [ID = 0x17291af3]&#039;]&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      41 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:       7 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:       8 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     118 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     119 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     225 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     303 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      38 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
** Changed:     0 - buffer_entry_sizes: [0x301, 0x0] -&amp;gt; {}, buffers: [0x19, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Added:      75 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:      17 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::ncm::IContentMetaDatabase&lt;br /&gt;
** Added:      27 - inbytes: 0x1, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:       7 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:       8 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     118 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     119 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     225 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     303 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      38 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
** Changed:     0 - buffer_entry_sizes: [0x301, 0x0] -&amp;gt; {}, buffers: [0x19, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Added:      75 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:      17 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::ncm::IContentMetaDatabase&lt;br /&gt;
** Added:      27 - inbytes: 0x1, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstManager&lt;br /&gt;
** Added:       7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Changed:    13 - inbytes: 0x8 -&amp;gt; 0x4, outbytes: 0x0 -&amp;gt; 0x2 (final state: inbytes: 0x4, outbytes: 0x2)&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   12010 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed: 13001 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Changed: 13002 - inbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:   13003 - buffers: [0x6], inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:   13004 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:       7 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:       8 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     118 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     119 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     225 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     303 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      38 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
** Changed:     0 - buffer_entry_sizes: [0x301, 0x0] -&amp;gt; {}, buffers: [0x19, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Added:      75 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:      17 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::ncm::IContentMetaDatabase&lt;br /&gt;
** Added:      27 - inbytes: 0x1, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:       7 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:       8 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     118 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     119 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     225 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     303 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      38 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
** Changed:     0 - buffer_entry_sizes: [0x301, 0x0] -&amp;gt; {}, buffers: [0x19, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Added:      75 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:      17 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::ncm::IContentMetaDatabase&lt;br /&gt;
** Added:      27 - inbytes: 0x1, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstManager&lt;br /&gt;
** Added:       7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Changed:    13 - inbytes: 0x8 -&amp;gt; 0x4, outbytes: 0x0 -&amp;gt; 0x2 (final state: inbytes: 0x4, outbytes: 0x2)&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   12010 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed: 13001 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Changed: 13002 - inbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:   13003 - buffers: [0x6], inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:   13004 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_13 (previously master_key_12). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* No/minimal compiler update&lt;br /&gt;
* crt0 was restructured, Cache Invalidation/sctlr mmu disable are now different assembly functions.&lt;br /&gt;
* Inverted boolean(s) in system control/targetsystem logic&lt;br /&gt;
** All KTargetSystem fields have inverted meaning&lt;br /&gt;
** KTargetSystem &amp;quot;is present&amp;quot; bool is now inverted&lt;br /&gt;
** MersenneTwister &amp;quot;is initialized&amp;quot; bool is now inverted&lt;br /&gt;
* KPageTable::ChangeProperties now does a data synchronization barrier after calling the set-attrs lambda&lt;br /&gt;
* KPageTableImpl::MergePages now takes an argument for a callback to call after updating page table PTE entries.&lt;br /&gt;
** All callers on NX are KPageTable::NoteUpdated&lt;br /&gt;
** This causes TLB entries to be flushed/etc every time an entry is written instead of once at the end.&lt;br /&gt;
* KAddressSpaceInfo::GetBegin now takes a size as a third argument; this is unused on NX.&lt;br /&gt;
** This is presumably only for debug assertions, probably to assert size &amp;lt;= region size. &lt;br /&gt;
** This code seems used incorrectly/bugged; it is passed a number of pages by one caller but a size by others.&lt;br /&gt;
* KAddressSpaceInfo::GetSize now performs more complicated logic based on the input type.&lt;br /&gt;
** If address space not CreateProcessFlag_AddressSpace32BitWithoutAlias then the size is returned directly.&lt;br /&gt;
** Otherwise:&lt;br /&gt;
*** If the type is Heap, it returns the requested size + the alias size.&lt;br /&gt;
*** If the type is Alias, it returns 0.&lt;br /&gt;
** KProcess::InitializeByParam now sets m_max_process_memory to KAddressSpaceInfo::GetSize(..., Type_Heap) instead of getting the page table&#039;s heap size.&lt;br /&gt;
** KPageTableBase::InitializeForProcess has simpler calculation of region extents for 32BitWithoutAlias now.&lt;br /&gt;
* KPageTableBase::MapPageGroup_ now checks if the input permission has the execute bit set, and invalidates instruction cache if so.&lt;br /&gt;
** This fixes a correctness bug; this was used to map pages as ReadExecute by JIT svcs, so stale instruction cache could result before.&lt;br /&gt;
** KPageTableBase::UnmapPageGroup also now invalidates instruction cache after unmapping, if the memory had the execute bit set.&lt;br /&gt;
* KSecureSystemResource now has better checking for the case where resource limit is nullptr.&lt;br /&gt;
** This is impossible on NX.&lt;br /&gt;
** This includes checks in GetUsed/TotalUserPhysicalMemorySize&lt;br /&gt;
** KSecureSystemResource::Destroy now checks before calling ReleaseLimit&lt;br /&gt;
* KPageTableBase::SetProcessMemoryPermission changes:&lt;br /&gt;
** Function now uses PageTableOperation_ChangePermsAndRefresh instead of _ChangePermsAndRefreshAndFlushDataCache when the execute permission is set.&lt;br /&gt;
** Data cache store + instruction cache invalidate is now done before operating instead of after&lt;br /&gt;
** instruction cache invalidate is done after memory block manager is updated.&lt;br /&gt;
* El0SynchronousExceptionHandler now always does tlbi vae1 instead of doing that or tlbi aside1 depending on status bits.&lt;br /&gt;
* El1SynchronousExceptionHandler now always does tlbi vaae1 instead of doing that or tlbi vmalle1 depending on status bits.&lt;br /&gt;
** NOTE: The checks Nintendo did previously have been bugged for many years and did not work.&lt;br /&gt;
** These checks were fixed to actually work now.&lt;br /&gt;
* UserspaceAccess changes:&lt;br /&gt;
** UserspaceAccess functions are now all called through helper functions, which directly call UserspaceAccess::*&lt;br /&gt;
*** This is probably &amp;quot;UserspaceAccessChecked&amp;quot;, and likely for parity with the supervisor mode access function they added in 19.0.0.&lt;br /&gt;
** UserspaceAccess functions which previously had no callers have been deleted.&lt;br /&gt;
*** This includes UserspaceAccess::ClearUserMemory*.&lt;br /&gt;
* HandleException changes:&lt;br /&gt;
** After checking for thread termination, fixup is done on esr_el1/ec values.&lt;br /&gt;
*** If esr_ec is 0x20 or 0x24 (DataAbortEl0/InstructionAbortEl0):&lt;br /&gt;
**** If esr_el1 &amp;amp; 0x43F == 0x410 then pc is treated as 0&lt;br /&gt;
**** Otherwise, if pc is a kernel address, then esr_el1 has the ISFC bits set to hardcoded-value 4.&lt;br /&gt;
** This is also done in ReturnFromException&lt;br /&gt;
* Kernel::InitializeResourceManagers now initializes the managers in a different order.&lt;br /&gt;
* FindFreeArea was refactored in both KMemoryBlockManager and KPageTableBase to use shared common logic to compute the start and end of the guarded region to generate an address within.&lt;br /&gt;
** The core helper is a KMemoryBlockManager function. &lt;br /&gt;
** KMemoryBlockManager::FindFreeArea calls this helper twice (both inlined); KPageTable::FindFreeArea calls it once.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-04-30_00-03-37&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=20.0.0&amp;diff=13133</id>
		<title>20.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=20.0.0&amp;diff=13133"/>
		<updated>2025-04-30T02:27:51Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 20.0.0 system update was released on April 30, 2025 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   &lt;br /&gt;
*     The following icons for new features have been added to the HOME Menu:&lt;br /&gt;
*     	&lt;br /&gt;
*           Vitrual Game Card &lt;br /&gt;
*           	&lt;br /&gt;
*               Purchased Nintendo Switch digital software, DLC, and some free software, are now virtual game cards and displayed in a list in this menu.&lt;br /&gt;
*               You can virtually load and eject virtual game cards between up to two Nintendo Switch systems.&lt;br /&gt;
*               Virtual game cards can be lent to others in the same Nintendo Account family group. For more information, see Virtual Game Card Guide.&lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*           GameShare &lt;br /&gt;
*           	&lt;br /&gt;
*               Compatible software can be shared from a Nintendo Switch&amp;amp;nbsp;2 system to other nearby system(s) to play together. &lt;br /&gt;
*               	&lt;br /&gt;
*                   You can only play together via local wireless, and the Nintendo Switch&amp;amp;nbsp;2 system must initiate GameShare.&lt;br /&gt;
*                   This feature cannot be used between two Nintendo Switch, Nintendo Switch – OLED Model and/or Nintendo Switch Lite systems.&lt;br /&gt;
*                 &lt;br /&gt;
*               &lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     User-Verification Settings has been added under User &amp;gt; User Settings. &lt;br /&gt;
*     &lt;br /&gt;
*       You can restrict access to the Virtual Game Card menu by requiring entry of a PIN or signing in to your Nintendo Account.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     Online License Settings has been added. &lt;br /&gt;
*     &lt;br /&gt;
*       When turned on, you can play downloaded software or DLC you&#039;ve purchased while the system is connected to the internet, even if you don&#039;t have the virtual game card loaded.&lt;br /&gt;
*       For more information, please refer to the details about the option on the System Settings screen.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The Nintendo eShop and Nintendo Switch News icon colors on the HOME Menu have been changed.&lt;br /&gt;
*     Multiple save data can be selected and transferred at once in “Transfer Your Save Data” menu.&lt;br /&gt;
*     System Transfer to Nintendo Switch&amp;amp;nbsp;2 has been added under System Settings &amp;gt; System. &lt;br /&gt;
*     	&lt;br /&gt;
*           You can perform a system transfer from your Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2 using local communication.&lt;br /&gt;
*           	&lt;br /&gt;
*               	For users that will lose access to their Nintendo Switch before receiving their Nintendo Switch&amp;amp;nbsp;2, there is an option to upload system transfer data to a dedicated server which can then be retrieved on their Nintendo Switch&amp;amp;nbsp;2. After you upload your system transfer data to the dedicated server, the Nintendo Switch system will be initialized to factory settings, so only perform this transfer if you’ll be able to complete the transfer on Nintendo Switch&amp;amp;nbsp;2.&lt;br /&gt;
*               If you want to continue using your Nintendo Switch until you have a Nintendo Switch&amp;amp;nbsp;2, we recommend completing the system transfer using local communication after you have acquired a Nintendo Switch&amp;amp;nbsp;2 system. &lt;br /&gt;
*             &lt;br /&gt;
*           &lt;br /&gt;
*           An internet connection and Nintendo Account is required to complete both local and the server-based system transfer service.&lt;br /&gt;
*           For more information, see System Transfer from Nintendo Switch to Nintendo Switch&amp;amp;nbsp;2.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The appearance of some user icons have been updated.&lt;br /&gt;
*   &lt;br /&gt;
*   For detailed information on Nintendo Switch&amp;amp;nbsp;2, see the Nintendo website.&lt;br /&gt;
*   Note that the use of “Primary Console” has been deprecated with the transition to virtual game cards, and “Pass-enabled console” will be used instead. On a console set as the “Pass-enabled console” for a user, all users on the console can access certain subscriptions or passes for some software. For more information, see How to Set or Change the Pass-Enabled Console for a Nintendo Account.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following new titles were added: 0100000000000859, 010000000000085C, 0100000000001048 (splay).&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, AvatarImage, LocalNews, UrlBlackList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, ControllerIcon, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, controller, dataErase, error, netConnect, playerSelect, swkbd, miiEdit, LibAppletWeb, LibAppletShop, overlayDisp, photoViewer, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application, myPage, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* bluetooth: Name updated: bluetooth -&amp;gt; bluetooth.autog.&lt;br /&gt;
* hid: Service access: added lm.&lt;br /&gt;
* wlan: Service access: added erpt:c, pm:bm.&lt;br /&gt;
* ns: Service access: added hid:sys, removed hid.&lt;br /&gt;
* capsrv: Service access: added srepo:u.&lt;br /&gt;
* erpt: Fac.FsAccessFlag updated: set bitmask 0x0000080000000000 (bit43).&lt;br /&gt;
* pctl: MainThreadStackSize updated: 0x4000 -&amp;gt; 0x6000.&lt;br /&gt;
* npns: Service server access: added npns:a. KernelCap HandleTableSize: updated HandleTableSize = 0x80 -&amp;gt; 0x100.&lt;br /&gt;
* eclct: Service access: added pctl:s, pm:bm, srepo:a.&lt;br /&gt;
* creport: Service access: removed fsp-srv. SVC access: removed CreateSession, AcceptSession, ReplyAndReceiveLight, ReplyAndReceive, ReplyAndReceiveWithUserBuffer, CreateEvent.&lt;br /&gt;
* ro: Service access: removed csrng.&lt;br /&gt;
* migration: Service access: added nifm:a, notif:s, pctl:s, removed nifm:s.&lt;br /&gt;
* omm: Service access: added time:al.&lt;br /&gt;
* cabinet: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* controller: Service access: added bsd:a, removed bsd:u, htcs.&lt;br /&gt;
* dataErase: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
* error: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* playerSelect: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* swkbd: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
* overlayDisp: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* photoViewer: Service access: added bsd:a, htcs:sys, removed bsd:s, htcs.&lt;br /&gt;
* LibAppletLns: Service access: added ns:sweb, removed ns:web.&lt;br /&gt;
* myPage: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* maintenance: Service access: added bsd:a, htcs:sys, removed bsd:u, htcs.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services#CertStore|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated, &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/effective_tld_names.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageFilteringTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageSubFrameTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/skin/&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/Skin.dat&amp;quot; removed&lt;br /&gt;
** &amp;quot;/browser/UserCss.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/BrowserOffscreenDrawer.bnsh&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/MediaPlayerDrawer.bnsh&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Browse/MouseEffect.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/MediaPlayer/MovieCanvasNative.arc&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/labelConversionTable.json&amp;quot; added&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/nro/netfront/core_2/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/nro/netfront/core_3/&amp;quot; added&lt;br /&gt;
** &amp;quot;/shader/OceanShader.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/cruiser.bfsar&amp;quot; updated&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/immersion.png&amp;quot; removed&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/JPja/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/KRko/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/page_02.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/TWzh/page_04.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/js/tapaction.js&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* AvatarImage:&lt;br /&gt;
** &amp;quot;/chara/00000001.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000002.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000003.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000004.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000005.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000006.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000A.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000B.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000D.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000E.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/0000000F.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000010.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000011.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000012.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000034.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000035.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/chara/00000036.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/DatabaseInfo.bin&amp;quot; updated&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnShopIntro/list.jpg&amp;quot; updated, &amp;quot;/image/LnShopIntro/main.jpg&amp;quot; updated, &amp;quot;/image/LnSupIntro/main_Terra.jpg&amp;quot; removed, &amp;quot;/message/CNzhT/&amp;quot; removed, &amp;quot;/message/revision.txt&amp;quot; updated&lt;br /&gt;
* UrlBlackList: &amp;quot;/listLnsGlobal.txt&amp;quot; updated&lt;br /&gt;
* FontNintendoExtension: &amp;quot;/nintendo_ext2_003.bfttf&amp;quot; updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* ControllerIcon: &amp;quot;/lyt/ColorTable&amp;quot; updated&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/icon/hatena174.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/hatena.jpg&amp;quot; updated&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareFrom_ForDemo.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareFrom_ForDemo.png&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareTo_ForDemo.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/NaIcon_ShareTo_ForDemo.png&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/SubstituteUserIcon.jpg&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/DataTransfer.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/Vgc.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzh/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzh/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzh/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/EUde/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUde/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUde/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUen/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUes/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUfr/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUit/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUnl/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUpt/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/EUru/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/JPja/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/KRko/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/TWzh/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USen/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USes/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USfr/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/dataTransfer.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/splay.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/USpt/vgc.msbt.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/qlaunch.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/IcoPctl.bntx&amp;quot; removed&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/auth_module.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/cabinet.bfsar&amp;quot; updated&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/controller_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/controller.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/controller_module.bksnd&amp;quot; updated&lt;br /&gt;
* dataErase applet:&lt;br /&gt;
** &amp;quot;/icon/&amp;quot; added&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/hatena.jpg&amp;quot; removed&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/dataErase_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/dataErase.bfsar&amp;quot; updated&lt;br /&gt;
* error applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/error.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/texture/IcoPctl.bntx&amp;quot; removed&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/netConnect.bfsar&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/lyt/Pin.szs&amp;quot; added&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/playerSelect_module.bksnd&amp;quot; updated&lt;br /&gt;
* swkbd applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/swkbd_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/swkbd.bfsar&amp;quot; updated&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/icon/hatena174.jpg&amp;quot; added&lt;br /&gt;
** &amp;quot;/icon/hatena.jpg&amp;quot; removed&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/batteryIn.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/batteryOut.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoAlarm.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoCapture.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/infoLHub.raw&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/infoPtcl.raw&amp;quot; added&lt;br /&gt;
** &amp;quot;/sound/infoReactionError.raw&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* photoViewer applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/photoViewer_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/photoViewer.bfsar&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/starter.bfsar&amp;quot; updated&lt;br /&gt;
* myPage applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/myPage_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage.bfsar&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/myPage_module.bksnd&amp;quot; updated&lt;br /&gt;
* maintenance applet:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/CNzhT/&amp;quot; removed&lt;br /&gt;
** &amp;quot;/sound/maintenance_action.bksnd&amp;quot; updated&lt;br /&gt;
** &amp;quot;/sound/maintenance.bfsar&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_13 (previously master_key_12). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* No/minimal compiler update&lt;br /&gt;
* Inverted boolean(s) in system control/targetsystem logic&lt;br /&gt;
** All KTargetSystem fields have inverted meaning&lt;br /&gt;
** KTargetSystem &amp;quot;is present&amp;quot; bool is now inverted&lt;br /&gt;
** MersenneTwister &amp;quot;is initialized&amp;quot; bool is now inverted&lt;br /&gt;
* KPageTable::ChangeProperties now does a data synchronization barrier after calling the set-attrs lambda&lt;br /&gt;
* KPageTableImpl::MergePages now takes an argument for a callback to call after updating page table PTE entries.&lt;br /&gt;
** All callers on NX are KPageTable::NoteUpdated&lt;br /&gt;
** This causes TLB entries to be flushed/etc every time an entry is written instead of once at the end.&lt;br /&gt;
** The callback is passed the disable-merge software-reserved bits from the entry, but this appears unused on NX.&lt;br /&gt;
*** This is probably for something in the Switch2 kernel/ifdef&#039;d out.&lt;br /&gt;
* KAddressSpaceInfo::GetBegin now takes a size as a third argument; this is unused on NX.&lt;br /&gt;
* KAddressSpaceInfo::GetSize now performs more complicated logic based on the input type.&lt;br /&gt;
** If address space not CreateProcessFlag_AddressSpace32BitWithoutAlias then the size is returned directly.&lt;br /&gt;
** Otherwise:&lt;br /&gt;
*** If the type is Heap, it returns the requested size + the alias size.&lt;br /&gt;
*** If the type is Alias, it returns 0.&lt;br /&gt;
** KProcess::InitializeByParam now sets m_max_process_memory to KAddressSpaceInfo::GetSize(..., Type_Heap) instead of getting the page table&#039;s heap size.&lt;br /&gt;
** KPageTableBase::InitializeForProcess has simpler calculation of region extents for 32BitWithoutAlias now.&lt;br /&gt;
* KPageTableBase::MapPageGroup_ now checks if the input permission has the execute bit set, and invalidates instruction cache if so.&lt;br /&gt;
** This fixes a correctness bug; this was used to map pages as ReadExecute by JIT svcs, so stale instruction cache could result before.&lt;br /&gt;
** KPageTableBase::UnmapPageGroup also now invalidates instruction cache after unmapping, if the memory had the execute bit set.&lt;br /&gt;
* KSecureSystemResource now has better checking for the case where resource limit is nullptr.&lt;br /&gt;
** This is impossible on NX.&lt;br /&gt;
** This includes checks in GetUsed/TotalUserPhysicalMemorySize&lt;br /&gt;
** KSecureSystemResource::Destroy now checks before calling ReleaseLimit&lt;br /&gt;
* KPageTableBase::SetProcessMemoryPermission changes:&lt;br /&gt;
** Function now uses PageTableOperation_ChangePermsAndRefresh instead of _ChangePermsAndRefreshAndFlushDataCache when the execute permission is set.&lt;br /&gt;
** Data cache store + instruction cache invalidate is now done before operating instead of after&lt;br /&gt;
** instruction cache invalidate is done after memory block manager is updated.&lt;br /&gt;
* El0SynchronousExceptionHandler now always does tlbi vae1 instead of doing that or tlbi aside1 depending on status bits.&lt;br /&gt;
* El1SynchronousExceptionHandler now always does tlbi vaae1 instead of doing that or tlbi vmalle1 depending on status bits.&lt;br /&gt;
** NOTE: The checks Nintendo did previously have been bugged for many years and did not work.&lt;br /&gt;
** These checks were fixed to actually work now.&lt;br /&gt;
* UserspaceAccess changes:&lt;br /&gt;
** UserspaceAccess functions are now all called through helper functions, which directly call UserspaceAccess::*&lt;br /&gt;
*** This is probably &amp;quot;UserspaceAccessChecked&amp;quot;, and likely for parity with the supervisor mode access function they added in 19.0.0.&lt;br /&gt;
** UserspaceAccess functions which previously had no callers have been deleted.&lt;br /&gt;
*** This includes UserspaceAccess::ClearUserMemory*.&lt;br /&gt;
* HandleException changes:&lt;br /&gt;
** After checking for thread termination, fixup is done on esr_el1/ec values.&lt;br /&gt;
*** If esr_ec is 0x20 or 0x24 (DataAbortEl0/InstructionAbortEl0):&lt;br /&gt;
**** If esr_el1 &amp;amp; 0x43F == 0x410 then pc is treated as 0&lt;br /&gt;
**** Otherwise, if pc is a kernel address, then esr_el1 has the ISFC bits set to hardcoded-value 4.&lt;br /&gt;
** This is also done in ReturnFromException&lt;br /&gt;
* Kernel::InitializeResourceManagers now initializes the managers in a different order.&lt;br /&gt;
* KPageTableBase::FindFreeArea now uses a helper to compute the start and end of the guarded region to generate an address within.&lt;br /&gt;
** The same logic is used (without helper, possibly inlined) in KMemoryBlockManager::FindFreeArea.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2025-04-30_00-03-37&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13017</id>
		<title>19.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13017"/>
		<updated>2024-10-09T23:59:48Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Undo revision 13016 by SciresM (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 19.0.0 system update was released on October 8, 2024 (UTC). This Switch update was released for the following regions: CHN, and ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, netConnect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* usb: Service access: removed set:fd.&lt;br /&gt;
* htc.stub: SVC access: removed SetHeapSize, MapMemory, UnmapMemory, ExitProcess, CreateThread, StartThread, ExitThread, SleepThread, SetThreadPriority, GetThreadCoreMask, SetThreadCoreMask, GetCurrentProcessorNumber, SignalEvent, MapSharedMemory, UnmapSharedMemory, CreateTransferMemory, CloseHandle, ResetSignal, CancelSynchronization, ArbitrateLock, ArbitrateUnlock, WaitProcessWideKeyAtomic, SignalProcessWideKey, GetSystemTick, SendSyncRequestLight, SendSyncRequestWithUserBuffer, SendAsyncRequestWithUserBuffer, GetProcessId, Break, OutputDebugString, ReturnFromException, WaitForAddress, SignalToAddress.&lt;br /&gt;
* bluetooth: Service access: removed set:fd.&lt;br /&gt;
* bcat: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* friends: Service access: added ssl:s, removed set, ssl. SVC access: removed MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* nifm: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ptm: Service access: removed set:fd. KernelCap HandleTableSize: removed HandleTableSize=0x100.&lt;br /&gt;
* bsdsocket: Service server access: removed bsdcfg.&lt;br /&gt;
* hid: Service access: removed set:fd.&lt;br /&gt;
* audio: Service access: removed set, set:cal.&lt;br /&gt;
* wlan: Service access: removed i2c.&lt;br /&gt;
* pcv: Service access: removed set:fd.&lt;br /&gt;
* account: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ns: Service access: added caps:dc.&lt;br /&gt;
* nfc: Service access: removed xcd:sys.&lt;br /&gt;
* capsrv: Service access: added acc:e:u1.&lt;br /&gt;
* erpt: Service access: added srepo:a, removed srepo:u.&lt;br /&gt;
* pctl: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* npns: Service access: added ssl:s, removed ssl. SVC access: added MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* eupld: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* creport: SVC access: removed GetThreadList.&lt;br /&gt;
* migration: Service access: added hid, set, ssl:s, removed bsdcfg, ssl.&lt;br /&gt;
* olsc: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* omm: Service access: removed irs:sys.&lt;br /&gt;
* qlaunch: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* auth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* netConnect: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletWeb: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletShop: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletOff: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletLns: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletAuth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services#CertStore|CertStore]]: &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/cairo_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/libfont.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/oss_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/peer_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/webkit_wkc.nro.lz4&amp;quot; updated&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
&lt;br /&gt;
The SDK library version strings were removed from all titles. The &amp;quot;SDK MW+Nintendo+{...}&amp;quot; strings are no longer present. The used libraries/versions can therefore no longer be determined via checking these strings (unless there&#039;s other version-strings).&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewlyArrivedEventHolder&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::IDeviceNewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::INewArrivalEventHolder&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsDataService&lt;br /&gt;
** Added:    1100 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsService&lt;br /&gt;
** Removed: 30400 - buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     1 - outinterfaces: [&#039;nn::news::detail::ipc::INewlyArrivedEventHolder&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;])&lt;br /&gt;
** Changed:     3 - outinterfaces: [&#039;nn::news::detail::ipc::INewsDatabaseService&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x710007CD3C&lt;br /&gt;
* Unknown Interface cur-version: 0x71000844C0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   20105 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x28, outbytes: 0x4&lt;br /&gt;
** Added:   20106 - buffer_entry_sizes: [0x200, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20502 - buffer_entry_sizes: [0x4A8, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20601 - buffer_entry_sizes: [0xE8], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20702 - buffer_entry_sizes: [0x100], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:   20802 - buffer_entry_sizes: [0x800], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   22002 - buffer_entry_sizes: [0x500], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:   22003 - buffer_entry_sizes: [0x1400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   30501 - buffer_entry_sizes: [0x4A8], buffers: [0x1A], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   30701 - buffer_entry_sizes: [0x40, 0x48, 0x48], buffers: [0x19, 0x19, 0x19], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Added:   30901 - buffer_entry_sizes: [0xC00, 0x8, 0x0], buffers: [0x15, 0x9, 0x5], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   31000 - inbytes: 0x28, outbytes: 0x0, outinterfaces: [&#039;nn::friends::detail::ipc::INotificationService&#039;]&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710007CD3C&#039;] -&amp;gt; [&#039;0x71000844C0&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000844C0&#039;])&lt;br /&gt;
* Interface Removed: nn::fgm::sf::IRequest&lt;br /&gt;
* Interface Removed: nn::fgm::sf::ISession&lt;br /&gt;
* Interface Added: nn::fgm::IRequest&lt;br /&gt;
* Interface Added: nn::fgm::ISession&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
** Added:      24 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     212 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     253 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:   351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed:   352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:      22 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Removed:   214 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     216 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     217 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Added:     218 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     219 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     220 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     221 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:     222 - buffer_entry_sizes: [0x3F4], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     223 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffer_entry_sizes: [0x64], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     225 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffer_entry_sizes: [0x118], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     227 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     234 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:     241 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     242 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     243 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     244 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     245 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Added:     246 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     247 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     332 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     526 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:   543 - buffer_entry_sizes: [0x30], buffers: [0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1420 - inbytes: 0x8, outbytes: 0xC&lt;br /&gt;
* Interface Changed: nn::xcd::detail::ISystemServer&lt;br /&gt;
** Removed:     0 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     1 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     3 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     4 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Removed:     5 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:     6 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    10 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Removed:    11 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    12 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:    13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    14 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Removed:    15 - buffer_entry_sizes: [0x3F4], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    16 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    17 - buffer_entry_sizes: [0x64], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    18 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    19 - buffer_entry_sizes: [0x118], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    20 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:    5000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::audioctrl::detail::IAudioController&#039;]&lt;br /&gt;
** Removed: 50000 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50001 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50003 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:   50004 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Changed:     2 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
** Changed:    12 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:    60 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:    90 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
** Changed:   100 - inbytes: 0x80 -&amp;gt; 0x7C (final state: inbytes: 0x7C, outbytes: 0x0)&lt;br /&gt;
** Added:     109 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     120 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
** Added:     204 - buffers: [0x21], inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Added:     404 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Added:     403 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100005438&lt;br /&gt;
* Unknown Interface cur-version: 0x7100004EF0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:    94 - inbytes: 0x58 -&amp;gt; 0x88 (final state: inbytes: 0x88, outbytes: 0x8)&lt;br /&gt;
** Changed:    95 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    96 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    97 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x1)&lt;br /&gt;
** Removed:   406 - buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0&lt;br /&gt;
** Added:     411 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     413 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     414 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     415 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     416 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     417 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     418 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     419 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     511 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     512 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Changed:  1802 - buffer_entry_sizes: [0x90] -&amp;gt; [0x98] (final state: buffer_entry_sizes: [0x98], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Changed:  1803 - buffer_entry_sizes: [0xB0] -&amp;gt; [0xB8] (final state: buffer_entry_sizes: [0xB8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Added:    2360 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2361 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Changed:  2513 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:  2517 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDevelopInterface&lt;br /&gt;
** Changed:    17 - outbytes: 0x50 -&amp;gt; 0x80 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x80)&lt;br /&gt;
** Changed:    18 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0, outhandles: [1])&lt;br /&gt;
** Changed:    19 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0)&lt;br /&gt;
** Changed:    21 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x10, outbytes: 0x80)&lt;br /&gt;
** Changed:    22 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:    23 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDocumentInterface&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:       5 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:       6 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:    8022 - buffer_entry_sizes: [0x20, 0x10], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:   50001 - buffers: [0x6], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   50011 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:   50012 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlService&lt;br /&gt;
** Changed:  2011 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2012 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2013 - outbytes: 0x8 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** Changed:  2101 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x18)&lt;br /&gt;
** Added:    2103 - buffer_entry_sizes: [0x200, 0x88], buffers: [0x16, 0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    2104 - buffer_entry_sizes: [0x200], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:    2401 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:    2501 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Added: nn::am::service::IApplicationObserver&lt;br /&gt;
* Interface Added: nn::am::service::IMovieWriter&lt;br /&gt;
* Interface Added: nn::am::service::ISystemProcessCommonFunctions&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Added:     450 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::ISystemProcessCommonFunctions&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:     310 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     320 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     321 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     330 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Added:     300 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed:   600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
** Added:    1000 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1001 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1002 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Changed:    31 - inbytes: 0x58 -&amp;gt; 0x88 (final state: buffer_entry_sizes: [0x10, 0x0], buffers: [0x5, 0x5], inbytes: 0x88, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::am::service::IHomeMenuFunctions&lt;br /&gt;
** Added:      60 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ILibraryAppletAccessor&lt;br /&gt;
** Added:      80 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      81 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IAppletAccessor&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      50 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      60 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Changed:   103 - inbytes: 0x0 -&amp;gt; 0x4 (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     150 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Changed:     2 - inbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x20, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Changed:  1004 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x404, 0x88], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x0)&lt;br /&gt;
** Changed:  1106 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1107 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1108 - inbytes: 0x70 -&amp;gt; 0x80 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x80, outbytes: 0x18)&lt;br /&gt;
** Added:    1109 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x78, outbytes: 0x18&lt;br /&gt;
** Added:    1110 - buffers: [0x6, 0x45, 0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    1111 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1112 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1113 - buffer_entry_sizes: [0x400, 0x404, 0x0], buffers: [0x15, 0x15, 0x6], inbytes: 0x88, outbytes: 0x18&lt;br /&gt;
** Added:    1114 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotService&lt;br /&gt;
** Changed:  1000 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x88, 0x400], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x20)&lt;br /&gt;
* Interface Changed: nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
** Removed:     7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    2017 - inbytes: 0x20, outbytes: 0x8, outhandles: [1]&lt;br /&gt;
** Added:    2019 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Added: nn::npns::IFuture&lt;br /&gt;
* Interface Added: nn::npns::ISubscriptionUpdateNotifier&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:      17 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::ISubscriptionUpdateNotifier&#039;]&lt;br /&gt;
** Added:      60 - buffer_entry_sizes: [0x298], buffers: [0x15], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     141 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     142 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     143 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     144 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     145 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
* Interface Changed: nn::arp::detail::IRegistrar&lt;br /&gt;
** Removed:     2 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::arp::detail::IWriter&lt;br /&gt;
** Added:       4 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Changed:  1027 - buffer_entry_sizes: [0x10, 0x0] -&amp;gt; [0x10, 0x8, 0x0], buffers: [0x6, 0x5] -&amp;gt; [0x6, 0x5, 0x5], inbytes: 0x10 -&amp;gt; 0x8 (final state: buffer_entry_sizes: [0x10, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:    1029 - buffer_entry_sizes: [0x18, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGrcService&lt;br /&gt;
** Added:     110 - inbytes: 0x20, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::mii::detail::IDatabaseService&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::mii::detail::IImageDatabaseService&lt;br /&gt;
** Added:      18 - buffers: [0x5], inbytes: 0x3A, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Added:       0 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:   907 - inbytes: 0x70 -&amp;gt; 0x78 (final state: inbytes: 0x78, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
* Interface Changed: nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
** Changed:   610 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   611 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   612 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_12 (previously master_key_11). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* KMemoryManager now supports per-pool-partition minimum page alignments.&lt;br /&gt;
** KMemoryManager::Initialize now aborts unless a valid pool index is chosen.&lt;br /&gt;
** KMemoryManager::Initialize now takes an additional array argument of minimum-page alignments (one array entry per pool partition).&lt;br /&gt;
*** This array is currently all-zero, which corresponds to minimum allocation alignment of 0x1000 (1 page).&lt;br /&gt;
** Allocation functions now check that alignment is valid for the pool&#039;s minimum.&lt;br /&gt;
** MapPhysicalMemory now checks alignment based on the mm min-pages.&lt;br /&gt;
** UnmapPhysicalMemory now checks alignment based on the mm min-pages.&lt;br /&gt;
** StartProcess() now checks alignment/aligns up based on the mm min-pages.&lt;br /&gt;
** KProcess::Run no longer aligns the input stack-size up to page size when checking that stack + code size does not exceed m_max_process_memory.&lt;br /&gt;
* KMemoryBlock was refactored:&lt;br /&gt;
** Fields were shuffled around, optimizing the storage layout.&lt;br /&gt;
*** The last field now ends @ +0x3A, instead of +0x40 before, coming close to but not actually saving 8 bytes per block.&lt;br /&gt;
**** This presumably makes space for fields which are ifdef&#039;d out on NX.&lt;br /&gt;
** DisableMergeAttribute_(Device)Right is now 0x20, instead of 0x10.&lt;br /&gt;
*** Bit 0x10 appears nowhere in entire kernel now, and code which previously did &amp;amp; 0xF to get the Left disable attrs still does &amp;amp; 0xF.&lt;br /&gt;
**** Bit 0x10 is presumably ifdef&#039;d out on NX.&lt;br /&gt;
** KMemoryInfo is essentially no longer used at all any more.&lt;br /&gt;
*** All cases where GetMemoryInfo was called now use the fields from the KMemoryBlock directly.&lt;br /&gt;
*** The one exception to this is KPageTableBase::QueryInfo, which still returns a KMemoryInfo as output variable.&lt;br /&gt;
* The kernel now handles ttbr0 management completely differently:&lt;br /&gt;
** The kernel now stores an array of 0x51 TTBR0 pages (Kernel + 0x50 KProcesses, matching the slab heap size) in .rodata.&lt;br /&gt;
*** Initialize1 now calls a new function prior to unmapping the identity mapping which allocates these pages from the InitialPageAllocator (using paddr lookup + the identity mapping to write to the read-only array in .rodata).&lt;br /&gt;
** KSleepSystemRegisters::Save no longer saves TTBR0_EL1; ::Restore sets ttbr0_el1 to g_Ttbr0Pages[0].&lt;br /&gt;
** KProcess::InitializeUser now checks that the KProcess is within the slabheap; the KProcess&#039;s slab heap index is now passed to KProcessPageTable::Initialize.&lt;br /&gt;
** KPageTable no longer has any globals to track ASID management; ASID is now just the KProcess&#039;s slab heap index + 1.&lt;br /&gt;
* KTargetSystem refactor:&lt;br /&gt;
** KTargetSystem is now located in .rodata, and no longer 4-byte aligns the bools.&lt;br /&gt;
** new .init_array function initializes all the KTargetSystem values in .rodata (before the region is write-protected) using values-from-smc.&lt;br /&gt;
** KSystemControl::Initialize() now sets new bool (g_HasKTargetSystem) to true.&lt;br /&gt;
*** Instead of setting values, KSystemControl now does ABORT_UNLESS(value_from_smc == (g_HasKTargetSystem &amp;amp;&amp;amp; g_KTargetSystem.value)) for all values.&lt;br /&gt;
*** This essentially just checks that the previous .init call worked as expected.&lt;br /&gt;
** All KTargetSystem::Is*() calls now return g_HasKTargetSystem &amp;amp;&amp;amp; g_KTargetSystem.value instead of just returning g_KTargetSystem.value&lt;br /&gt;
*** Note: these are still fully inlined in all cases.&lt;br /&gt;
* KAddressSpaceInfo::GetBegin/GetSize now take in CreateProcess flags instead of bit-width.&lt;br /&gt;
* svc::WaitForAddress now supports a new ArbitrationType (ArbitrationType_WaitIfEqual64, value=3).&lt;br /&gt;
** svc::WaitForAddress&#039;s &amp;quot;value&amp;quot; parameter is now an int64_t, instead of an int32_t.&lt;br /&gt;
** When ArbitrationType_WaitIfEqual64 is passed, address is now checked for 8-byte alignment instead of 4-byte alignment, and 64-bit value is read/compared from userspace instead of 32-bit.&lt;br /&gt;
* New InfoType 0x22: &amp;quot;InfoType_TransferMemoryHint&amp;quot;&lt;br /&gt;
** This returns a hint for the transfer memory&#039;s process address.&lt;br /&gt;
** InfoType values 0x1D-0x21 are presumably ifdef&#039;d out on NX.&lt;br /&gt;
* KProcess-&amp;gt;max_process_memory is now set to GetHeapRegionSize() in all cases.&lt;br /&gt;
** Previously, this was GetHeapRegionSize() + GetAliasRegionSize() for processes with AddressSpace32BitWithoutAlias.&lt;br /&gt;
* The kernel now supports execute-only memory (--X).&lt;br /&gt;
** SetProcessMemoryPermission now supports MemoryPermission_Execute.&lt;br /&gt;
*** KPageTableBase::SetProcessMemoryPermission now acquires and immediately releases the scheduler lock prior to operating, if the Execute bit is set on the input permissions.&lt;br /&gt;
** KPageTable::GetEntryTemplate now checks for the MemoryPermission_Execute bit instead of checking directly against ReadExecute.&lt;br /&gt;
** HandleException now supports using supervisor-mode access to read the failing instruction on Unknown/IllegalState/Bkpt/Brk.&lt;br /&gt;
*** Supervisor-mode access is used only if user-access fails, KTargetSystem::IsDebugMode() returns true, pc is 4-byte aligned, and 0x200000 &amp;lt;= PC &amp;lt;= (1 &amp;lt;&amp;lt; 39).&lt;br /&gt;
** HandleException now no longer forces processing when accessing MemoryState_Code without KMemoryPermission_UserRead.&lt;br /&gt;
* The way DebugFlags capabilities works was changed:&lt;br /&gt;
** Previously, bit0=AllowDebug, bit1=ForceDebug.&lt;br /&gt;
** Now, bit0=AllowDebug, bit1=ForceDebugProd, bit2=ForceDebug.&lt;br /&gt;
*** Processes may now only have one of the above bits set, previously both AllowDebug and ForceDebug were allowed simultaneously.&lt;br /&gt;
** New function requires KTargetSystem::IsDebugMode():&lt;br /&gt;
*** GetProcessList,&lt;br /&gt;
** Many functions now require (KTargetSystem::IsDebugMode() || GetCurrentProcess().IsForceDebugProd()):&lt;br /&gt;
*** DebugActiveProcess, GetDebugEvent, QueryDebugProcessMemory, ReadDebugMemory, GetThreadList, GetDebugThreadContext, GetDebugThreadParam,&lt;br /&gt;
** KDebug now has a member which tracks whether the owner process is ForceDebugProd.&lt;br /&gt;
** KDebugBase::Attach now requires !ForceDebugProd when attaching to a process in the Created/Running states.&lt;br /&gt;
*** Crashed may still be attached to when ForceDebugProd.&lt;br /&gt;
** KDebugBase::GetDebugEventInfo now always sets instruction = 0 when creating info for an UndefinedInstruction exception when ForceDebugProd.&lt;br /&gt;
** KDebugBase::(Read/Write)Memory no longer allow reading/writing Io memory when ForceDebugProd is set.&lt;br /&gt;
** KPageTableBase::(Read/Write)DebugMemory now check memory state differently:&lt;br /&gt;
*** Previously: either memory had to be UserRead/UserReadWrite (no state flags check) or KMemoryState_FlagCanDebug had to be set.&lt;br /&gt;
*** Now: memory has to be UserRead/UserReadWrite (no state flags check) or (memory has to be UserRead AND KMemoryState_FlagCanDebug has to be set) or (IsDebugMode() &amp;amp;&amp;amp; !ForceDebugProd &amp;amp;&amp;amp; memory has to have KernelRead|UserExecute bits &amp;amp;&amp;amp; KMemoryState_FlagCanDebug has to be set)&lt;br /&gt;
**** This renders the original flag check completely pointless for ReadDebugMemory (but still allows writing to UserRead memory).&lt;br /&gt;
**** Memory which was previously readable despite not-user-read is no longer readable.&lt;br /&gt;
**** Execute-only memory is readable, but only when running under debug mode and using a KDebug created by a process which does not have ForceDebugProd set.&lt;br /&gt;
**** The ForceDebugProd check is not present for WriteDebugMemory.&lt;br /&gt;
** GetThreadList() no longer functions in non-debug mode even with ForceDebugProd&lt;br /&gt;
** KDebugBase::TerminateProcess no longer detaches from the target process.&lt;br /&gt;
* Changes relevant to debugging the kernel:&lt;br /&gt;
** EL1SynchronousExceptionHandler now infinite loops instead of calling HandleException.&lt;br /&gt;
** SupervisorModeThreadStarter now sets X30 to 0 + creates a stack frame + invokes the thread function with &amp;quot;BLR X1&amp;quot; instead of &amp;quot;BR X1&amp;quot;.&lt;br /&gt;
*** This guarantees validity if walking kernel stack frames.&lt;br /&gt;
* KPageTable implementation was heavily rewritten.&lt;br /&gt;
** Too many changes to summarize here; the fundamental implementation is now based on iteration over levels using TraversalContext instead of separate per-level logic.&lt;br /&gt;
* KPageTableBase::SetupForIpcClient now validates that the unused (on nx) upper memory attribute bits are all unset.&lt;br /&gt;
* Many heavy K(Initial)PageTable changes, including:&lt;br /&gt;
** KInitialPageTable&#039;s table entries no longer have bit 58 (0x0400000000000000) set; previously this was used to indicate/determine whether a mapping was present even if the entry was NotMapped.&lt;br /&gt;
*** Bit0 (0x1) is now used to check for mapping existence again in many places.&lt;br /&gt;
** KPageTableImpl::InitializeForKernel now iterates over mappings created by KInitialPageTable, setting PageAttribute=#used entries for tables and setting bit 58 on blocks.&lt;br /&gt;
* KInterruptController::Finalize() now sets m_gicd and m_gicc to nullptr if core id == 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[SSL_services|ssl]] ===&lt;br /&gt;
Besides IPC changes, a vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2024-10-08_00-00-37&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13016</id>
		<title>19.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13016"/>
		<updated>2024-10-09T23:59:05Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Reverted edits by SciresM (talk) to last revision by Yellows8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 19.0.0 system update was released on October 8, 2024 (UTC). This Switch update was released for the following regions: CHN, and ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, netConnect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* usb: Service access: removed set:fd.&lt;br /&gt;
* htc.stub: SVC access: removed SetHeapSize, MapMemory, UnmapMemory, ExitProcess, CreateThread, StartThread, ExitThread, SleepThread, SetThreadPriority, GetThreadCoreMask, SetThreadCoreMask, GetCurrentProcessorNumber, SignalEvent, MapSharedMemory, UnmapSharedMemory, CreateTransferMemory, CloseHandle, ResetSignal, CancelSynchronization, ArbitrateLock, ArbitrateUnlock, WaitProcessWideKeyAtomic, SignalProcessWideKey, GetSystemTick, SendSyncRequestLight, SendSyncRequestWithUserBuffer, SendAsyncRequestWithUserBuffer, GetProcessId, Break, OutputDebugString, ReturnFromException, WaitForAddress, SignalToAddress.&lt;br /&gt;
* bluetooth: Service access: removed set:fd.&lt;br /&gt;
* bcat: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* friends: Service access: added ssl:s, removed set, ssl. SVC access: removed MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* nifm: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ptm: Service access: removed set:fd. KernelCap HandleTableSize: removed HandleTableSize=0x100.&lt;br /&gt;
* bsdsocket: Service server access: removed bsdcfg.&lt;br /&gt;
* hid: Service access: removed set:fd.&lt;br /&gt;
* audio: Service access: removed set, set:cal.&lt;br /&gt;
* wlan: Service access: removed i2c.&lt;br /&gt;
* pcv: Service access: removed set:fd.&lt;br /&gt;
* account: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ns: Service access: added caps:dc.&lt;br /&gt;
* nfc: Service access: removed xcd:sys.&lt;br /&gt;
* capsrv: Service access: added acc:e:u1.&lt;br /&gt;
* erpt: Service access: added srepo:a, removed srepo:u.&lt;br /&gt;
* pctl: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* npns: Service access: added ssl:s, removed ssl. SVC access: added MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* eupld: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* creport: SVC access: removed GetThreadList.&lt;br /&gt;
* migration: Service access: added hid, set, ssl:s, removed bsdcfg, ssl.&lt;br /&gt;
* olsc: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* omm: Service access: removed irs:sys.&lt;br /&gt;
* qlaunch: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* auth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* netConnect: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletWeb: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletShop: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletOff: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletLns: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletAuth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services#CertStore|CertStore]]: &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/cairo_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/libfont.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/oss_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/peer_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/webkit_wkc.nro.lz4&amp;quot; updated&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
&lt;br /&gt;
The SDK library version strings were removed from all titles. The &amp;quot;SDK MW+Nintendo+{...}&amp;quot; strings are no longer present. The used libraries/versions can therefore no longer be determined via checking these strings (unless there&#039;s other version-strings).&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewlyArrivedEventHolder&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::IDeviceNewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::INewArrivalEventHolder&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsDataService&lt;br /&gt;
** Added:    1100 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsService&lt;br /&gt;
** Removed: 30400 - buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     1 - outinterfaces: [&#039;nn::news::detail::ipc::INewlyArrivedEventHolder&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;])&lt;br /&gt;
** Changed:     3 - outinterfaces: [&#039;nn::news::detail::ipc::INewsDatabaseService&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x710007CD3C&lt;br /&gt;
* Unknown Interface cur-version: 0x71000844C0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   20105 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x28, outbytes: 0x4&lt;br /&gt;
** Added:   20106 - buffer_entry_sizes: [0x200, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20502 - buffer_entry_sizes: [0x4A8, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20601 - buffer_entry_sizes: [0xE8], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20702 - buffer_entry_sizes: [0x100], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:   20802 - buffer_entry_sizes: [0x800], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   22002 - buffer_entry_sizes: [0x500], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:   22003 - buffer_entry_sizes: [0x1400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   30501 - buffer_entry_sizes: [0x4A8], buffers: [0x1A], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   30701 - buffer_entry_sizes: [0x40, 0x48, 0x48], buffers: [0x19, 0x19, 0x19], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Added:   30901 - buffer_entry_sizes: [0xC00, 0x8, 0x0], buffers: [0x15, 0x9, 0x5], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   31000 - inbytes: 0x28, outbytes: 0x0, outinterfaces: [&#039;nn::friends::detail::ipc::INotificationService&#039;]&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710007CD3C&#039;] -&amp;gt; [&#039;0x71000844C0&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000844C0&#039;])&lt;br /&gt;
* Interface Removed: nn::fgm::sf::IRequest&lt;br /&gt;
* Interface Removed: nn::fgm::sf::ISession&lt;br /&gt;
* Interface Added: nn::fgm::IRequest&lt;br /&gt;
* Interface Added: nn::fgm::ISession&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
** Added:      24 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     212 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     253 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:   351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed:   352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:      22 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Removed:   214 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     216 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     217 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Added:     218 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     219 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     220 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     221 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:     222 - buffer_entry_sizes: [0x3F4], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     223 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffer_entry_sizes: [0x64], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     225 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffer_entry_sizes: [0x118], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     227 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     234 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:     241 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     242 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     243 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     244 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     245 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Added:     246 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     247 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     332 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     526 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:   543 - buffer_entry_sizes: [0x30], buffers: [0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1420 - inbytes: 0x8, outbytes: 0xC&lt;br /&gt;
* Interface Changed: nn::xcd::detail::ISystemServer&lt;br /&gt;
** Removed:     0 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     1 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     3 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     4 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Removed:     5 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:     6 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    10 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Removed:    11 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    12 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:    13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    14 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Removed:    15 - buffer_entry_sizes: [0x3F4], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    16 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    17 - buffer_entry_sizes: [0x64], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    18 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    19 - buffer_entry_sizes: [0x118], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    20 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:    5000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::audioctrl::detail::IAudioController&#039;]&lt;br /&gt;
** Removed: 50000 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50001 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50003 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:   50004 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Changed:     2 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
** Changed:    12 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:    60 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:    90 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
** Changed:   100 - inbytes: 0x80 -&amp;gt; 0x7C (final state: inbytes: 0x7C, outbytes: 0x0)&lt;br /&gt;
** Added:     109 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     120 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
** Added:     204 - buffers: [0x21], inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Added:     404 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Added:     403 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100005438&lt;br /&gt;
* Unknown Interface cur-version: 0x7100004EF0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:    94 - inbytes: 0x58 -&amp;gt; 0x88 (final state: inbytes: 0x88, outbytes: 0x8)&lt;br /&gt;
** Changed:    95 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    96 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    97 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x1)&lt;br /&gt;
** Removed:   406 - buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0&lt;br /&gt;
** Added:     411 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     413 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     414 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     415 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     416 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     417 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     418 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     419 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     511 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     512 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Changed:  1802 - buffer_entry_sizes: [0x90] -&amp;gt; [0x98] (final state: buffer_entry_sizes: [0x98], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Changed:  1803 - buffer_entry_sizes: [0xB0] -&amp;gt; [0xB8] (final state: buffer_entry_sizes: [0xB8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Added:    2360 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2361 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Changed:  2513 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:  2517 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDevelopInterface&lt;br /&gt;
** Changed:    17 - outbytes: 0x50 -&amp;gt; 0x80 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x80)&lt;br /&gt;
** Changed:    18 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0, outhandles: [1])&lt;br /&gt;
** Changed:    19 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0)&lt;br /&gt;
** Changed:    21 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x10, outbytes: 0x80)&lt;br /&gt;
** Changed:    22 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:    23 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDocumentInterface&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:       5 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:       6 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:    8022 - buffer_entry_sizes: [0x20, 0x10], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:   50001 - buffers: [0x6], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   50011 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:   50012 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlService&lt;br /&gt;
** Changed:  2011 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2012 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2013 - outbytes: 0x8 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** Changed:  2101 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x18)&lt;br /&gt;
** Added:    2103 - buffer_entry_sizes: [0x200, 0x88], buffers: [0x16, 0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    2104 - buffer_entry_sizes: [0x200], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:    2401 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:    2501 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Added: nn::am::service::IApplicationObserver&lt;br /&gt;
* Interface Added: nn::am::service::IMovieWriter&lt;br /&gt;
* Interface Added: nn::am::service::ISystemProcessCommonFunctions&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Added:     450 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::ISystemProcessCommonFunctions&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:     310 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     320 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     321 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     330 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Added:     300 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed:   600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
** Added:    1000 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1001 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1002 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Changed:    31 - inbytes: 0x58 -&amp;gt; 0x88 (final state: buffer_entry_sizes: [0x10, 0x0], buffers: [0x5, 0x5], inbytes: 0x88, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::am::service::IHomeMenuFunctions&lt;br /&gt;
** Added:      60 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ILibraryAppletAccessor&lt;br /&gt;
** Added:      80 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      81 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IAppletAccessor&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      50 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      60 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Changed:   103 - inbytes: 0x0 -&amp;gt; 0x4 (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     150 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Changed:     2 - inbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x20, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Changed:  1004 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x404, 0x88], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x0)&lt;br /&gt;
** Changed:  1106 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1107 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1108 - inbytes: 0x70 -&amp;gt; 0x80 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x80, outbytes: 0x18)&lt;br /&gt;
** Added:    1109 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x78, outbytes: 0x18&lt;br /&gt;
** Added:    1110 - buffers: [0x6, 0x45, 0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    1111 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1112 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1113 - buffer_entry_sizes: [0x400, 0x404, 0x0], buffers: [0x15, 0x15, 0x6], inbytes: 0x88, outbytes: 0x18&lt;br /&gt;
** Added:    1114 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotService&lt;br /&gt;
** Changed:  1000 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x88, 0x400], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x20)&lt;br /&gt;
* Interface Changed: nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
** Removed:     7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    2017 - inbytes: 0x20, outbytes: 0x8, outhandles: [1]&lt;br /&gt;
** Added:    2019 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Added: nn::npns::IFuture&lt;br /&gt;
* Interface Added: nn::npns::ISubscriptionUpdateNotifier&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:      17 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::ISubscriptionUpdateNotifier&#039;]&lt;br /&gt;
** Added:      60 - buffer_entry_sizes: [0x298], buffers: [0x15], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     141 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     142 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     143 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     144 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     145 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
* Interface Changed: nn::arp::detail::IRegistrar&lt;br /&gt;
** Removed:     2 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::arp::detail::IWriter&lt;br /&gt;
** Added:       4 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Changed:  1027 - buffer_entry_sizes: [0x10, 0x0] -&amp;gt; [0x10, 0x8, 0x0], buffers: [0x6, 0x5] -&amp;gt; [0x6, 0x5, 0x5], inbytes: 0x10 -&amp;gt; 0x8 (final state: buffer_entry_sizes: [0x10, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:    1029 - buffer_entry_sizes: [0x18, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGrcService&lt;br /&gt;
** Added:     110 - inbytes: 0x20, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::mii::detail::IDatabaseService&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::mii::detail::IImageDatabaseService&lt;br /&gt;
** Added:      18 - buffers: [0x5], inbytes: 0x3A, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Added:       0 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:   907 - inbytes: 0x70 -&amp;gt; 0x78 (final state: inbytes: 0x78, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
* Interface Changed: nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
** Changed:   610 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   611 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   612 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_12 (previously master_key_11). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
=== [[SSL_services|ssl]] ===&lt;br /&gt;
Besides IPC changes, a vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2024-10-08_00-00-37&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13006</id>
		<title>19.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=19.0.0&amp;diff=13006"/>
		<updated>2024-10-09T15:39:00Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 19.0.0 system update was released on October 8, 2024 (UTC). This Switch update was released for the following regions: CHN, and ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, netConnect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth, &amp;quot;starter&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* usb: Service access: removed set:fd.&lt;br /&gt;
* htc.stub: SVC access: removed SetHeapSize, MapMemory, UnmapMemory, ExitProcess, CreateThread, StartThread, ExitThread, SleepThread, SetThreadPriority, GetThreadCoreMask, SetThreadCoreMask, GetCurrentProcessorNumber, SignalEvent, MapSharedMemory, UnmapSharedMemory, CreateTransferMemory, CloseHandle, ResetSignal, CancelSynchronization, ArbitrateLock, ArbitrateUnlock, WaitProcessWideKeyAtomic, SignalProcessWideKey, GetSystemTick, SendSyncRequestLight, SendSyncRequestWithUserBuffer, SendAsyncRequestWithUserBuffer, GetProcessId, Break, OutputDebugString, ReturnFromException, WaitForAddress, SignalToAddress.&lt;br /&gt;
* bluetooth: Service access: removed set:fd.&lt;br /&gt;
* bcat: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* friends: Service access: added ssl:s, removed set, ssl. SVC access: removed MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* nifm: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ptm: Service access: removed set:fd. KernelCap HandleTableSize: removed HandleTableSize=0x100.&lt;br /&gt;
* bsdsocket: Service server access: removed bsdcfg.&lt;br /&gt;
* hid: Service access: removed set:fd.&lt;br /&gt;
* audio: Service access: removed set, set:cal.&lt;br /&gt;
* wlan: Service access: removed i2c.&lt;br /&gt;
* pcv: Service access: removed set:fd.&lt;br /&gt;
* account: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* ns: Service access: added caps:dc.&lt;br /&gt;
* nfc: Service access: removed xcd:sys.&lt;br /&gt;
* capsrv: Service access: added acc:e:u1.&lt;br /&gt;
* erpt: Service access: added srepo:a, removed srepo:u.&lt;br /&gt;
* pctl: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* npns: Service access: added ssl:s, removed ssl. SVC access: added MapTransferMemory, UnmapTransferMemory.&lt;br /&gt;
* eupld: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* creport: SVC access: removed GetThreadList.&lt;br /&gt;
* migration: Service access: added hid, set, ssl:s, removed bsdcfg, ssl.&lt;br /&gt;
* olsc: Service access: added ssl:s, removed ssl.&lt;br /&gt;
* omm: Service access: removed irs:sys.&lt;br /&gt;
* qlaunch: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* auth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* netConnect: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletWeb: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletShop: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletOff: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletLns: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
* LibAppletAuth: Service access: added bsd:a, removed bsd:u.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services#CertStore|CertStore]]: &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/cairo_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/libfont.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/oss_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/peer_wkc.nro.lz4&amp;quot; updated, &amp;quot;/nro/netfront/core_2/default/cfi_enabled/webkit_wkc.nro.lz4&amp;quot; updated&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* auth applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* netConnect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
&lt;br /&gt;
The SDK library version strings were removed from all titles. The &amp;quot;SDK MW+Nintendo+{...}&amp;quot; strings are no longer present. The used libraries/versions can therefore no longer be determined via checking these strings (unless there&#039;s other version-strings).&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewlyArrivedEventHolder&lt;br /&gt;
* Interface Removed: nn::news::detail::ipc::INewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::IDeviceNewsDatabaseService&lt;br /&gt;
* Interface Added: nn::news::detail::ipc::INewArrivalEventHolder&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsDataService&lt;br /&gt;
** Added:    1100 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::INewsService&lt;br /&gt;
** Removed: 30400 - buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::news::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     1 - outinterfaces: [&#039;nn::news::detail::ipc::INewlyArrivedEventHolder&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::INewArrivalEventHolder&#039;])&lt;br /&gt;
** Changed:     3 - outinterfaces: [&#039;nn::news::detail::ipc::INewsDatabaseService&#039;] -&amp;gt; [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::news::detail::ipc::IDeviceNewsDatabaseService&#039;])&lt;br /&gt;
* Unknown Interface prev-version: 0x710007CD3C&lt;br /&gt;
* Unknown Interface cur-version: 0x71000844C0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   20105 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x28, outbytes: 0x4&lt;br /&gt;
** Added:   20106 - buffer_entry_sizes: [0x200, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20502 - buffer_entry_sizes: [0x4A8, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20601 - buffer_entry_sizes: [0xE8], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   20702 - buffer_entry_sizes: [0x100], buffers: [0x6], inbytes: 0x18, outbytes: 0x4&lt;br /&gt;
** Added:   20802 - buffer_entry_sizes: [0x800], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   22002 - buffer_entry_sizes: [0x500], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:   22003 - buffer_entry_sizes: [0x1400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   30501 - buffer_entry_sizes: [0x4A8], buffers: [0x1A], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   30701 - buffer_entry_sizes: [0x40, 0x48, 0x48], buffers: [0x19, 0x19, 0x19], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Added:   30901 - buffer_entry_sizes: [0xC00, 0x8, 0x0], buffers: [0x15, 0x9, 0x5], inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:   31000 - inbytes: 0x28, outbytes: 0x0, outinterfaces: [&#039;nn::friends::detail::ipc::INotificationService&#039;]&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710007CD3C&#039;] -&amp;gt; [&#039;0x71000844C0&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000844C0&#039;])&lt;br /&gt;
* Interface Removed: nn::fgm::sf::IRequest&lt;br /&gt;
* Interface Removed: nn::fgm::sf::ISession&lt;br /&gt;
* Interface Added: nn::fgm::IRequest&lt;br /&gt;
* Interface Added: nn::fgm::ISession&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
** Added:      24 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:     212 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     253 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:   351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Removed:   352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:      22 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Removed:   214 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     216 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     217 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Added:     218 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     219 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     220 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     221 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Added:     222 - buffer_entry_sizes: [0x3F4], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     223 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffer_entry_sizes: [0x64], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     225 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     226 - buffer_entry_sizes: [0x118], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     227 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     234 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:     241 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     242 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     243 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Added:     244 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     245 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Added:     246 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     247 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     332 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:     526 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:   543 - buffer_entry_sizes: [0x30], buffers: [0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1420 - inbytes: 0x8, outbytes: 0xC&lt;br /&gt;
* Interface Changed: nn::xcd::detail::ISystemServer&lt;br /&gt;
** Removed:     0 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     1 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed:     3 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:     4 - inbytes: 0x8, outbytes: 0x20&lt;br /&gt;
** Removed:     5 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:     6 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    10 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]&lt;br /&gt;
** Removed:    11 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    12 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Removed:    13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    14 - inbytes: 0x30, outbytes: 0x0&lt;br /&gt;
** Removed:    15 - buffer_entry_sizes: [0x3F4], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    16 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    17 - buffer_entry_sizes: [0x64], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    18 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** Removed:    19 - buffer_entry_sizes: [0x118], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Removed:    20 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Added:    5000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::audioctrl::detail::IAudioController&#039;]&lt;br /&gt;
** Removed: 50000 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50001 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:   50003 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:   50004 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** Changed:     2 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
** Changed:    12 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
* Interface Changed: nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
** Changed:    60 - buffer_entry_sizes: [0x1F8] -&amp;gt; [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:    90 - buffer_entry_sizes: [0x84] -&amp;gt; [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)&lt;br /&gt;
** Changed:   100 - inbytes: 0x80 -&amp;gt; 0x7C (final state: inbytes: 0x7C, outbytes: 0x0)&lt;br /&gt;
** Added:     109 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     120 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
** Added:     204 - buffers: [0x21], inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Added:     404 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Added:     403 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x7100005438&lt;br /&gt;
* Unknown Interface cur-version: 0x7100004EF0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForApplication&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** Added:     223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForApplication&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Added:       4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:    1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      40 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:    94 - inbytes: 0x58 -&amp;gt; 0x88 (final state: inbytes: 0x88, outbytes: 0x8)&lt;br /&gt;
** Changed:    95 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    96 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x8, outbytes: 0x80)&lt;br /&gt;
** Changed:    97 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x1)&lt;br /&gt;
** Removed:   406 - buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0&lt;br /&gt;
** Added:     411 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     413 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     414 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** Added:     415 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** Added:     416 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     417 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     418 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     419 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     420 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     511 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:     512 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Changed:  1802 - buffer_entry_sizes: [0x90] -&amp;gt; [0x98] (final state: buffer_entry_sizes: [0x98], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Changed:  1803 - buffer_entry_sizes: [0xB0] -&amp;gt; [0xB8] (final state: buffer_entry_sizes: [0xB8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
** Added:    2360 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    2361 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Changed:  2513 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:  2517 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDevelopInterface&lt;br /&gt;
** Changed:    17 - outbytes: 0x50 -&amp;gt; 0x80 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x80)&lt;br /&gt;
** Changed:    18 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0, outhandles: [1])&lt;br /&gt;
** Changed:    19 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x0)&lt;br /&gt;
** Changed:    21 - outbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x10, outbytes: 0x80)&lt;br /&gt;
** Changed:    22 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
** Changed:    23 - inbytes: 0x50 -&amp;gt; 0x80 (final state: inbytes: 0x80, outbytes: 0x8)&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDocumentInterface&lt;br /&gt;
** Added:    2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface&lt;br /&gt;
** Added:       5 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:       6 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:    8022 - buffer_entry_sizes: [0x20, 0x10], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:   50001 - buffers: [0x6], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:   50011 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:   50012 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlService&lt;br /&gt;
** Changed:  2011 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2012 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** Changed:  2013 - outbytes: 0x8 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** Changed:  2101 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x18)&lt;br /&gt;
** Added:    2103 - buffer_entry_sizes: [0x200, 0x88], buffers: [0x16, 0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:    2104 - buffer_entry_sizes: [0x200], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:    2401 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** Added:    2501 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2009 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
* Interface Added: nn::am::service::IApplicationObserver&lt;br /&gt;
* Interface Added: nn::am::service::IMovieWriter&lt;br /&gt;
* Interface Added: nn::am::service::ISystemProcessCommonFunctions&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::am::service::IAllSystemAppletProxiesService&lt;br /&gt;
** Added:     450 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::ISystemProcessCommonFunctions&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:     310 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     320 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     321 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     330 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IApplicationFunctions&lt;br /&gt;
** Added:     300 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::ICommonStateGetter&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Removed:   600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
** Added:    1000 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1001 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1002 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Changed:    31 - inbytes: 0x58 -&amp;gt; 0x88 (final state: buffer_entry_sizes: [0x10, 0x0], buffers: [0x5, 0x5], inbytes: 0x88, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::am::service::IHomeMenuFunctions&lt;br /&gt;
** Added:      60 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ILibraryAppletAccessor&lt;br /&gt;
** Added:      80 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      81 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IAppletAccessor&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      50 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      60 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::ISelfController&lt;br /&gt;
** Added:      22 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      23 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Changed:   103 - inbytes: 0x0 -&amp;gt; 0x4 (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0x4, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     150 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::erpt::sf::IContext&lt;br /&gt;
** Changed:     2 - inbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x20, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Changed:  1004 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x404, 0x88], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x0)&lt;br /&gt;
** Changed:  1106 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1107 - inbytes: 0x68 -&amp;gt; 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x78, outbytes: 0x18)&lt;br /&gt;
** Changed:  1108 - inbytes: 0x70 -&amp;gt; 0x80 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x80, outbytes: 0x18)&lt;br /&gt;
** Added:    1109 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x78, outbytes: 0x18&lt;br /&gt;
** Added:    1110 - buffers: [0x6, 0x45, 0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    1111 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1112 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
** Added:    1113 - buffer_entry_sizes: [0x400, 0x404, 0x0], buffers: [0x15, 0x15, 0x6], inbytes: 0x88, outbytes: 0x18&lt;br /&gt;
** Added:    1114 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x80, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotService&lt;br /&gt;
** Changed:  1000 - inbytes: 0x68 -&amp;gt; 0x70 (final state: buffer_entry_sizes: [0x88, 0x400], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x20)&lt;br /&gt;
* Interface Changed: nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
** Removed:     7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    2017 - inbytes: 0x20, outbytes: 0x8, outhandles: [1]&lt;br /&gt;
** Added:    2019 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Added: nn::npns::IFuture&lt;br /&gt;
* Interface Added: nn::npns::ISubscriptionUpdateNotifier&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:      17 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::ISubscriptionUpdateNotifier&#039;]&lt;br /&gt;
** Added:      60 - buffer_entry_sizes: [0x298], buffers: [0x15], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:      61 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     141 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     142 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     143 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     144 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
** Added:     145 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::npns::IFuture&#039;]&lt;br /&gt;
* Interface Changed: nn::arp::detail::IRegistrar&lt;br /&gt;
** Removed:     2 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::arp::detail::IWriter&lt;br /&gt;
** Added:       4 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Changed:  1027 - buffer_entry_sizes: [0x10, 0x0] -&amp;gt; [0x10, 0x8, 0x0], buffers: [0x6, 0x5] -&amp;gt; [0x6, 0x5, 0x5], inbytes: 0x10 -&amp;gt; 0x8 (final state: buffer_entry_sizes: [0x10, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
** Added:    1029 - buffer_entry_sizes: [0x18, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Added: nn::grcsrv::IMovieWriter&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGameMovieTrimmer&lt;br /&gt;
** Added:      21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGrcService&lt;br /&gt;
** Added:     110 - inbytes: 0x20, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IMovieWriter&#039;]&lt;br /&gt;
* Interface Changed: nn::mii::detail::IDatabaseService&lt;br /&gt;
** Added:      27 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::mii::detail::IImageDatabaseService&lt;br /&gt;
** Added:      18 - buffers: [0x5], inbytes: 0x3A, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IClient&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::savedata::IServer&lt;br /&gt;
** Added:     510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::migration::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::migration::user::IService&lt;br /&gt;
** Added:       0 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
** Changed:   907 - inbytes: 0x70 -&amp;gt; 0x78 (final state: inbytes: 0x78, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::omm::detail::IOperationModeManager&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
* Interface Changed: nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
** Changed:   610 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   611 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** Changed:   612 - buffer_entry_sizes: [0x4C8] -&amp;gt; [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::sasbus::ISession&lt;br /&gt;
** Added:       4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Changed:   206 - outbytes: 0x0 -&amp;gt; 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)&lt;br /&gt;
** Added:     223 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:      29 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IEventNotifier&#039;]&lt;br /&gt;
** Added:     632 - inbytes: 0x20, outbytes: 0x0&lt;br /&gt;
** Added:     820 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::ldr::detail::IProcessManagerInterface&lt;br /&gt;
** Changed:     1 - buffer_entry_sizes: [0x400] -&amp;gt; [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::pm::detail::IBootModeInterface&lt;br /&gt;
** Added:       2 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:       3 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::pm::detail::IShellInterface&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Added:      13 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
** Added:   13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::IStaticService&lt;br /&gt;
** Added:     600 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::timesrv::detail::service::ITimeServiceManager&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x18&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_12 (previously master_key_11). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* KMemoryManager now supports per-pool-partition minimum page alignments.&lt;br /&gt;
** KMemoryManager::Initialize now aborts unless a valid pool index is chosen.&lt;br /&gt;
** KMemoryManager::Initialize now takes an additional array argument of minimum-page alignments (one array entry per pool partition).&lt;br /&gt;
*** This array is currently all-zero, which corresponds to minimum allocation alignment of 0x1000 (1 page).&lt;br /&gt;
** Allocation functions now check that alignment is valid for the pool&#039;s minimum.&lt;br /&gt;
** MapPhysicalMemory now checks alignment based on the mm min-pages.&lt;br /&gt;
** UnmapPhysicalMemory now checks alignment based on the mm min-pages.&lt;br /&gt;
** StartProcess() now checks alignment/aligns up based on the mm min-pages.&lt;br /&gt;
** KProcess::Run no longer aligns the input stack-size up to page size when checking that stack + code size does not exceed m_max_process_memory.&lt;br /&gt;
* KMemoryBlock was refactored:&lt;br /&gt;
** Fields were shuffled around, optimizing the storage layout.&lt;br /&gt;
*** The last field now ends @ +0x3A, instead of +0x40 before, coming close to but not actually saving 8 bytes per block.&lt;br /&gt;
**** This presumably makes space for fields which are ifdef&#039;d out on NX.&lt;br /&gt;
** DisableMergeAttribute_(Device)Right is now 0x20, instead of 0x10.&lt;br /&gt;
*** Bit 0x10 appears nowhere in entire kernel now, and code which previously did &amp;amp; 0xF to get the Left disable attrs still does &amp;amp; 0xF.&lt;br /&gt;
**** Bit 0x10 is presumably ifdef&#039;d out on NX.&lt;br /&gt;
** KMemoryInfo is essentially no longer used at all any more.&lt;br /&gt;
*** All cases where GetMemoryInfo was called now use the fields from the KMemoryBlock directly.&lt;br /&gt;
*** The one exception to this is KPageTableBase::QueryInfo, which still returns a KMemoryInfo as output variable.&lt;br /&gt;
* The kernel now handles ttbr0 management completely differently:&lt;br /&gt;
** The kernel now stores an array of 0x51 TTBR0 pages (Kernel + 0x50 KProcesses, matching the slab heap size) in .rodata.&lt;br /&gt;
*** Initialize1 now calls a new function prior to unmapping the identity mapping which allocates these pages from the InitialPageAllocator (using paddr lookup + the identity mapping to write to the read-only array in .rodata).&lt;br /&gt;
** KSleepSystemRegisters::Save no longer saves TTBR0_EL1; ::Restore sets ttbr0_el1 to g_Ttbr0Pages[0].&lt;br /&gt;
** KProcess::InitializeUser now checks that the KProcess is within the slabheap; the KProcess&#039;s slab heap index is now passed to KProcessPageTable::Initialize.&lt;br /&gt;
** KPageTable no longer has any globals to track ASID management; ASID is now just the KProcess&#039;s slab heap index + 1.&lt;br /&gt;
* KTargetSystem refactor:&lt;br /&gt;
** KTargetSystem is now located in .rodata, and no longer 4-byte aligns the bools.&lt;br /&gt;
** new .init_array function initializes all the KTargetSystem values in .rodata (before the region is write-protected) using values-from-smc.&lt;br /&gt;
** KSystemControl::Initialize() now sets new bool (g_HasKTargetSystem) to true.&lt;br /&gt;
*** Instead of setting values, KSystemControl now does ABORT_UNLESS(value_from_smc == (g_HasKTargetSystem &amp;amp;&amp;amp; g_KTargetSystem.value)) for all values.&lt;br /&gt;
*** This essentially just checks that the previous .init call worked as expected.&lt;br /&gt;
** All KTargetSystem::Is*() calls now return g_HasKTargetSystem &amp;amp;&amp;amp; g_KTargetSystem.value instead of just returning g_KTargetSystem.value&lt;br /&gt;
*** Note: these are still fully inlined in all cases.&lt;br /&gt;
* KAddressSpaceInfo::GetBegin/GetSize now take in CreateProcess flags instead of bit-width.&lt;br /&gt;
* svc::WaitForAddress now supports a new ArbitrationType (ArbitrationType_WaitIfEqual64, value=3).&lt;br /&gt;
** svc::WaitForAddress&#039;s &amp;quot;value&amp;quot; parameter is now an int64_t, instead of an int32_t.&lt;br /&gt;
** When ArbitrationType_WaitIfEqual64 is passed, address is now checked for 8-byte alignment instead of 4-byte alignment, and 64-bit value is read/compared from userspace instead of 32-bit.&lt;br /&gt;
* New InfoType 0x22: &amp;quot;InfoType_TransferMemoryHint&amp;quot;&lt;br /&gt;
** This returns a hint for the transfer memory&#039;s process address.&lt;br /&gt;
** InfoType values 0x1D-0x21 are presumably ifdef&#039;d out on NX.&lt;br /&gt;
* KProcess-&amp;gt;max_process_memory is now set to GetHeapRegionSize() in all cases.&lt;br /&gt;
** Previously, this was GetHeapRegionSize() + GetAliasRegionSize() for processes with AddressSpace32BitWithoutAlias.&lt;br /&gt;
* The kernel now supports execute-only memory (--X).&lt;br /&gt;
** SetProcessMemoryPermission now supports MemoryPermission_Execute.&lt;br /&gt;
*** KPageTableBase::SetProcessMemoryPermission now acquires and immediately releases the scheduler lock prior to operating, if the Execute bit is set on the input permissions.&lt;br /&gt;
** KPageTable::GetEntryTemplate now checks for the MemoryPermission_Execute bit instead of checking directly against ReadExecute.&lt;br /&gt;
** HandleException now supports using supervisor-mode access to read the failing instruction on Unknown/IllegalState/Bkpt/Brk.&lt;br /&gt;
*** Supervisor-mode access is used only if user-access fails, KTargetSystem::IsDebugMode() returns true, pc is 4-byte aligned, and 0x200000 &amp;lt;= PC &amp;lt;= (1 &amp;lt;&amp;lt; 39).&lt;br /&gt;
** HandleException now no longer forces processing when accessing MemoryState_Code without KMemoryPermission_UserRead.&lt;br /&gt;
* The way DebugFlags capabilities works was changed:&lt;br /&gt;
** Previously, bit0=AllowDebug, bit1=ForceDebug.&lt;br /&gt;
** Now, bit0=AllowDebug, bit1=ForceDebugProd, bit2=ForceDebug.&lt;br /&gt;
*** Processes may now only have one of the above bits set, previously both AllowDebug and ForceDebug were allowed simultaneously.&lt;br /&gt;
** New function requires KTargetSystem::IsDebugMode():&lt;br /&gt;
*** GetProcessList,&lt;br /&gt;
** Many functions now require (KTargetSystem::IsDebugMode() || GetCurrentProcess().IsForceDebugProd()):&lt;br /&gt;
*** DebugActiveProcess, GetDebugEvent, QueryDebugProcessMemory, ReadDebugMemory, GetThreadList, GetDebugThreadContext, GetDebugThreadParam,&lt;br /&gt;
** KDebug now has a member which tracks whether the owner process is ForceDebugProd.&lt;br /&gt;
** KDebugBase::Attach now requires !ForceDebugProd when attaching to a process in the Created/Running states.&lt;br /&gt;
*** Crashed may still be attached to when ForceDebugProd.&lt;br /&gt;
** KDebugBase::GetDebugEventInfo now always sets instruction = 0 when creating info for an UndefinedInstruction exception when ForceDebugProd.&lt;br /&gt;
** KDebugBase::(Read/Write)Memory no longer allow reading/writing Io memory when ForceDebugProd is set.&lt;br /&gt;
** KPageTableBase::(Read/Write)DebugMemory now check memory state differently:&lt;br /&gt;
*** Previously: either memory had to be UserRead/UserReadWrite (no state flags check) or KMemoryState_FlagCanDebug had to be set.&lt;br /&gt;
*** Now: memory has to be UserRead/UserReadWrite (no state flags check) or (memory has to be UserRead AND KMemoryState_FlagCanDebug has to be set) or (IsDebugMode() &amp;amp;&amp;amp; !ForceDebugProd &amp;amp;&amp;amp; memory has to have KernelRead|UserExecute bits &amp;amp;&amp;amp; KMemoryState_FlagCanDebug has to be set)&lt;br /&gt;
**** This renders the original flag check completely pointless for ReadDebugMemory (but still allows writing to UserRead memory).&lt;br /&gt;
**** Memory which was previously readable despite not-user-read is no longer readable.&lt;br /&gt;
**** Execute-only memory is readable, but only when running under debug mode and using a KDebug created by a process which does not have ForceDebugProd set.&lt;br /&gt;
**** The ForceDebugProd check is not present for WriteDebugMemory.&lt;br /&gt;
** GetThreadList() no longer functions in non-debug mode even with ForceDebugProd&lt;br /&gt;
** KDebugBase::TerminateProcess no longer detaches from the target process.&lt;br /&gt;
* Changes relevant to debugging the kernel:&lt;br /&gt;
** EL1SynchronousExceptionHandler now infinite loops instead of calling HandleException.&lt;br /&gt;
** SupervisorModeThreadStarter now sets X30 to 0 + creates a stack frame + invokes the thread function with &amp;quot;BLR X1&amp;quot; instead of &amp;quot;BR X1&amp;quot;.&lt;br /&gt;
*** This guarantees validity if walking kernel stack frames.&lt;br /&gt;
* KPageTable implementation was heavily rewritten.&lt;br /&gt;
** Too many changes to summarize here; the fundamental implementation is now based on iteration over levels using TraversalContext instead of separate per-level logic.&lt;br /&gt;
* KPageTableBase::SetupForIpcClient now validates that the unused (on nx) upper memory attribute bits are all unset.&lt;br /&gt;
* Many heavy K(Initial)PageTable changes, including:&lt;br /&gt;
** KInitialPageTable&#039;s table entries no longer have bit 58 (0x0400000000000000) set; previously this was used to indicate/determine whether a mapping was present even if the entry was NotMapped.&lt;br /&gt;
*** Bit0 (0x1) is now used to check for mapping existence again in many places.&lt;br /&gt;
** KPageTableImpl::InitializeForKernel now iterates over mappings created by KInitialPageTable, setting PageAttribute=#used entries for tables and setting bit 58 on blocks.&lt;br /&gt;
* KInterruptController::Finalize() now sets m_gicd and m_gicc to nullptr if core id == 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== [[SSL_services|ssl]] ===&lt;br /&gt;
Besides IPC changes, a vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2024-10-08_00-00-37&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_Report_services&amp;diff=12740</id>
		<title>Error Report services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_Report_services&amp;diff=12740"/>
		<updated>2024-03-29T07:23:10Z</updated>

		<summary type="html">&lt;p&gt;SciresM: fix new firleids&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= erpt:c =&lt;br /&gt;
This is &amp;quot;nn::erpt::sf::IContext&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#SubmitContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#CreateReportV0]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] SetInitialLaunchSettingsCompletionTime&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [3.0.0+] ClearInitialLaunchSettingsCompletionTime&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [3.0.0-11.0.1] UpdatePowerOnTime&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [3.0.0-11.0.1] UpdateAwakeTime&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] SubmitMultipleCategoryContext&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [6.0.0+] UpdateApplicationLaunchTime&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [6.0.0+] ClearApplicationLaunchTime&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [8.0.0+] SubmitAttachment&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [8.0.0+] [[#CreateReportWithAttachments]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [17.0.0+] CreateReportV1 ([11.0.0-16.1.0] CreateReport)&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [17.0.0+] CreateReport&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [12.0.0+] RegisterRunningApplet&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [12.0.0+] UnregisterRunningApplet&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [12.0.0+] UpdateAppletSuspendedDuration&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [12.0.0+] InvalidateForcedShutdownDetection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SubmitContext ==&lt;br /&gt;
Takes two type-0x5 input buffers [[#ContextEntry]] and &#039;&#039;&#039;FieldList&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== CreateReportV0 ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;ReportType&#039;&#039;&#039; and 3 type-0x5 input buffers [[#ContextEntry]], &#039;&#039;&#039;ReportList&#039;&#039;&#039; and &#039;&#039;&#039;ReportMetaData&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
== CreateReportWithAttachments ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;ReportType&#039;&#039;&#039; and 3 type-0x5 input buffers. No output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Now takes an additional u32.&lt;br /&gt;
&lt;br /&gt;
[17.0.0+] Now takes an additional [[#CreateReportOptionFlag]].&lt;br /&gt;
&lt;br /&gt;
= erpt:r =&lt;br /&gt;
This is &amp;quot;nn::erpt::sf::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenReport&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenManager&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [8.0.0+] OpenAttachment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IReport ==&lt;br /&gt;
This is &amp;quot;nn::erpt::sf::IReport&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Open&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetFlags&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetFlags&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Close&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IManager ==&lt;br /&gt;
This is &amp;quot;nn::erpt::sf::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetReportList&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] CleanupReports&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] DeleteReport&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [5.0.0+] GetStorageUsageStatistics&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [8.0.0+] GetAttachmentList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAttachment ==&lt;br /&gt;
This is &amp;quot;nn::erpt::sf::IAttachment&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Open&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetFlags&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetFlags&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Close&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sprof:bg, sprof:sp =&lt;br /&gt;
These are &amp;quot;nn::sprofile::srv::IServiceGetter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSprofileServiceForSystemProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSprofileServiceForBgAgent]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSprofileServiceForSystemProcess ==&lt;br /&gt;
No input. Returns an [[#ISprofileServiceForSystemProcess]].&lt;br /&gt;
&lt;br /&gt;
== OpenSprofileServiceForBgAgent ==&lt;br /&gt;
No input. Returns an [[#ISprofileServiceForBgAgent]].&lt;br /&gt;
&lt;br /&gt;
== ISprofileServiceForBgAgent ==&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::ISprofileServiceForBgAgent&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [13.0.0+].&lt;br /&gt;
&lt;br /&gt;
This was moved from its own service &amp;quot;sprof:bg&amp;quot; with [14.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#OpenProfileImporter]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || ReadMetadata&lt;br /&gt;
|-&lt;br /&gt;
| 201 || IsUpdateNeeded&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || Reset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OpenProfileImporter ===&lt;br /&gt;
No input. Returns an [[#IProfileImporter]].&lt;br /&gt;
&lt;br /&gt;
=== IProfileImporter ===&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::IProfileImporter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ImportData&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Commit&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ImportMetadata&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISprofileServiceForSystemProcess ==&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::ISprofileServiceForSystemProcess&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [13.0.0+].&lt;br /&gt;
&lt;br /&gt;
This was moved from its own service &amp;quot;sprof:sp&amp;quot; with [14.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#OpenProfileReader]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#OpenProfileUpdateObserver]]&lt;br /&gt;
|-&lt;br /&gt;
| 900 || [[#OpenProfileControllerForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OpenProfileReader ===&lt;br /&gt;
No input. Returns an [[#IProfileReader]].&lt;br /&gt;
&lt;br /&gt;
=== OpenProfileUpdateObserver ===&lt;br /&gt;
No input. Returns an [[#IProfileUpdateObserver]].&lt;br /&gt;
&lt;br /&gt;
=== OpenProfileControllerForDebug ===&lt;br /&gt;
No input. Returns an [[#IProfileControllerForDebug]].&lt;br /&gt;
&lt;br /&gt;
=== IProfileReader ===&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::IProfileReader&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetSigned64&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetUnsigned64&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSigned32&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetUnsigned32&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetByte&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IProfileUpdateObserver ===&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::IProfileUpdateObserver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Listen&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Unlisten&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetEvent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IProfileControllerForDebug ===&lt;br /&gt;
This is &amp;quot;nn::sprofile::srv::IProfileControllerForDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 2001 || GetRaw&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ContextEntry =&lt;br /&gt;
This is &amp;quot;nn::erpt::ContextEntry&amp;quot;. This is a 0x160-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || FieldCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CategoryId&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x144 || Array of FieldEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || 0x8 || Pointer to a FieldList object&lt;br /&gt;
|-&lt;br /&gt;
| 0x158 || 0x4 || FieldList free count&lt;br /&gt;
|-&lt;br /&gt;
| 0x15C || 0x4 || FieldList total size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CreateReportOptionFlag =&lt;br /&gt;
This is &amp;quot;nn::erpt::CreateReportOptionFlag&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
= FieldId =&lt;br /&gt;
This is &amp;quot;nn::erpt::FieldId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Category || FieldType || FieldFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || TestU64 || Test || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || TestU32 || Test || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || TestI64 || Test || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || TestI32 || Test || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || TestString || Test || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || TestU8Array || Test || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || TestU32Array || Test || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || TestU64Array || Test || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || TestI32Array || Test || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || TestI64Array || Test || I64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || ErrorCode || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || ErrorDescription || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || OccurrenceTimestamp || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || ReportIdentifier || ErrorInfoAuto || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || ConnectionStatus || ConnectionStatusInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || AccessPointSSID || AccessPointInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || AccessPointSecurityType || AccessPointInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || RadioStrength || RadioStrengthInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || NXMacAddress || NXMacAddressInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || IPAddressAcquisitionMethod || NetworkInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || CurrentIPAddress || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || SubnetMask || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || GatewayIPAddress || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || DNSType || NetworkInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || PriorityDNSIPAddress || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || AlternateDNSIPAddress || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || UseProxyFlag || NetworkInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || ProxyIPAddress || NetworkInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || ProxyPort || NetworkInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || ProxyAutoAuthenticateFlag || NetworkInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || MTU || NetworkInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || ConnectAutomaticallyFlag || NetworkInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UseStealthNetworkFlag || StealthNetworkInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || LimitHighCapacityFlag || LimitHighCapacityInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || NATType || NATTypeInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || WirelessAPMacAddress || WirelessAPMacAddressInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || GlobalIPAddress || GlobalIPAddressInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || EnableWirelessInterfaceFlag || EnableWirelessInterfaceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || EnableWifiFlag || EnableWifiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || EnableBluetoothFlag || EnableBluetoothInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || EnableNFCFlag || EnableNFCInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || NintendoZoneSSIDListVersion || NintendoZoneSSIDListVersionInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || LANAdapterMacAddress || LANAdapterMacAddressInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || ApplicationID || ApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || ApplicationTitle || ApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || ApplicationVersion || ApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || ApplicationStorageLocation || ApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || DownloadContentType || OccurrenceInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || InstallContentType || OccurrenceInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || ConsoleStartingUpFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || SystemStartingUpFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || ConsoleFirstInitFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || HomeMenuScreenDisplayedFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || DataManagementScreenDisplayedFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || ConnectionTestingFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || ApplicationRunningFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || DataCorruptionDetectedFlag || OccurrenceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || ProductModel || ProductModelInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || CurrentLanguage || CurrentLanguageInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || UseNetworkTimeProtocolFlag || UseNetworkTimeProtocolInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || TimeZone || TimeZoneInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || ControllerFirmware || ControllerFirmwareInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || VideoOutputSetting || VideoOutputInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || NANDFreeSpace || NANDFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SDCardFreeSpace || SDCardFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SerialNumber || ErrorInfoAuto || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || OsVersion || ErrorInfoAuto || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || ScreenBrightnessAutoAdjustFlag || ScreenBrightnessInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || HdmiAudioOutputMode || AudioFormatInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || SpeakerAudioOutputMode || AudioFormatInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || HeadphoneAudioOutputMode || AudioFormatInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || MuteOnHeadsetUnpluggedFlag || MuteOnHeadsetUnpluggedInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || NumUserRegistered || NumUserRegisteredInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || StorageAutoOrganizeFlag || DataDeletionInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || ControllerVibrationVolume || ControllerVibrationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || LockScreenFlag || LockScreenInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || InternalBatteryLotNumber || InternalBatteryLotNumberInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || LeftControllerSerialNumber || LeftControllerSerialNumberInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || RightControllerSerialNumber || RightControllerSerialNumberInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || NotifyInGameDownloadCompletionFlag || NotificationInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || NotificationSoundFlag || NotificationInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || TVResolutionSetting || TVInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || RGBRangeSetting || TVInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || ReduceScreenBurnFlag || TVInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || TVAllowsCecFlag || TVInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || HandheldModeTimeToScreenSleep || SleepInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || ConsoleModeTimeToScreenSleep || SleepInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || StopAutoSleepDuringContentPlayFlag || SleepInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || LastConnectionTestDownloadSpeed || ConnectionInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || LastConnectionTestUploadSpeed || ConnectionInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || DEPRECATED_ServerFQDN || NetworkErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || HTTPRequestContents || NetworkErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || HTTPRequestResponseContents || NetworkErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || EdgeServerIPAddress || NetworkErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || CDNContentPath || NetworkErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || FileAccessPath || FileAccessPathInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || GameCardCID || GameCardCIDInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || NANDCID || NANDCIDInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || MicroSDCID || MicroSDCIDInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || NANDSpeedMode || NANDSpeedModeInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || MicroSDSpeedMode || MicroSDSpeedModeInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || GameCardSpeedMode || GameCardSpeedModeInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || UserAccountInternalID || UserAccountInternalIDInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || NetworkServiceAccountInternalID || NetworkServiceAccountInternalIDInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || NintendoAccountInternalID || NintendoAccountInternalIDInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || USB3AvailableFlag || USB3AvailableInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || CallStack || CallStackInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || SystemStartupLog || SystemStartupLogInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || RegionSetting || RegionSettingInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || NintendoZoneConnectedFlag || NintendoZoneConnectedInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E || ForcedSleepHighTemperatureReading || ForceSleepInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x6F || ForcedSleepFanSpeedReading || ForceSleepInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || ForcedSleepHWInfo || ForceSleepInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || AbnormalPowerStateInfo || ChargerInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || ScreenBrightnessLevel || ScreenBrightnessInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || ProgramId || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || AbortFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || ReportVisibilityFlag || ErrorInfoAuto || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || FatalFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || OccurrenceTimestampNet || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || ResultBacktrace || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || GeneralRegisterAarch32 || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || StackBacktrace32 || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || ExceptionInfoAarch32 || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || GeneralRegisterAarch64 || ErrorInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || ExceptionInfoAarch64 || ErrorInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || StackBacktrace64 || ErrorInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || RegisterSetFlag32 || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || RegisterSetFlag64 || ErrorInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ProgramMappedAddr32 || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || ProgramMappedAddr64 || ErrorInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || AbortType || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || PrivateOsVersion || ErrorInfoAuto || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || CurrentSystemPowerState || SystemPowerStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || PreviousSystemPowerState || SystemPowerStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x87 || DestinationSystemPowerState || SystemPowerStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || PscTransitionCurrentState || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x89 || PscTransitionPreviousState || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || PscInitializedList || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B || PscCurrentPmStateList || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C || PscNextPmStateList || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D || PerformanceMode || PerformanceInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || PerformanceConfiguration || PerformanceInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || Throttled || ThrottlingInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ThrottlingDuration || ThrottlingInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x91 || ThrottlingTimestamp || ThrottlingInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || GameCardCrcErrorCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x93 || GameCardAsicCrcErrorCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || GameCardRefreshCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x95 || GameCardReadRetryCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x96 || EdidBlock || EdidInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x97 || EdidExtensionBlock || EdidInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || CreateProcessFailureFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x99 || TemperaturePcb || ThermalInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || TemperatureSoc || ThermalInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B || CurrentFanDuty || ThermalInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || LastDvfsThresholdTripped || ThermalInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || CradlePdcHFwVersion || CradleFirmwareInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || CradlePdcAFwVersion || CradleFirmwareInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F || CradleMcuFwVersion || CradleFirmwareInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || CradleDp2HdmiFwVersion || CradleFirmwareInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || RunningApplicationId || RunningApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA2 || RunningApplicationTitle || RunningApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || RunningApplicationVersion || RunningApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || RunningApplicationStorageLocation || RunningApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || RunningAppletList || RunningAppletInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA6 || FocusedAppletHistory || FocusedAppletHistoryInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA7 || CompositorState || CompositorStateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || CompositorLayerState || CompositorLayerInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || CompositorDisplayState || CompositorDisplayInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || CompositorHWCState || CompositorHWCInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAB || InputCurrentLimit || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || BoostModeCurrentLimit || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAD || FastChargeCurrentLimit || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE || ChargeVoltageLimit || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xAF || ChargeConfiguration || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || HizMode || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB1 || ChargeEnabled || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB2 || PowerSupplyPath || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB3 || BatteryTemperature || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB4 || BatteryChargePercent || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB5 || BatteryChargeVoltage || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB6 || BatteryAge || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB7 || PowerRole || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || PowerSupplyType || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xB9 || PowerSupplyVoltage || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBA || PowerSupplyCurrent || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBB || FastBatteryChargingEnabled || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBC || ControllerPowerSupplyAcquired || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD || OtgRequested || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE || NANDPreEolInfo || NANDExtendedCsd || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xBF || NANDDeviceLifeTimeEstTypA || NANDExtendedCsd || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || NANDDeviceLifeTimeEstTypB || NANDExtendedCsd || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC1 || NANDPatrolCount || NANDPatrolInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC2 || NANDNumActivationFailures || NANDErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3 || NANDNumActivationErrorCorrections || NANDErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4 || NANDNumReadWriteFailures || NANDErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC5 || NANDNumReadWriteErrorCorrections || NANDErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC6 || NANDErrorLog || NANDDriverLog || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC7 || SdCardUserAreaSize || SdCardSizeSpec || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 || SdCardProtectedAreaSize || SdCardSizeSpec || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC9 || SdCardNumActivationFailures || SdCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA || SdCardNumActivationErrorCorrections || SdCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCB || SdCardNumReadWriteFailures || SdCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC || SdCardNumReadWriteErrorCorrections || SdCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCD || SdCardErrorLog || SdCardDriverLog  || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE || EncryptionKey || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xCF || EncryptedExceptionInfo || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || GameCardTimeoutRetryErrorCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD1 || FsRemountForDataCorruptCount || FsProxyErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD2 || FsRemountForDataCorruptRetryOutCount || FsProxyErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD3 || [3.0.0+] GameCardInsertionCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD4 || [3.0.0+] GameCardRemovalCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD5 || [3.0.0+] GameCardAsicInitializeCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD6 || [3.0.0+] TestU16 || Test || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD7 || [3.0.0+] TestU8 || Test || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || [3.0.0+] TestI16 || Test || NumericI16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || [3.0.0+] TestI8 || Test || NumericI8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDA || [3.0.0+] SystemAppletScene || SystemAppletSceneInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDB || [3.0.0+] CodecType || VideoInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || [3.0.0+] DecodeBuffers || VideoInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDD || [3.0.0+] FrameWidth || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || [3.0.0+] FrameHeight || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xDF || [3.0.0+] ColorPrimaries || VideoInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || [3.0.0+] TransferCharacteristics || VideoInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE1 || [3.0.0+] MatrixCoefficients || VideoInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE2 || [3.0.0+] DisplayWidth || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE3 || [3.0.0+] DisplayHeight || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4 || [3.0.0+] DARWidth || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE5 || [3.0.0+] DARHeight || VideoInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE6 || [3.0.0+] ColorFormat || VideoInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE7 || [3.0.0+] ColorSpace || VideoInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || [3.0.0+] SurfaceLayout || VideoInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xE9 || [3.0.0+] BitStream || VideoInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xEA || [3.0.0+] VideoDecState || VideoInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xEB || [3.0.0+] GpuErrorChannelId || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || [3.0.0+] GpuErrorAruId || GpuErrorInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xED || [3.0.0+] GpuErrorType || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xEE || [3.0.0+] GpuErrorFaultInfo || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xEF || [3.0.0+] GpuErrorWriteAccess || GpuErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || [3.0.0+] GpuErrorFaultAddress || GpuErrorInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF1 || [3.0.0+] GpuErrorFaultUnit || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF2 || [3.0.0+] GpuErrorFaultType || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF3 || [3.0.0+] GpuErrorHwContextPointer || GpuErrorInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF4 || [3.0.0+] GpuErrorContextStatus || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF5 || [3.0.0+] GpuErrorPbdmaIntr || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF6 || [3.0.0+] GpuErrorPbdmaErrorType || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF7 || [3.0.0+] GpuErrorPbdmaHeaderShadow || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [3.0.0+] GpuErrorPbdmaHeader || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xF9 || [3.0.0+] GpuErrorPbdmaGpShadow0 || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA || [3.0.0+] GpuErrorPbdmaGpShadow1 || GpuErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFB || [3.0.0+] AccessPointChannel || AccessPointInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC || [3.0.0+] ThreadName || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFD || [3.0.0+] AdspExceptionRegisters || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFE || [3.0.0+] AdspExceptionSpsr || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || [3.0.0+] AdspExceptionProgramCounter || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || [3.0.0+] AdspExceptionLinkRegister || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || [3.0.0+] AdspExceptionStackPointer || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || [3.0.0+] AdspExceptionArmModeRegisters || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || [3.0.0+] AdspExceptionStackAddress || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || [3.0.0+] AdspExceptionStackDump || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x105 || [3.0.0+] AdspExceptionReason || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || [3.0.0+] OscillatorClock || PowerClockInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x107 || [3.0.0+] CpuDvfsTableClocks || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [3.0.0+] CpuDvfsTableVoltages || PowerClockInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x109 || [3.0.0+] GpuDvfsTableClocks || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10A || [3.0.0+] GpuDvfsTableVoltages || PowerClockInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B || [3.0.0+] EmcDvfsTableClocks || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10C || [3.0.0+] EmcDvfsTableVoltages || PowerClockInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10D || [3.0.0+] ModuleClockFrequencies || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10E || [3.0.0+] ModuleClockEnableFlags || PowerClockInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x10F || [3.0.0+] ModulePowerEnableFlags || PowerClockInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || [3.0.0+] ModuleResetAssertFlags || PowerClockInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x111 || [3.0.0+] ModuleMinimumVoltageClockRates || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x112 || [3.0.0+] PowerDomainEnableFlags || PowerClockInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x113 || [3.0.0+] PowerDomainVoltages || PowerClockInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x114 || [3.0.0+] AccessPointRssi || RadioStrengthInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x115 || [3.0.0+] FuseInfo || PowerClockInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x116 || [3.0.0+] VideoLog || VideoInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x117 || [3.0.0+] GameCardDeviceId || GameCardCIDInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [3.0.0+] GameCardAsicReinitializeCount || GameCardErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x119 || [3.0.0+] GameCardAsicReinitializeFailureCount || GameCardErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11A || [3.0.0+] GameCardAsicReinitializeFailureDetail || GameCardErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11B || [3.0.0+] GameCardRefreshSuccessCount || GameCardErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11C || [3.0.0+] GameCardAwakenCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11D || [3.0.0+] GameCardAwakenFailureCount || GameCardErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11E || [3.0.0+] GameCardReadCountFromInsert || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x11F || [3.0.0+] GameCardReadCountFromAwaken || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [3.0.0+] GameCardLastReadErrorPageAddress || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x121 || [3.0.0+] GameCardLastReadErrorPageCount || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x122 || [3.0.0+] AppletManagerContextTrace || ErrorInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x123 || [3.0.0+] NvDispIsRegistered || NvDispDeviceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x124 || [3.0.0+] NvDispIsSuspend || NvDispDeviceInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x125 || [3.0.0+] NvDispDC0SurfaceNum || NvDispDeviceInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x126 || [3.0.0+] NvDispDC1SurfaceNum || NvDispDeviceInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x127 || [3.0.0+] NvDispWindowSrcRectX || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [3.0.0+] NvDispWindowSrcRectY || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || [3.0.0+] NvDispWindowSrcRectWidth || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || [3.0.0+] NvDispWindowSrcRectHeight || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12B || [3.0.0+] NvDispWindowDstRectX || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12C || [3.0.0+] NvDispWindowDstRectY || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12D || [3.0.0+] NvDispWindowDstRectWidth || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12E || [3.0.0+] NvDispWindowDstRectHeight || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x12F || [3.0.0+] NvDispWindowIndex || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [3.0.0+] NvDispWindowBlendOperation || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x131 || [3.0.0+] NvDispWindowAlphaOperation || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x132 || [3.0.0+] NvDispWindowDepth || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x133 || [3.0.0+] NvDispWindowAlpha || NvDispDcWindowInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x134 || [3.0.0+] NvDispWindowHFilter || NvDispDcWindowInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x135 || [3.0.0+] NvDispWindowVFilter || NvDispDcWindowInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x136 || [3.0.0+] NvDispWindowOptions || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x137 || [3.0.0+] NvDispWindowSyncPointId || NvDispDcWindowInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [3.0.0+] NvDispDPSorPower || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x139 || [3.0.0+] NvDispDPClkType || NvDispDpModeInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13A || [3.0.0+] NvDispDPEnable || NvDispDpModeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13B || [3.0.0+] NvDispDPState || NvDispDpModeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13C || [3.0.0+] NvDispDPEdid || NvDispDpModeInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13D || [3.0.0+] NvDispDPEdidSize || NvDispDpModeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13E || [3.0.0+] NvDispDPEdidExtSize || NvDispDpModeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x13F || [3.0.0+] NvDispDPFakeMode || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [3.0.0+] NvDispDPModeNumber || NvDispDpModeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x141 || [3.0.0+] NvDispDPPlugInOut || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x142 || [3.0.0+] NvDispDPAuxIntHandler || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x143 || [3.0.0+] NvDispDPForceMaxLinkBW || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x144 || [3.0.0+] NvDispDPIsConnected || NvDispDpModeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x145 || [3.0.0+] NvDispDPLinkValid || NvDispDpLinkSpec || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x146 || [3.0.0+] NvDispDPLinkMaxBW || NvDispDpLinkSpec || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x147 || [3.0.0+] NvDispDPLinkMaxLaneCount || NvDispDpLinkSpec || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [3.0.0+] NvDispDPLinkDownSpread || NvDispDpLinkSpec || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x149 || [3.0.0+] NvDispDPLinkSupportEnhancedFraming || NvDispDpLinkSpec || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14A || [3.0.0+] NvDispDPLinkBpp || NvDispDpLinkSpec || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14B || [3.0.0+] NvDispDPLinkScaramberCap || NvDispDpLinkSpec || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14C || [3.0.0+] NvDispDPLinkBW || NvDispDpLinkStatus || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14D || [3.0.0+] NvDispDPLinkLaneCount || NvDispDpLinkStatus || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E || [3.0.0+] NvDispDPLinkEnhancedFraming || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x14F || [3.0.0+] NvDispDPLinkScrambleEnable || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [3.0.0+] NvDispDPLinkActivePolarity || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x151 || [3.0.0+] NvDispDPLinkActiveCount || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x152 || [3.0.0+] NvDispDPLinkTUSize || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x153 || [3.0.0+] NvDispDPLinkActiveFrac || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x154 || [3.0.0+] NvDispDPLinkWatermark || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x155 || [3.0.0+] NvDispDPLinkHBlank || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x156 || [3.0.0+] NvDispDPLinkVBlank || NvDispDpLinkStatus || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x157 || [3.0.0+] NvDispDPLinkOnlyEnhancedFraming || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x158 || [3.0.0+] NvDispDPLinkOnlyEdpCap || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x159 || [3.0.0+] NvDispDPLinkSupportFastLT || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15A || [3.0.0+] NvDispDPLinkLTDataValid || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15B || [3.0.0+] NvDispDPLinkTsp3Support || NvDispDpLinkStatus || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15C || [3.0.0+] NvDispDPLinkAuxInterval || NvDispDpLinkStatus || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15D || [3.0.0+] NvDispHdcpCreated || NvDispDpHdcpInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15E || [3.0.0+] NvDispHdcpUserRequest || NvDispDpHdcpInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x15F || [3.0.0+] NvDispHdcpPlugged || NvDispDpHdcpInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || [3.0.0+] NvDispHdcpState || NvDispDpHdcpInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x161 || [3.0.0+] NvDispHdcpFailCount || NvDispDpHdcpInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x162 || [3.0.0+] NvDispHdcpHdcp22 || NvDispDpHdcpInfo || NumericI8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x163 || [3.0.0+] NvDispHdcpMaxRetry || NvDispDpHdcpInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x164 || [3.0.0+] NvDispHdcpHpd || NvDispDpHdcpInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x165 || [3.0.0+] NvDispHdcpRepeater || NvDispDpHdcpInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x166 || [3.0.0+] NvDispCecRxBuf || NvDispDpAuxCecInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x167 || [3.0.0+] NvDispCecRxLength || NvDispDpAuxCecInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x168 || [3.0.0+] NvDispCecTxBuf || NvDispDpAuxCecInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x169 || [3.0.0+] NvDispCecTxLength || NvDispDpAuxCecInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16A || [3.0.0+] NvDispCecTxRet || NvDispDpAuxCecInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16B || [3.0.0+] NvDispCecState || NvDispDpAuxCecInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16C || [3.0.0+] NvDispCecTxInfo || NvDispDpAuxCecInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16D || [3.0.0+] NvDispCecRxInfo || NvDispDpAuxCecInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16E || [3.0.0+] NvDispDCIndex || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x16F || [3.0.0+] NvDispDCInitialize || NvDispDcInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || [3.0.0+] NvDispDCClock || NvDispDcInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x171 || [3.0.0+] NvDispDCFrequency || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x172 || [3.0.0+] NvDispDCFailed || NvDispDcInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x173 || [3.0.0+] NvDispDCModeWidth || NvDispDcInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x174 || [3.0.0+] NvDispDCModeHeight || NvDispDcInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x175 || [3.0.0+] NvDispDCModeBpp || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x176 || [3.0.0+] NvDispDCPanelFrequency || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x177 || [3.0.0+] NvDispDCWinDirty || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x178 || [3.0.0+] NvDispDCWinEnable || NvDispDcInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x179 || [3.0.0+] NvDispDCVrr || NvDispDcInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17A || [3.0.0+] NvDispDCPanelInitialize || NvDispDcInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17B || [3.0.0+] NvDispDsiDataFormat || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17C || [3.0.0+] NvDispDsiVideoMode || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17D || [3.0.0+] NvDispDsiRefreshRate || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17E || [3.0.0+] NvDispDsiLpCmdModeFrequency || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x17F || [3.0.0+] NvDispDsiHsCmdModeFrequency || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || [3.0.0+] NvDispDsiPanelResetTimeout || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || [3.0.0+] NvDispDsiPhyFrequency || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || [3.0.0+] NvDispDsiFrequency || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || [3.0.0+] NvDispDsiInstance || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x184 || [3.0.0+] NvDispDcDsiHostCtrlEnable || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x185 || [3.0.0+] NvDispDcDsiInit || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x186 || [3.0.0+] NvDispDcDsiEnable || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x187 || [3.0.0+] NvDispDcDsiHsMode || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || [3.0.0+] NvDispDcDsiVendorId || NvDispDsiInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x189 || [3.0.0+] NvDispDcDsiLcdVendorNum || NvDispDsiInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18A || [3.0.0+] NvDispDcDsiHsClockControl || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18B || [3.0.0+] NvDispDcDsiEnableHsClockInLpMode || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C || [3.0.0+] NvDispDcDsiTeFrameUpdate || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18D || [3.0.0+] NvDispDcDsiGangedType || NvDispDsiInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18E || [3.0.0+] NvDispDcDsiHbpInPktSeq || NvDispDsiInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x18F || [3.0.0+] NvDispErrID || NvDispErrIDInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || [3.0.0+] NvDispErrData0 || NvDispErrIDInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || [3.0.0+] NvDispErrData1 || NvDispErrIDInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || [3.0.0+] SdCardMountStatus || SdCardMountInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || [3.0.0+] SdCardMountUnexpectedResult || SdCardMountInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || [3.0.0+] NANDTotalSize || NANDFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x195 || [3.0.0+] SdCardTotalSize || SDCardFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x196 || [3.0.0+] ElapsedTimeSinceInitialLaunch || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x197 || [3.0.0+] ElapsedTimeSincePowerOn || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [3.0.0+] ElapsedTimeSinceLastAwake || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x199 || [3.0.0+] OccurrenceTick || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19A || [3.0.0+] RetailInteractiveDisplayFlag || RetailInteractiveDisplayInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19B || [3.0.0+] FatFsError || FsProxyErrorInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19C || [3.0.0+] FatFsExtraError || FsProxyErrorInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19D || [3.0.0+] FatFsErrorDrive || FsProxyErrorInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19E || [3.0.0+] FatFsErrorName || FsProxyErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x19F || [3.0.0+] MonitorManufactureCode || MonitorCapability || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || [3.0.0+] MonitorProductCode || MonitorCapability || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A1 || [3.0.0+] MonitorSerialNumber || MonitorCapability || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || [3.0.0+] MonitorManufactureYear || MonitorCapability || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A3 || [3.0.0+] PhysicalAddress || MonitorCapability || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || [3.0.0+] Is4k60Hz || MonitorCapability || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A5 || [3.0.0+] Is4k30Hz || MonitorCapability || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A6 || [3.0.0+] Is1080P60Hz || MonitorCapability || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A7 || [3.0.0+] Is720P60Hz || MonitorCapability || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [3.0.0+] PcmChannelMax || MonitorCapability || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A9 || [3.0.0+] CrashReportHash || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AA || [3.0.0+] ErrorReportSharePermission || ErrorReportSharePermissionInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AB || [3.0.0+] VideoCodecTypeEnum || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AC || [3.0.0+] VideoBitRate || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AD || [3.0.0+] VideoFrameRate || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AE || [3.0.0+] VideoWidth || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AF || [3.0.0+] VideoHeight || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B0 || [3.0.0+] AudioCodecTypeEnum || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B1 || [3.0.0+] AudioSampleRate || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B2 || [3.0.0+] AudioChannelCount || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B3 || [3.0.0+] AudioBitRate || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || [3.0.0+] MultimediaContainerType || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B5 || [3.0.0+] MultimediaProfileType || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B6 || [3.0.0+] MultimediaLevelType || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B7 || [3.0.0+] MultimediaCacheSizeEnum || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B8 || [3.0.0+] MultimediaErrorStatusEnum || MultimediaInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B9 || [3.0.0+] MultimediaErrorLog || MultimediaInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BA || [3.0.0+] ServerFqdn || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BB || [3.0.0+] ServerIpAddress || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BC || [3.0.0+] TestStringEncrypt || Test || String || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BD || [3.0.0+] TestU8ArrayEncrypt || Test || U8Array || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BE || [3.0.0+] TestU32ArrayEncrypt || Test || U32Array || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BF || [3.0.0+] TestU64ArrayEncrypt || Test || U64Array || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C0 || [3.0.0+] TestI32ArrayEncrypt || Test || I32Array || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C1 || [3.0.0+] TestI64ArrayEncrypt || Test || I64Array || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C2 || [3.0.0+] CipherKey || ErrorInfoAuto || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C3 || [3.0.0+] FileSystemPath || ErrorInfo || String || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C4 || [3.0.0+] WebMediaPlayerOpenUrl || ErrorInfo || String || Encrypt&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C5 || [3.0.0+] WebMediaPlayerLastSocketErrors || ErrorInfo || I32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C6 || [3.0.0+] UnknownControllerCount || ConnectedControllerInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C7 || [3.0.0+] AttachedControllerCount || ConnectedControllerInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C8 || [3.0.0+] BluetoothControllerCount || ConnectedControllerInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C9 || [3.0.0+] UsbControllerCount || ConnectedControllerInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CA || [3.0.0+] ControllerTypeList || ConnectedControllerInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CB || [3.0.0+] ControllerInterfaceList || ConnectedControllerInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CC || [3.0.0+] ControllerStyleList || ConnectedControllerInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CD || [3.0.0+] FsPooledBufferPeakFreeSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CE || [3.0.0+] FsPooledBufferRetriedCount || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CF || [3.0.0+] FsPooledBufferReduceAllocationCount || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D0 || [3.0.0+] FsBufferManagerPeakFreeSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D1 || [3.0.0+] FsBufferManagerRetriedCount || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D2 || [3.0.0+] FsExpHeapPeakFreeSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D3 || [3.0.0+] FsBufferPoolPeakFreeSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || [3.0.0+] FsPatrolReadAllocateBufferSuccessCount || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D5 || [3.0.0+] FsPatrolReadAllocateBufferFailureCount || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D6 || [5.0.0+] SteadyClockInternalOffset || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D7 || [5.0.0+] SteadyClockCurrentTimePointValue || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D8 || [5.0.0+] UserClockContextOffset || UserClockContextInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D9 || [5.0.0+] UserClockContextTimeStampValue || UserClockContextInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DA || [5.0.0+] NetworkClockContextOffset || NetworkClockContextInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DB || [5.0.0+] NetworkClockContextTimeStampValue || NetworkClockContextInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || [5.0.0+] SystemAbortFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DD || [5.0.0+] ApplicationAbortFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DE || [5.0.0+] NifmErrorCode || ConnectionStatusInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DF || [5.0.0+] LcsApplicationId || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E0 || [5.0.0+] LcsContentMetaKeyIdList || ErrorInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E1 || [5.0.0+] LcsContentMetaKeyVersionList || ErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E2 || [5.0.0+] LcsContentMetaKeyTypeList || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E3 || [5.0.0+] LcsContentMetaKeyInstallTypeList || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E4 || [5.0.0+] LcsSenderFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E5 || [5.0.0+] LcsApplicationRequestFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E6 || [5.0.0+] LcsHasExFatDriverFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E7 || [5.0.0+] LcsIpAddress || ErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E8 || [5.0.0+] AcpStartupUserAccount || [12.0.0+] AcpUserAccountSettingsInfo ([5.0.0-11.0.1] AcpGeneralSettingsInfo) || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E9 || [5.0.0+] AcpAocRegistrationType || AcpAocSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EA || [5.0.0+] AcpAttributeFlag || AcpGeneralSettingsInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EB || [5.0.0+] AcpSupportedLanguageFlag || AcpGeneralSettingsInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC || [5.0.0+] AcpParentalControlFlag || AcpGeneralSettingsInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1ED || [5.0.0+] AcpScreenShot || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE || [5.0.0+] AcpVideoCapture || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EF || [5.0.0+] AcpDataLossConfirmation || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F0 || [5.0.0+] AcpPlayLogPolicy || AcpPlayLogSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F1 || [5.0.0+] AcpPresenceGroupId || AcpGeneralSettingsInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F2 || [5.0.0+] AcpRatingAge || AcpRatingSettingsInfo || I8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F3 || [5.0.0+] AcpAocBaseId || AcpAocSettingsInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4 || [5.0.0+] AcpSaveDataOwnerId || AcpStorageSettingsInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F5 || [5.0.0+] AcpUserAccountSaveDataSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F6 || [5.0.0+] AcpUserAccountSaveDataJournalSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F7 || [5.0.0+] AcpDeviceSaveDataSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F8 || [5.0.0+] AcpDeviceSaveDataJournalSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F9 || [5.0.0+] AcpBcatDeliveryCacheStorageSize || AcpBcatSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FA || [5.0.0+] AcpApplicationErrorCodeCategory || AcpGeneralSettingsInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FB || [5.0.0+] AcpLocalCommunicationId || AcpGeneralSettingsInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FC || [5.0.0+] AcpLogoType || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FD || [5.0.0+] AcpLogoHandling || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FE || [5.0.0+] AcpRuntimeAocInstall || AcpAocSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF || [5.0.0+] AcpCrashReport || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [5.0.0+] AcpHdcp || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x201 || [5.0.0+] AcpSeedForPseudoDeviceId || AcpGeneralSettingsInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x202 || [5.0.0+] AcpBcatPassphrase || AcpBcatSettingsInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x203 || [5.0.0+] AcpUserAccountSaveDataSizeMax || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x204 || [5.0.0+] AcpUserAccountSaveDataJournalSizeMax || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x205 || [5.0.0+] AcpDeviceSaveDataSizeMax || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x206 || [5.0.0+] AcpDeviceSaveDataJournalSizeMax || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x207 || [5.0.0+] AcpTemporaryStorageSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || [5.0.0+] AcpCacheStorageSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x209 || [5.0.0+] AcpCacheStorageJournalSize || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20A || [5.0.0+] AcpCacheStorageDataAndJournalSizeMax || AcpStorageSettingsInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20B || [5.0.0+] AcpCacheStorageIndexMax || AcpStorageSettingsInfo || NumericI16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || [5.0.0+] AcpPlayLogQueryableApplicationId || AcpPlayLogSettingsInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20D || [5.0.0+] AcpPlayLogQueryCapability || AcpPlayLogSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20E || [5.0.0+] AcpRepairFlag || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x20F || [5.0.0+] RunningApplicationPatchStorageLocation || RunningApplicationInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || [5.0.0+] RunningApplicationVersionNumber || RunningApplicationInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x211 || [5.0.0+] FsRecoveredByInvalidateCacheCount || FsProxyErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x212 || [5.0.0+] FsSaveDataIndexCount || FsProxyErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x213 || [5.0.0+] FsBufferManagerPeakTotalAllocatableSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x214 || [5.0.0+] MonitorCurrentWidth || MonitorSettings || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x215 || [5.0.0+] MonitorCurrentHeight || MonitorSettings || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x216 || [5.0.0+] MonitorCurrentRefreshRate || MonitorSettings || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x217 || [5.0.0+] RebootlessSystemUpdateVersion || RebootlessSystemUpdateVersionInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x218 || [5.0.0+] EncryptedExceptionInfo1 || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x219 || [5.0.0+] EncryptedExceptionInfo2 || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21A || [5.0.0+] EncryptedExceptionInfo3 || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21B || [5.0.0+] EncryptedDyingMessage || ErrorInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21C || [5.0.0+] DramId || PowerClockInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21D || [6.0.0+] NifmConnectionTestRedirectUrl || NifmConnectionTestInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21E || [6.0.0+] AcpRequiredNetworkServiceLicenseOnLaunchFlag || [12.0.0+] AcpUserAccountSettingsInfo ([6.0.0-11.0.1] AcpGeneralSettingsInfo) || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x21F || [6.0.0+] PciePort0Flags || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [6.0.0+] PciePort0Speed || PcieLoggedStateInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x221 || [6.0.0+] PciePort0ResetTimeInUs || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x222 || [6.0.0+] PciePort0IrqCount || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x223 || [6.0.0+] PciePort0Statistics || PcieLoggedStateInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x224 || [6.0.0+] PciePort1Flags || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x225 || [6.0.0+] PciePort1Speed || PcieLoggedStateInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x226 || [6.0.0+] PciePort1ResetTimeInUs || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x227 || [6.0.0+] PciePort1IrqCount || PcieLoggedStateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [6.0.0+] PciePort1Statistics || PcieLoggedStateInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x229 || [6.0.0+] PcieFunction0VendorId || PcieLoggedStateInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22A || [6.0.0+] PcieFunction0DeviceId || PcieLoggedStateInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22B || [6.0.0+] PcieFunction0PmState || PcieLoggedStateInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C || [6.0.0+] PcieFunction0IsAcquired || PcieLoggedStateInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22D || [6.0.0+] PcieFunction1VendorId || PcieLoggedStateInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22E || [6.0.0+] PcieFunction1DeviceId || PcieLoggedStateInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x22F || [6.0.0+] PcieFunction1PmState || PcieLoggedStateInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x230 || [6.0.0+] PcieFunction1IsAcquired || PcieLoggedStateInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x231 || [6.0.0+] PcieGlobalRootComplexStatistics || PcieLoggedStateInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x232 || [6.0.0+] PciePllResistorCalibrationValue || PcieLoggedStateInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x233 || [6.0.0+] CertificateRequestedHostName || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x234 || [6.0.0+] CertificateCommonName || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x235 || [6.0.0+] CertificateSANCount || NetworkSecurityCertificateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x236 || [6.0.0+] CertificateSANs || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x237 || [6.0.0+] FsBufferPoolMaxAllocateSize || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x238 || [6.0.0+] CertificateIssuerName || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x239 || [6.0.0+] ApplicationAliveTime || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A || [6.0.0+] ApplicationInFocusTime || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B || [6.0.0+] ApplicationOutOfFocusTime || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C || [6.0.0+] ApplicationBackgroundFocusTime || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D || [6.0.0+] AcpUserAccountSwitchLock || [12.0.0+] AcpUserAccountSettingsInfo ([6.0.0-11.0.1] AcpGeneralSettingsInfo) || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E || [6.0.0+] USB3HostAvailableFlag || USB3AvailableInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F || [6.0.0+] USB3DeviceAvailableFlag || USB3AvailableInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x240 || [7.0.0+] AcpNeighborDetectionClientConfigurationSendDataId || AcpNeighborDetectionInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x241 || [7.0.0+] AcpNeighborDetectionClientConfigurationReceivableDataIds || AcpNeighborDetectionInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x242 || [7.0.0+] AcpStartupUserAccountOptionFlag || [12.0.0+] AcpUserAccountSettingsInfo ([7.0.0-11.0.1] AcpGeneralSettingsInfo) || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x243 || [7.0.0+] ServerErrorCode || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x244 || [7.0.0+] AppletManagerMetaLogTrace || ErrorInfo || U64Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x245 || [7.0.0+] ServerCertificateSerialNumber || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x246 || [7.0.0+] ServerCertificatePublicKeyAlgorithm || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x247 || [7.0.0+] ServerCertificateSignatureAlgorithm || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || [7.0.0+] ServerCertificateNotBefore || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x249 || [7.0.0+] ServerCertificateNotAfter || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24A || [7.0.0+] CertificateAlgorithmInfoBits || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24B || [7.0.0+] TlsConnectionPeerIpAddress || NetworkSecurityCertificateInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24C || [7.0.0+] TlsConnectionLastHandshakeState || NetworkSecurityCertificateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24D || [7.0.0+] TlsConnectionInfoBits || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24E || [7.0.0+] SslStateBits || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x24F || [7.0.0+] SslProcessInfoBits || NetworkSecurityCertificateInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || [7.0.0+] SslProcessHeapSize || NetworkSecurityCertificateInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x251 || [7.0.0+] SslBaseErrorCode || NetworkSecurityCertificateInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x252 || [7.0.0+] GpuCrashDumpSize || GpuCrashInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x253 || [7.0.0+] GpuCrashDump || GpuCrashInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x254 || [7.0.0+] RunningApplicationProgramIndex || RunningApplicationInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x255 || [8.0.0+] UsbTopology || UsbStateInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x256 || [8.0.0+] AkamaiReferenceId || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x257 || [9.0.0+] NvHostErrID || NvHostErrInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || [9.0.0+] NvHostErrDataArrayU32 || NvHostErrInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x259 || [9.0.0+] HasSyslogFlag || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25A || [9.0.0+] AcpRuntimeParameterDelivery || AcpGeneralSettingsInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25B || [9.0.0+] PlatformRegion || RegionSettingInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25C || [9.0.0+] RunningUlaApplicationId || RunningUlaInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25D || [9.0.0+] RunningUlaAppletId || RunningUlaInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25E || [9.0.0+] RunningUlaVersion || RunningUlaInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x25F || [9.0.0+] RunningUlaApplicationStorageLocation || RunningUlaInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || [9.0.0+] RunningUlaPatchStorageLocation || RunningUlaInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x261 || [9.1.0+] NANDTotalSizeOfSystem || NANDFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x262 || [9.1.0+] NANDFreeSpaceOfSystem || NANDFreeSpaceInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x263 || [11.0.0+] AccessPointSSIDAsHex || AccessPointInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x264 || [11.0.0+] PanelVendorId || InternalPanelInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x265 || [11.0.0+] PanelRevisionId || InternalPanelInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x266 || [11.0.0+] PanelModelId || InternalPanelInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x267 || [11.0.0+] ErrorContext || ErrorInfoAuto || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || [11.0.0+] ErrorContextSize || ErrorInfoAuto || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x269 || [11.0.0+] ErrorContextTotalSize || ErrorInfoAuto || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26A || [11.0.0+] SystemPhysicalMemoryLimit || ResourceLimitLimitInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26B || [11.0.0+] SystemThreadCountLimit || ResourceLimitLimitInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26C || [11.0.0+] SystemEventCountLimit || ResourceLimitLimitInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26D || [11.0.0+] SystemTransferMemoryCountLimit || ResourceLimitLimitInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26E || [11.0.0+] SystemSessionCountLimit || ResourceLimitLimitInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x26F || [11.0.0+] SystemPhysicalMemoryPeak || ResourceLimitPeakInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || [11.0.0+] SystemThreadCountPeak || ResourceLimitPeakInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x271 || [11.0.0+] SystemEventCountPeak || ResourceLimitPeakInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x272 || [11.0.0+] SystemTransferMemoryCountPeak || ResourceLimitPeakInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x273 || [11.0.0+] SystemSessionCountPeak || ResourceLimitPeakInfo || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x274 || [11.0.0+] GpuCrashHash || GpuCrashInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x275 || [11.0.0+] TouchScreenPanelGpioValue || TouchScreenInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x276 || [12.0.0+] BrowserCertificateHostName || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x277 || [12.0.0+] BrowserCertificateCommonName || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || [12.0.0+] BrowserCertificateOrganizationalUnitName || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x279 || [12.0.0+] FsPooledBufferFailedIdealAllocationCountOnAsyncAccess || FsMemoryInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27A || [12.0.0+] AudioOutputTarget || AudioDeviceInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27B || [12.0.0+] AudioOutputChannelCount || AudioDeviceInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27C || [12.0.0+] AppletTotalActiveTime || ErrorInfoAuto || NumericI64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27D || [12.0.0+] WakeCount || AbnormalWakeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E || [12.0.0+] PredominantWakeReason || AbnormalWakeInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x27F || [13.0.0+] EdidExtensionBlock2 || EdidInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || [13.0.0+] EdidExtensionBlock3 || EdidInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x281 || [13.0.0+] LumenRequestId || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x282 || [13.0.0+] LlnwLlid || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x283 || [14.0.0+] SupportingLimitedApplicationLicenses ([13.0.0-13.2.1] SupportingLimitedLicenses) || RunningApplicationInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x284 || [14.0.0+] RuntimeLimitedApplicationLicenseUpgrade ([13.0.0-13.2.1] RuntimeLimitedLicenseUpgrade) || RunningApplicationInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x285 || [13.0.0+] ServiceProfileRevisionKey || ServiceProfileInfo || NumericU64 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x286 || [13.0.0+] BluetoothAudioConnectionCount || BluetoothAudioInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x287 || [13.0.0+] BluetoothHidPairingInfoCount || BluetoothPairingCountInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [13.0.0+] BluetoothAudioPairingInfoCount || BluetoothPairingCountInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x289 || [13.0.0+] BluetoothLePairingInfoCount || BluetoothPairingCountInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28A || [14.0.0+] FatFsBisSystemFilePeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28B || [14.0.0+] FatFsBisSystemDirectoryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28C || [14.0.0+] FatFsBisUserFilePeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28D || [14.0.0+] FatFsBisUserDirectoryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28E || [14.0.0+] FatFsSdCardFilePeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x28F || [14.0.0+] FatFsSdCardDirectoryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || [15.0.0+] SslAlertInfo || NetworkSecurityCertificateInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x291 || [15.0.0+] SslVersionInfo || NetworkSecurityCertificateInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || [15.0.0+] FatFsBisSystemUniqueFileEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x293 || [15.0.0+] FatFsBisSystemUniqueDirectoryEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || [15.0.0+] FatFsBisUserUniqueFileEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x295 || [15.0.0+] FatFsBisUserUniqueDirectoryEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || [15.0.0+] FatFsSdCardUniqueFileEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x297 || [15.0.0+] FatFsSdCardUniqueDirectoryEntryPeakOpenCount || FsProxyErrorInfo || NumericU16 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [16.0.0+] ServerErrorIsRetryable || ErrorInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x299 || [16.0.0+] FsDeepRetryStartCount || FsProxyErrorInfo2 || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29A || [16.0.0+] FsUnrecoverableByGameCardAccessFailedCount || FsProxyErrorInfo2 || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29B || [16.0.0+] BuiltInWirelessOUI || BuiltInWirelessOUIInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29C || [16.0.0+] WirelessAPOUI || WirelessAPOUIInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29D || [16.0.0+] EthernetAdapterOUI || EthernetAdapterOUIInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29E || [17.0.0+] FatFsBisSystemFatSafeControlResult || FsProxyErrorInfo2 || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x29F || [17.0.0+] FatFsBisSystemFatErrorNumber || FsProxyErrorInfo2 || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A0 || [17.0.0+] FatFsBisSystemFatSafeErrorNumber || FsProxyErrorInfo2 || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A1 || [17.0.0+] FatFsBisUserFatSafeControlResult || FsProxyErrorInfo2 || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A2 || [17.0.0+] FatFsBisUserFatErrorNumber || FsProxyErrorInfo2 || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A3 || [17.0.0+] FatFsBisUserFatSafeErrorNumber || FsProxyErrorInfo2 || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A4 || [17.0.0+] GpuCrashDump2 || GpuCrashInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A5 || [17.0.0+] NANDType || NANDTypeInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A6 || [17.0.0+] MicroSDType || MicroSDTypeInfo || U8Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A7 || [17.0.0+] GameCardLastDeactivateReasonResult || GameCardErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A8 || [17.0.0+] GameCardLastDeactivateReason || GameCardErrorInfo || NumericU8 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A9 || [18.0.0+] InvalidErrorCode || ErrorInfo || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E8|| [18.0.0+] TestStringNx || TestNx || String || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E9 || [18.0.0+] BoostModeCurrentLimit || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EA || [18.0.0+] ChargeConfiguration || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EB || [18.0.0+] HizMode || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EC || [18.0.0+] PowerSupplyPath || BatteryChargeInfo || NumericI32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3ED || [18.0.0+] ControllerPowerSupplyAcquired || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EE || [18.0.0+] OtgRequested || BatteryChargeInfo || Bool || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EF || [18.0.0+] AdspExceptionRegisters || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F0 || [18.0.0+] AdspExceptionSpsr || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F1 || [18.0.0+] AdspExceptionArmModeRegisters || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F2 || [18.0.0+] AdspExceptionStackAddress || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F3 || [18.0.0+] AdspExceptionStackDump || AdspErrorInfo || U32Array || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F4 || [18.0.0+] AdspExceptionReason || AdspErrorInfo || NumericU32 || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=18.0.0&amp;diff=12728</id>
		<title>18.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=18.0.0&amp;diff=12728"/>
		<updated>2024-03-28T04:11:20Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Kernel */ This was in my notes and somehow didn&amp;#039;t end up on the wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 18.0.0 system update was released on March 26, 2024 (UTC). This Switch update was released for the following regions: CHN, and ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   Added “15 Minutes” as an option for “Auto-sleep when playing on TV” in Sleep Mode Settings. &lt;br /&gt;
*   Added Korean as a supported language for “Nintendo Switch Parental Controls” introductory video.&lt;br /&gt;
*   	&lt;br /&gt;
*       When the console language is set to Korean, the video can be accessed from Settings &amp;gt; Parental Controls. &lt;br /&gt;
*     	&lt;br /&gt;
*   &lt;br /&gt;
*   	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, Help, NgWord, SsidList, LocalNews, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, error, netConnect, playerSelect, overlayDisp, &amp;quot;starter&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* ptm: Service access: removed ovln:snd.&lt;br /&gt;
* bsdsocket: Service server access: added bsd:a, dns:priv.&lt;br /&gt;
* ldn: Service access: added lm.&lt;br /&gt;
* ns: Service access: added ldn:s.&lt;br /&gt;
* psc: Service access: added ovln:snd, psc:m.&lt;br /&gt;
* ssl: Service access: added srepo:u, arp:r.&lt;br /&gt;
* es: Service access: added ssl:s.&lt;br /&gt;
* qlaunch: Service access: removed htcs.&lt;br /&gt;
* auth: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
* cabinet: Service access: added htcs:sys, ngc:u, removed htcs.&lt;br /&gt;
* error: Service access: removed htcs.&lt;br /&gt;
* netConnect: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
* playerSelect: Service access: removed htcs.&lt;br /&gt;
* overlayDisp: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/0.txt&amp;quot; updated, &amp;quot;/common.txt&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* LocalNews: &amp;quot;/message/KRko/localNews.msbt.szs&amp;quot; updated, &amp;quot;/message/revision.txt&amp;quot; updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* NgWord2: &amp;quot;/ac_0_not_b_nx&amp;quot; updated, &amp;quot;/ac_common_b2_nx&amp;quot; updated, &amp;quot;/ac_common_not_b_nx&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
* auth applet: &amp;quot;/lyt/Auth.szs&amp;quot; updated, &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/message/KRko/auth.msbt.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/Error.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
* netConnect applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/NetConnect.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/KRko/netConnect.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::settings::ISettingsServer&lt;br /&gt;
** Added:      12 - buffer_entry_sizes: [0x1000], buffers: [0x16], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::settings::ISystemSettingsServer&lt;br /&gt;
** Added:     251 - buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     252 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710007AF24&lt;br /&gt;
* Unknown Interface cur-version: 0x710007CD3C&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   10111 - buffers: [0x6], inbytes: 0x20, outbytes: 0x4&lt;br /&gt;
** Added:   10501 - buffer_entry_sizes: [0x100, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   11001 - inbytes: 0xA4, outbytes: 0xA0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710007AF24&#039;] -&amp;gt; [&#039;0x710007CD3C&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007CD3C&#039;])&lt;br /&gt;
* Interface Changed: nn::nifm::detail::IGeneralService&lt;br /&gt;
** Added:      44 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      45 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      46 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      49 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      50 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      51 - buffer_entry_sizes: [0x410], buffers: [0x15], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::ts::server::IMeasurementServer&lt;br /&gt;
* Unknown Interface cur-version: 0x710006930C [ID = 0x26f251af]&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      19 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::socket::sf::IClient_MC&lt;br /&gt;
* Interface Added: nn::socket::sf::IClient&lt;br /&gt;
* Unknown Interface cur-version: 0x71000D00F0 [ID = 0xb117a63f]&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:      18 - buffer_entry_sizes: [0x28], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** Changed:   225 - outbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x8, outbytes: 0x20)&lt;br /&gt;
** Added:     601 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Added:     602 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     603 - inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     604 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     605 - inbytes: 0x7, outbytes: 0x0&lt;br /&gt;
** Added:     606 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     607 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Added:     608 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     609 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     610 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     611 - buffer_entry_sizes: [0x1C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     612 - buffer_entry_sizes: [0x1A0], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     613 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     614 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     615 - buffer_entry_sizes: [0x1C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     616 - buffer_entry_sizes: [0x1A0], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:      92 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:     813 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Removed:  1200 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Removed:  1201 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:  1202 - inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1203 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1204 - inbytes: 0x7, outbytes: 0x0&lt;br /&gt;
** Removed:  1205 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Removed:  1206 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Removed:  1207 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:  1208 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1209 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1211 - buffer_entry_sizes: [0x1A0], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1212 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1213 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1214 - buffer_entry_sizes: [0x1C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1215 - buffer_entry_sizes: [0x1A0], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:    1308 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    1309 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed: 12010 - buffer_entry_sizes: [0x1C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioDevice&lt;br /&gt;
** Added:      19 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioSystemManagerForApplet&lt;br /&gt;
** Added:      10 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Removed:     6 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
* Unknown Interface cur-version: 0x710002D294 [ID = 0xf8ed3aad]&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Added:     106 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     500 - inbytes: 0x80, outbytes: 0x0&lt;br /&gt;
** Added:     501 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - buffers: [0x21], inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
** Added:     503 - buffers: [0x22], inbytes: 0x4, outbytes: 0x18&lt;br /&gt;
** Added:     505 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     600 - inbytes: 0x2, outbytes: 0x0&lt;br /&gt;
** Added:     601 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemServiceCreator&lt;br /&gt;
** Added:       1 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710002D294 [ID = 0xf8ed3aad]&#039;]&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Added:     106 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     500 - inbytes: 0x80, outbytes: 0x0&lt;br /&gt;
** Added:     501 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - buffers: [0x21], inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
** Added:     503 - buffers: [0x22], inbytes: 0x4, outbytes: 0x18&lt;br /&gt;
** Added:     505 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     600 - inbytes: 0x2, outbytes: 0x0&lt;br /&gt;
** Added:     601 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserServiceCreator&lt;br /&gt;
** Added:       1 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710002D294 [ID = 0xf8ed3aad]&#039;]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100005828&lt;br /&gt;
* Unknown Interface cur-version: 0x7100005438&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000791B8 [ID = 0xf350e826]&lt;br /&gt;
* Unknown Interface cur-version: 0x710007E200 [ID = 0xf350e826]&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71000791B8 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x710007E200 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710007E200 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IFloatingRegistrationRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IGuestLoginRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71000791B8 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x710007E200 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710007E200 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     230 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71001BCD60 [ID = 0xf350e826]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001B0378 [ID = 0xf350e826]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71001BCD60 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x71001B0378 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001B0378 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IFloatingRegistrationRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IGuestLoginRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71001BCD60 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x71001B0378 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001B0378 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     230 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:    94 - inbytes: 0x48 -&amp;gt; 0x58 (final state: inbytes: 0x58, outbytes: 0x8)&lt;br /&gt;
** Changed:    95 - outbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x8, outbytes: 0x50)&lt;br /&gt;
** Changed:    96 - outbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x8, outbytes: 0x50)&lt;br /&gt;
** Changed:    97 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x1)&lt;br /&gt;
** Changed:   406 - inbytes: 0x48 -&amp;gt; 0x58 (final state: buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0)&lt;br /&gt;
** Changed:  2513 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x8)&lt;br /&gt;
** Changed:  2517 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x8)&lt;br /&gt;
** Added:    3015 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    3104 - buffers: [0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    3105 - buffers: [0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    5000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    5001 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDevelopInterface&lt;br /&gt;
** Removed:     8 - buffers: [0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Removed:     9 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Removed:    15 - buffers: [0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Changed:    17 - outbytes: 0x40 -&amp;gt; 0x50 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x50)&lt;br /&gt;
** Changed:    18 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x0, outhandles: [1])&lt;br /&gt;
** Changed:    19 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x0)&lt;br /&gt;
** Added:      21 - inbytes: 0x10, outbytes: 0x50&lt;br /&gt;
** Added:      22 - inbytes: 0x50, outbytes: 0x8&lt;br /&gt;
** Added:      23 - inbytes: 0x50, outbytes: 0x8&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::ns::detail::IVulnerabilityManagerInterface&lt;br /&gt;
** Added:    3100 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    3101 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    3102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000182AC [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x71000182AC [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:     141 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     151 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x40&lt;br /&gt;
** Added:     160 - buffers: [0x6], inbytes: 0x20, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorSession&lt;br /&gt;
** Added:    5000 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumApplicationService&lt;br /&gt;
** Added:     148 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2435 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    5000 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9398 [ID = 0xb8f77e09]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9D70 [ID = 0x43c5fa77]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9A78 [ID = 0xb0c7a8a3]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B90A8 [ID = 0x8db727a9]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:      82 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     160 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000B90A8 [ID = 0x8db727a9]&#039;]&lt;br /&gt;
** Added:     161 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000B9A78 [ID = 0xb0c7a8a3]&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Added:      53 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     411 - buffers: [0x22], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     412 - buffers: [0x21], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      40 - buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:      41 - buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Added:     103 - buffers: [0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     147 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     148 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Added:    1100 - buffers: [0x45], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Changed:  1106 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0] -&amp;gt; [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46] -&amp;gt; [0x15, 0x15, 0x15, 0x6, 0x46, 0x46] (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x68, outbytes: 0x18)&lt;br /&gt;
** Changed:  1107 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0] -&amp;gt; [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45] -&amp;gt; [0x15, 0x15, 0x15, 0x6, 0x45] (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x68, outbytes: 0x18)&lt;br /&gt;
** Added:    1108 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x70, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    1475 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    1954 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1955 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1956 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1957 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:   145601 - inbytes: 0x0, outbytes: 0x36&lt;br /&gt;
** Added:   195101 - inbytes: 0x36, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000913E4 [ID = 0x10763728]&lt;br /&gt;
* Interface Changed: nn::npns::INotificationReceiver&lt;br /&gt;
** Added:       5 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:       8 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:    13 - buffers: [0x9], inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      14 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      15 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      16 - buffer_entry_sizes: [0x28], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:      28 - buffers: [0x9], inbytes: 0x10, outbytes: 0x28&lt;br /&gt;
** Added:      29 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:      37 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:      51 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     106 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     107 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     156 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0, outinterfaces: [None]&lt;br /&gt;
** Added:     301 - buffers: [0xA], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     302 - buffer_entry_sizes: [0x10, 0x0], buffers: [0xA, 0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     303 - buffer_entry_sizes: [0x138, 0x138], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x50&lt;br /&gt;
** Added:     305 - buffer_entry_sizes: [0x48], buffers: [0x6], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Added:     306 - buffers: [0x6, 0x9], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::npns::INpnsUser&lt;br /&gt;
** Added:       8 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IActiveRightsContext&lt;br /&gt;
** Changed:   901 - buffer_entry_sizes: [0x24] -&amp;gt; [0x2C] (final state: buffer_entry_sizes: [0x2C], buffers: [0x16], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Added:     101 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     103 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     104 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     201 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     202 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     203 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     204 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    1028 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
** Added:      46 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGrcService&lt;br /&gt;
** Changed:     1 - inbytes: 0x20 -&amp;gt; 0x28 (final state: inbytes: 0x28, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** Added:      10 - inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;]&lt;br /&gt;
* Interface Removed: nn::jitsrv::IJitEnvironment&lt;br /&gt;
* Interface Removed: nn::jitsrv::IJitService&lt;br /&gt;
* Interface Added: nn::sf::hipc::detail::IHipcManager&lt;br /&gt;
* Unknown Interface cur-version: 0x7100000680 [ID = 0x3d92e8a4]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000009C4 [ID = 0x2a4c2069]&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IDecoderControlService&lt;br /&gt;
** Added:    4002 - buffers: [0x46, 0x5], inbytes: 0x30, outbytes: 0x8&lt;br /&gt;
* Unknown Interface cur-version: 0x710011CA80 [ID = 0x7e450fad]&lt;br /&gt;
* Interface Changed: nn::spsm::detail::IPowerStateInterface&lt;br /&gt;
** Added:      15 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      16 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021640 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021640 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021290 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021290 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710001829C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x710001829C [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021640 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021640 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021290 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021290 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710001829C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x710001829C [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_11 (previously master_key_10). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler/libc was upgraded, this results in various minor optimizations throughout the whole kernel.&lt;br /&gt;
** Many, many minor changes that this is almost certainly the cause for, e.g. KThread::SuspendRequest now calculates requested value as (0x10 &amp;lt;&amp;lt; suspend_type) instead of (1 &amp;lt;&amp;lt; (suspend_type + 4)).&lt;br /&gt;
** Biggest one is that sp/lr are now much more commonly not saved to stack until actually needed, if a function has a return path which does not make calls/does not need lr/sp saved.&lt;br /&gt;
* Initialize0 changes:&lt;br /&gt;
** The physical base address of the kernel is now passed by KernelLdr for use during KernelSlab virtual memory region setup.&lt;br /&gt;
*** This replaces the previous call to KInitialPageTable::GetPhysicalAddress.&lt;br /&gt;
* SVC-handler accesses to the thread local region&#039;s disable count now use userspace access instructions.&lt;br /&gt;
* SvcSetHeapSize now only sets the output address on success.&lt;br /&gt;
** This wasn&#039;t a vulnerability before, because prior to this the ABI meant userland would receive whatever was in the userland register at call time.&lt;br /&gt;
* CreateProcessParameter now zeroes many fields before performing initialization.&lt;br /&gt;
* When making a deep copy of the KPageGroup for loading InitialProcess segments, a new helper with full error checking/etc is now used instead of doing the copy inline&lt;br /&gt;
* New CreateProcessFlag 0x2000 is &amp;quot;EnableReservedRegionExtraSize&amp;quot;, when set the reserved region size is increased by (AddressSpaceSize / 8).&lt;br /&gt;
** Currently, CreateProcess will return svc::ResultInvalidState() unless all the following conditions are met:&lt;br /&gt;
*** Address space type must be 39-bit&lt;br /&gt;
*** System resource size must be &amp;gt; 0&lt;br /&gt;
*** KTargetSystem::IsDebugMode() must be true.&lt;br /&gt;
** New InfoType (0x1C) &amp;quot;InfoType_ReservedRegionExtraSize&amp;quot; retrieves the extra size, which is a member of KPageTableBase.&lt;br /&gt;
** Loader does not currently support passing this flag in any capacity yet.&lt;br /&gt;
** nn::os::VammManager currently calculates the reserved region as [start, end - extra size], and will not map to the extra part of the region.&lt;br /&gt;
* Various KPageTable(Base/Impl) changes:&lt;br /&gt;
** InitializeForProcess now takes in the create process flags directly instead of parsing as a bunch of bools.&lt;br /&gt;
** InitializeForProcess now performs much more complicated initialization/randomization of the four aslr&#039;d regions, dividing them up before/after the process code using largest-region first selection for randomization order.&lt;br /&gt;
** KPageTableImpl&#039;s traversal functions now take an additional output byte (which is also a new member at +0x11 in the traversal block and in KMemoryRange), this is always set to zero.&lt;br /&gt;
*** This byte is checked when traversing by ::Finalize and ::GetContiguousRangeWithMemoryState, but not other page table functions.&lt;br /&gt;
*** This byte is also stored as a new member of the memory range struct returned by GetContiguousRangeWithMemoryState&lt;br /&gt;
** AllocateAndMapPagesImpl now takes in the page properties by reference instead of by value.&lt;br /&gt;
** Read/WriteReadDebugIoMemory now use simpler logic for determining the current readable size.&lt;br /&gt;
* The KMemoryBlock helper &amp;quot;ConvertToKMemoryPermission&amp;quot; was changed to only copy the user-write bit to KernelWrite.&lt;br /&gt;
** This fixes a longstanding bug where the input was AND&#039;d with KMemoryPermission_UserReadWrite, and these bits were then ORR&#039;d into the final permission &amp;lt;&amp;lt;=&#039;d with KernelShift.&lt;br /&gt;
** The intent here was to copy the user read/write permissions into the kernel read/write permissions, but KMemoryPermission_UserReadWrite is not bitmask 0x3, it&#039;s bitmask 0x1B (including the KernelRead/Write bits).&lt;br /&gt;
** Thus, previously this would allow an input with KernelRead bit to spuriously set the NotMapped bit, and an input with KernelWrite bit to spuriously set the unused top bit.&lt;br /&gt;
** This was unexploitable, except maybe for causing a kernel-mode access exception.&lt;br /&gt;
* HandleException now handles EsrEc_DataAbortEl0 specially when determining the debug exception type.&lt;br /&gt;
** When ESR_EL1.IFSC is 0b100001 (&amp;quot;Alignment Fault&amp;quot;), ExceptionType_UnalignedData is selected instead of ExceptionType_DataAbort.&lt;br /&gt;
* KMemoryManager(Impl)/KPageHeap changes: &lt;br /&gt;
** KPageHeap&#039;s heap_virtual_address member is now removed and is a part of KMemoryManagerImpl now (this is still unused in non-debug kernel).&lt;br /&gt;
** KMemoryManager::AllocatePageGroup now takes a parameter for the required minimum alignment for the page group.&lt;br /&gt;
*** This is currently passed as 1 page (minimum alignment) at all callsites.&lt;br /&gt;
* SecureMonitor access was refactored, actual smc invocation is now in its own helper separate from interrupt disable/enable (and helpers which invoke without interrupt disable now exist).&lt;br /&gt;
&lt;br /&gt;
=== [[Audio_services|audio]] ===&lt;br /&gt;
Besides IPC changes, vulns were [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== [[JIT_services|jit]] ===&lt;br /&gt;
Symbols were stripped from the main-codebin.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2024-03-26_00-06-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=18.0.0&amp;diff=12726</id>
		<title>18.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=18.0.0&amp;diff=12726"/>
		<updated>2024-03-27T22:38:05Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* BootImagePackages */ Kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 18.0.0 system update was released on March 26, 2024 (UTC). This Switch update was released for the following regions: CHN, and ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   Added “15 Minutes” as an option for “Auto-sleep when playing on TV” in Sleep Mode Settings. &lt;br /&gt;
*   Added Korean as a supported language for “Nintendo Switch Parental Controls” introductory video.&lt;br /&gt;
*   	&lt;br /&gt;
*       When the console language is set to Korean, the video can be accessed from Settings &amp;gt; Parental Controls. &lt;br /&gt;
*     	&lt;br /&gt;
*   &lt;br /&gt;
*   	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, Help, NgWord, SsidList, LocalNews, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, auth, cabinet, error, netConnect, playerSelect, overlayDisp, &amp;quot;starter&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* ptm: Service access: removed ovln:snd.&lt;br /&gt;
* bsdsocket: Service server access: added bsd:a, dns:priv.&lt;br /&gt;
* ldn: Service access: added lm.&lt;br /&gt;
* ns: Service access: added ldn:s.&lt;br /&gt;
* psc: Service access: added ovln:snd, psc:m.&lt;br /&gt;
* ssl: Service access: added srepo:u, arp:r.&lt;br /&gt;
* es: Service access: added ssl:s.&lt;br /&gt;
* qlaunch: Service access: removed htcs.&lt;br /&gt;
* auth: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
* cabinet: Service access: added htcs:sys, ngc:u, removed htcs.&lt;br /&gt;
* error: Service access: removed htcs.&lt;br /&gt;
* netConnect: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
* playerSelect: Service access: removed htcs.&lt;br /&gt;
* overlayDisp: Service access: added htcs:sys, removed htcs.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: &amp;quot;/0.txt&amp;quot; updated, &amp;quot;/common.txt&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* LocalNews: &amp;quot;/message/KRko/localNews.msbt.szs&amp;quot; updated, &amp;quot;/message/revision.txt&amp;quot; updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings]]: All files updated.&lt;br /&gt;
* NgWord2: &amp;quot;/ac_0_not_b_nx&amp;quot; updated, &amp;quot;/ac_common_b2_nx&amp;quot; updated, &amp;quot;/ac_common_not_b_nx&amp;quot; updated, &amp;quot;/version.dat&amp;quot; updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/qlaunch_action.bksnd&amp;quot; updated&lt;br /&gt;
* auth applet: &amp;quot;/lyt/Auth.szs&amp;quot; updated, &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/message/KRko/auth.msbt.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/auth_action.bksnd&amp;quot; updated&lt;br /&gt;
* cabinet applet:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/cabinet_action.bksnd&amp;quot; updated&lt;br /&gt;
* error applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/Error.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/error_action.bksnd&amp;quot; updated&lt;br /&gt;
* netConnect applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/NetConnect.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/KRko/netConnect.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/netConnect_action.bksnd&amp;quot; updated&lt;br /&gt;
* playerSelect applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated, &amp;quot;/sound/playerSelect_action.bksnd&amp;quot; updated&lt;br /&gt;
* overlayDisp applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/overlayDisp_action.bksnd&amp;quot; updated&lt;br /&gt;
* &amp;quot;starter&amp;quot; application:&lt;br /&gt;
** &amp;quot;/common/shader/VarietyOceanShader_Nx.arc.szs&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/sound/starter_action.bksnd&amp;quot; updated&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* Interface Changed: nn::settings::ISettingsServer&lt;br /&gt;
** Added:      12 - buffer_entry_sizes: [0x1000], buffers: [0x16], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::settings::ISystemSettingsServer&lt;br /&gt;
** Added:     251 - buffer_entry_sizes: [0x18], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     252 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710007AF24&lt;br /&gt;
* Unknown Interface cur-version: 0x710007CD3C&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IFriendService&lt;br /&gt;
** Added:   10111 - buffers: [0x6], inbytes: 0x20, outbytes: 0x4&lt;br /&gt;
** Added:   10501 - buffer_entry_sizes: [0x100, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:   11001 - inbytes: 0xA4, outbytes: 0xA0&lt;br /&gt;
* Interface Changed: nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
** Changed:     2 - outinterfaces: [&#039;0x710007AF24&#039;] -&amp;gt; [&#039;0x710007CD3C&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007CD3C&#039;])&lt;br /&gt;
* Interface Changed: nn::nifm::detail::IGeneralService&lt;br /&gt;
** Added:      44 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      45 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      46 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      49 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      50 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      51 - buffer_entry_sizes: [0x410], buffers: [0x15], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** Added:      52 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::ts::server::IMeasurementServer&lt;br /&gt;
* Unknown Interface cur-version: 0x710006930C [ID = 0x26f251af]&lt;br /&gt;
* Interface Changed: nn::psm::IPsmServer&lt;br /&gt;
** Added:      19 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Removed: nn::socket::sf::IClient_MC&lt;br /&gt;
* Interface Added: nn::socket::sf::IClient&lt;br /&gt;
* Unknown Interface cur-version: 0x71000D00F0 [ID = 0xb117a63f]&lt;br /&gt;
* Interface Changed: nn::hid::IHidDebugServer&lt;br /&gt;
** Added:      18 - buffer_entry_sizes: [0x28], buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** Changed:   225 - outbytes: 0x18 -&amp;gt; 0x20 (final state: inbytes: 0x8, outbytes: 0x20)&lt;br /&gt;
** Added:     601 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Added:     602 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     603 - inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     604 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     605 - inbytes: 0x7, outbytes: 0x0&lt;br /&gt;
** Added:     606 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     607 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Added:     608 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:     609 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     610 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     611 - buffer_entry_sizes: [0x1C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     612 - buffer_entry_sizes: [0x1A0], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     613 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     614 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     615 - buffer_entry_sizes: [0x1C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:     616 - buffer_entry_sizes: [0x1A0], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hid::IHidServer&lt;br /&gt;
** Added:      92 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
* Interface Changed: nn::hid::IHidSystemServer&lt;br /&gt;
** Added:     813 - inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Removed:  1200 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Removed:  1201 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:  1202 - inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1203 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1204 - inbytes: 0x7, outbytes: 0x0&lt;br /&gt;
** Removed:  1205 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Removed:  1206 - inbytes: 0x6, outbytes: 0x1&lt;br /&gt;
** Removed:  1207 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Removed:  1208 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1209 - buffer_entry_sizes: [0x2C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1211 - buffer_entry_sizes: [0x1A0], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1212 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:  1213 - buffer_entry_sizes: [0x2C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1214 - buffer_entry_sizes: [0x1C8], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Removed:  1215 - buffer_entry_sizes: [0x1A0], buffers: [0x16], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
** Added:    1308 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    1309 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** Removed: 12010 - buffer_entry_sizes: [0x1C8], buffers: [0x15], inbytes: 0x6, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioDevice&lt;br /&gt;
** Added:      19 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::audio::detail::IAudioSystemManagerForApplet&lt;br /&gt;
** Added:      10 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::audioctrl::detail::IAudioController&lt;br /&gt;
** Removed:     6 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
* Unknown Interface cur-version: 0x710002D294 [ID = 0xf8ed3aad]&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService&lt;br /&gt;
** Added:     106 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     500 - inbytes: 0x80, outbytes: 0x0&lt;br /&gt;
** Added:     501 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - buffers: [0x21], inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
** Added:     503 - buffers: [0x22], inbytes: 0x4, outbytes: 0x18&lt;br /&gt;
** Added:     505 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     600 - inbytes: 0x2, outbytes: 0x0&lt;br /&gt;
** Added:     601 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::ISystemServiceCreator&lt;br /&gt;
** Added:       1 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710002D294 [ID = 0xf8ed3aad]&#039;]&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserLocalCommunicationService&lt;br /&gt;
** Added:     106 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     500 - inbytes: 0x80, outbytes: 0x0&lt;br /&gt;
** Added:     501 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     502 - buffers: [0x21], inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
** Added:     503 - buffers: [0x22], inbytes: 0x4, outbytes: 0x18&lt;br /&gt;
** Added:     505 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:     600 - inbytes: 0x2, outbytes: 0x0&lt;br /&gt;
** Added:     601 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ldn::detail::IUserServiceCreator&lt;br /&gt;
** Added:       1 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710002D294 [ID = 0xf8ed3aad]&#039;]&lt;br /&gt;
* Unknown Interface prev-version: 0x7100005828&lt;br /&gt;
* Unknown Interface cur-version: 0x7100005438&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000791B8 [ID = 0xf350e826]&lt;br /&gt;
* Unknown Interface cur-version: 0x710007E200 [ID = 0xf350e826]&lt;br /&gt;
* Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71000791B8 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x710007E200 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710007E200 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IFloatingRegistrationRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IGuestLoginRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71000791B8 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x710007E200 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x710007E200 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     230 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71001BCD60 [ID = 0xf350e826]&lt;br /&gt;
* Unknown Interface cur-version: 0x71001B0378 [ID = 0xf350e826]&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForAdministrator&lt;br /&gt;
** Added:     400 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     411 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     412 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::IAccountServiceForSystemService&lt;br /&gt;
** Added:     401 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
** Added:     402 - buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IAdministrator&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71001BCD60 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x71001B0378 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001B0378 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::baas::IFloatingRegistrationRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IGuestLoginRequest&lt;br /&gt;
** Added:      16 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::baas::IManagerForSystemService&lt;br /&gt;
** Changed:   170 - outinterfaces: [&#039;0x71001BCD60 [ID = 0xf350e826]&#039;] -&amp;gt; [&#039;0x71001B0378 [ID = 0xf350e826]&#039;] (final state: inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;0x71001B0378 [ID = 0xf350e826]&#039;])&lt;br /&gt;
** Added:     180 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
** Added:     104 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     230 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfile&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
* Interface Changed: nn::account::profile::IProfileEditor&lt;br /&gt;
** Added:      20 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      21 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:      30 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:     110 - buffer_entry_sizes: [0x80, 0x0], buffers: [0x19, 0x5], inbytes: 0x38, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
** Changed:    94 - inbytes: 0x48 -&amp;gt; 0x58 (final state: inbytes: 0x58, outbytes: 0x8)&lt;br /&gt;
** Changed:    95 - outbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x8, outbytes: 0x50)&lt;br /&gt;
** Changed:    96 - outbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x8, outbytes: 0x50)&lt;br /&gt;
** Changed:    97 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x1)&lt;br /&gt;
** Changed:   406 - inbytes: 0x48 -&amp;gt; 0x58 (final state: buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0)&lt;br /&gt;
** Changed:  2513 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x8)&lt;br /&gt;
** Changed:  2517 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x8)&lt;br /&gt;
** Added:    3015 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    3104 - buffers: [0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    3105 - buffers: [0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:    5000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
** Added:    5001 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncData&#039;]&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDevelopInterface&lt;br /&gt;
** Removed:     8 - buffers: [0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Removed:     9 - inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Removed:    15 - buffers: [0x5], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Changed:    17 - outbytes: 0x40 -&amp;gt; 0x50 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x50)&lt;br /&gt;
** Changed:    18 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x0, outhandles: [1])&lt;br /&gt;
** Changed:    19 - inbytes: 0x40 -&amp;gt; 0x50 (final state: inbytes: 0x50, outbytes: 0x0)&lt;br /&gt;
** Added:      21 - inbytes: 0x10, outbytes: 0x50&lt;br /&gt;
** Added:      22 - inbytes: 0x50, outbytes: 0x8&lt;br /&gt;
** Added:      23 - inbytes: 0x50, outbytes: 0x8&lt;br /&gt;
** Added:      24 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
** Added:      26 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::ns::detail::IVulnerabilityManagerInterface&lt;br /&gt;
** Added:    3100 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:    3101 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:    3102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x71000182AC [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x71000182AC [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
** Added:     141 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     151 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x40&lt;br /&gt;
** Added:     160 - buffers: [0x6], inbytes: 0x20, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumAccessorSession&lt;br /&gt;
** Added:    5000 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumApplicationService&lt;br /&gt;
** Added:     148 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IAlbumControlSession&lt;br /&gt;
** Added:    2435 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:    5000 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9398 [ID = 0xb8f77e09]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9D70 [ID = 0x43c5fa77]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B9A78 [ID = 0xb0c7a8a3]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000B90A8 [ID = 0x8db727a9]&lt;br /&gt;
* Interface Changed: nn::am::service::IAppletCommonFunctions&lt;br /&gt;
** Added:      82 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** Added:     160 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000B90A8 [ID = 0x8db727a9]&#039;]&lt;br /&gt;
** Added:     161 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x71000B9A78 [ID = 0xb0c7a8a3]&#039;]&lt;br /&gt;
* Interface Changed: nn::am::service::IDebugFunctions&lt;br /&gt;
** Added:      53 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** Added:     410 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     411 - buffers: [0x22], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** Added:     412 - buffers: [0x21], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::am::service::IOverlayFunctions&lt;br /&gt;
** Added:      40 - buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:      41 - buffers: [0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** Added:     103 - buffers: [0x5, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::nim::detail::INetworkInstallManager&lt;br /&gt;
** Added:     147 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** Added:     148 - buffer_entry_sizes: [0x10], buffers: [0x5], inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IScreenShotControlService&lt;br /&gt;
** Added:    1100 - buffers: [0x45], inbytes: 0x28, outbytes: 0x0&lt;br /&gt;
** Changed:  1106 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0] -&amp;gt; [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46] -&amp;gt; [0x15, 0x15, 0x15, 0x6, 0x46, 0x46] (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x68, outbytes: 0x18)&lt;br /&gt;
** Changed:  1107 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0] -&amp;gt; [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45] -&amp;gt; [0x15, 0x15, 0x15, 0x6, 0x45] (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x68, outbytes: 0x18)&lt;br /&gt;
** Added:    1108 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x70, outbytes: 0x18&lt;br /&gt;
* Interface Changed: nn::pctl::detail::ipc::IParentalControlService&lt;br /&gt;
** Added:    1475 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** Added:    1954 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1955 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:    1956 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:    1957 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:   145601 - inbytes: 0x0, outbytes: 0x36&lt;br /&gt;
** Added:   195101 - inbytes: 0x36, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x71000913E4 [ID = 0x10763728]&lt;br /&gt;
* Interface Changed: nn::npns::INotificationReceiver&lt;br /&gt;
** Added:       5 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::npns::INpnsSystem&lt;br /&gt;
** Added:       8 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Removed:    13 - buffers: [0x9], inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** Added:      14 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      15 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      16 - buffer_entry_sizes: [0x28], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
** Added:      28 - buffers: [0x9], inbytes: 0x10, outbytes: 0x28&lt;br /&gt;
** Added:      29 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:      37 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:      51 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     106 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     107 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:     156 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0, outinterfaces: [None]&lt;br /&gt;
** Added:     301 - buffers: [0xA], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     302 - buffer_entry_sizes: [0x10, 0x0], buffers: [0xA, 0xA], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     303 - buffer_entry_sizes: [0x138, 0x138], buffers: [0x6, 0x6], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** Added:     304 - inbytes: 0x0, outbytes: 0x50&lt;br /&gt;
** Added:     305 - buffer_entry_sizes: [0x48], buffers: [0x6], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** Added:     306 - buffers: [0x6, 0x9], inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
* Interface Changed: nn::npns::INpnsUser&lt;br /&gt;
** Added:       8 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::es::IActiveRightsContext&lt;br /&gt;
** Changed:   901 - buffer_entry_sizes: [0x24] -&amp;gt; [0x2C] (final state: buffer_entry_sizes: [0x2C], buffers: [0x16], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
* Interface Changed: nn::es::IETicketService&lt;br /&gt;
** Added:     101 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     103 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     104 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     201 - buffers: [0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     202 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:     203 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:     204 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** Added:    1028 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
** Added:      46 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::grcsrv::IGrcService&lt;br /&gt;
** Changed:     1 - inbytes: 0x20 -&amp;gt; 0x28 (final state: inbytes: 0x28, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** Added:      10 - inbytes: 0x20, outbytes: 0x0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;]&lt;br /&gt;
* Interface Removed: nn::jitsrv::IJitEnvironment&lt;br /&gt;
* Interface Removed: nn::jitsrv::IJitService&lt;br /&gt;
* Interface Added: nn::sf::hipc::detail::IHipcManager&lt;br /&gt;
* Unknown Interface cur-version: 0x7100000680 [ID = 0x3d92e8a4]&lt;br /&gt;
* Unknown Interface cur-version: 0x71000009C4 [ID = 0x2a4c2069]&lt;br /&gt;
* Interface Changed: nn::capsrv::sf::IDecoderControlService&lt;br /&gt;
** Added:    4002 - buffers: [0x46, 0x5], inbytes: 0x30, outbytes: 0x8&lt;br /&gt;
* Unknown Interface cur-version: 0x710011CA80 [ID = 0x7e450fad]&lt;br /&gt;
* Interface Changed: nn::spsm::detail::IPowerStateInterface&lt;br /&gt;
** Added:      15 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:      16 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021640 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021640 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021290 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021290 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710001829C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x710001829C [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021640 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021640 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
* Unknown Interface cur-version: 0x7100021290 [ID = 0xd3808bc8]&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
** Added:     222 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** Added:     302 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
** Added:    1020 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x7100021290 [ID = 0xd3808bc8]&#039;]&lt;br /&gt;
** Removed:  1100 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:    1101 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataDivisionExporter&lt;br /&gt;
** Removed:    70 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** Added:      74 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
* Interface Changed: nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
** Added:       8 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Added:       9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** Removed:    64 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    65 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** Removed:    66 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
* Interface Changed: nn::clkrst::IClkrstSession&lt;br /&gt;
** Added:      14 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:      15 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::rtc::IRtcManager&lt;br /&gt;
** Added:      12 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** Added:      13 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
* Unknown Interface prev-version: 0x710001829C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001CE6C [ID = 0x5a340f8a]&lt;br /&gt;
* Unknown Interface cur-version: 0x710001D12C [ID = 0x07b4542c]&lt;br /&gt;
* Interface Changed: nn::hshl::IChargeSetterSession&lt;br /&gt;
** Added:       4 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::hshl::IManager&lt;br /&gt;
** Changed:     9 - outinterfaces: [&#039;0x710001829C [ID = 0x5a340f8a]&#039;] -&amp;gt; [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001CE6C [ID = 0x5a340f8a]&#039;])&lt;br /&gt;
** Added:      11 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710001D12C [ID = 0x07b4542c]&#039;]&lt;br /&gt;
** Added:      12 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
* Interface Changed: nn::hshl::ISetterManager&lt;br /&gt;
** Added:       4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** Added:       5 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
* Interface Changed: nn::spl::detail::IEsInterface&lt;br /&gt;
** Added:      33 - buffers: [0x9, 0x9, 0x9], inbytes: 0x4, outbytes: 0x10&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_11 (previously master_key_10). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler/libc was upgraded, this results in various minor optimizations throughout the whole kernel.&lt;br /&gt;
** Many, many minor changes that this is almost certainly the cause for, e.g. KThread::SuspendRequest now calculates requested value as (0x10 &amp;lt;&amp;lt; suspend_type) instead of (1 &amp;lt;&amp;lt; (suspend_type + 4)).&lt;br /&gt;
** Biggest one is that sp/lr are now much more commonly not saved to stack until actually needed, if a function has a return path which does not make calls/does not need lr/sp saved.&lt;br /&gt;
* Initialize0 changes:&lt;br /&gt;
** The physical base address of the kernel is now passed by KernelLdr for use during KernelSlab virtual memory region setup.&lt;br /&gt;
*** This replaces the previous call to KInitialPageTable::GetPhysicalAddress.&lt;br /&gt;
* SVC-handler accesses to the thread local region&#039;s disable count now use userspace access instructions.&lt;br /&gt;
* SvcSetHeapSize now only sets the output address on success.&lt;br /&gt;
** This wasn&#039;t a vulnerability before, because prior to this the ABI meant userland would receive whatever was in the userland register at call time.&lt;br /&gt;
* CreateProcessParameter now zeroes many fields before performing initialization.&lt;br /&gt;
* New CreateProcessFlag 0x2000 is &amp;quot;EnableReservedRegionExtraSize&amp;quot;, when set the reserved region size is increased by (AddressSpaceSize / 8).&lt;br /&gt;
** Currently, CreateProcess will return svc::ResultInvalidState() unless all the following conditions are met:&lt;br /&gt;
*** Address space type must be 39-bit&lt;br /&gt;
*** System resource size must be &amp;gt; 0&lt;br /&gt;
*** KTargetSystem::IsDebugMode() must be true.&lt;br /&gt;
** New InfoType (0x1C) &amp;quot;InfoType_ReservedRegionExtraSize&amp;quot; retrieves the extra size, which is a member of KPageTableBase.&lt;br /&gt;
** Loader does not currently support passing this flag in any capacity yet.&lt;br /&gt;
** nn::os::VammManager currently calculates the reserved region as [start, end - extra size], and will not map to the extra part of the region.&lt;br /&gt;
* Various KPageTable(Base/Impl) changes:&lt;br /&gt;
** InitializeForProcess now takes in the create process flags directly instead of parsing as a bunch of bools.&lt;br /&gt;
** InitializeForProcess now performs much more complicated initialization/randomization of the four aslr&#039;d regions, dividing them up before/after the process code using largest-region first selection for randomization order.&lt;br /&gt;
** KPageTableImpl&#039;s traversal functions now take an additional output byte (which is also a new member at +0x11 in the traversal block and in KMemoryRange), this is always set to zero.&lt;br /&gt;
*** This byte is checked when traversing by ::Finalize and ::GetContiguousRangeWithMemoryState, but not other page table functions.&lt;br /&gt;
*** This byte is also stored as a new member of the memory range struct returned by GetContiguousRangeWithMemoryState&lt;br /&gt;
** AllocateAndMapPagesImpl now takes in the page properties by reference instead of by value.&lt;br /&gt;
** Read/WriteReadDebugIoMemory now use simpler logic for determining the current readable size.&lt;br /&gt;
* The KMemoryBlock helper &amp;quot;ConvertToKMemoryPermission&amp;quot; was changed to only copy the user-write bit to KernelWrite.&lt;br /&gt;
** This fixes a longstanding bug where the input was AND&#039;d with KMemoryPermission_UserReadWrite, and these bits were then ORR&#039;d into the final permission &amp;lt;&amp;lt;=&#039;d with KernelShift.&lt;br /&gt;
** The intent here was to copy the user read/write permissions into the kernel read/write permissions, but KMemoryPermission_UserReadWrite is not bitmask 0x3, it&#039;s bitmask 0x1B (including the KernelRead/Write bits).&lt;br /&gt;
** Thus, previously this would allow an input with KernelRead bit to spuriously set the NotMapped bit, and an input with KernelWrite bit to spuriously set the unused top bit.&lt;br /&gt;
** This was unexploitable, except maybe for causing a kernel-mode access exception.&lt;br /&gt;
* HandleException now handles EsrEc_DataAbortEl0 specially when determining the debug exception type.&lt;br /&gt;
** When ESR_EL1.IFSC is 0b100001 (&amp;quot;Alignment Fault&amp;quot;), ExceptionType_UnalignedData is selected instead of ExceptionType_DataAbort.&lt;br /&gt;
* KMemoryManager(Impl)/KPageHeap changes: &lt;br /&gt;
** KPageHeap&#039;s heap_virtual_address member is now removed and is a part of KMemoryManagerImpl now (this is still unused in non-debug kernel).&lt;br /&gt;
** KMemoryManager::AllocatePageGroup now takes a parameter for the required minimum alignment for the page group.&lt;br /&gt;
*** This is currently passed as 1 page (minimum alignment) at all callsites.&lt;br /&gt;
* SecureMonitor access was refactored, actual smc invocation is now in its own helper separate from interrupt disable/enable (and helpers which invoke without interrupt disable now exist).&lt;br /&gt;
&lt;br /&gt;
=== [[Audio_services|audio]] ===&lt;br /&gt;
Besides IPC changes, vulns were [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== [[JIT_services|jit]] ===&lt;br /&gt;
Symbols were stripped from the main-codebin.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2024-03-26_00-06-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=12574</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=12574"/>
		<updated>2023-11-01T17:24:42Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Fixups for query/insecure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! ID || Return Type || Name || Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Result || [[#SetHeapSize|SetHeapSize]] || uintptr_t *out_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Result || [[#SetMemoryPermission|SetMemoryPermission]] || uintptr_t address, size_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Result || [[#SetMemoryAttribute|SetMemoryAttribute]] || uintptr_t address, size_t size, uint32_t mask, uint32_t attr&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Result || [[#MapMemory|MapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Result || [[#UnmapMemory|UnmapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Result || [[#QueryMemory|QueryMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || void || [[#ExitProcess|ExitProcess]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Result || [[#CreateThread|CreateThread]] || Handle *out_handle, ThreadFunc func, uintptr_t arg, uintptr_t stack_bottom, int32_t priority, int32_t core_id&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Result || [[#StartThread|StartThread]] || Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || void || [[#ExitThread|ExitThread]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || void || [[#SleepThread|SleepThread]] || int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Result || [[#GetThreadPriority|GetThreadPriority]] || int32_t *out_priority, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || Result || [[#SetThreadPriority|SetThreadPriority]] || Handle thread_handle, int32_t priority&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || Result || [[#GetThreadCoreMask|GetThreadCoreMask]] || int32_t *out_core_id, uint64_t *out_affinity_mask, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Result || [[#SetThreadCoreMask|SetThreadCoreMask]] || Handle thread_handle, int32_t core_id, uint64_t affinity_mask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || int32_t || [[#GetCurrentProcessorNumber|GetCurrentProcessorNumber]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Result || [[#SignalEvent|SignalEvent]] || Handle event_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Result || [[#ClearEvent|ClearEvent]] || Handle event_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || Result || [[#MapSharedMemory|MapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size, MemoryPermission map_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || Result || [[#UnmapSharedMemory|UnmapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Result || [[#CreateTransferMemory|CreateTransferMemory]] || Handle *out_handle, uintptr_t address, size_t size, MemoryPermission map_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || Result || [[#CloseHandle|CloseHandle]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Result || [[#ResetSignal|ResetSignal]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Result || [[#WaitSynchronization|WaitSynchronization]] || int32_t *out_index, const Handle *handles, int32_t numHandles, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Result || [[#CancelSynchronization|CancelSynchronization]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Result || [[#ArbitrateLock|ArbitrateLock]] || Handle thread_handle, uintptr_t address, uint32_t tag&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || Result || [[#ArbitrateUnlock|ArbitrateUnlock]] || uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || Result || [[#WaitProcessWideKeyAtomic|WaitProcessWideKeyAtomic]] || uintptr_t address, uintptr_t cv_key, uint32_t tag, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || void || [[#SignalProcessWideKey|SignalProcessWideKey]] || uintptr_t cv_key, int32_t count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || int64_t || [[#GetSystemTick|GetSystemTick]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || Result || [[#ConnectToNamedPort|ConnectToNamedPort]] || Handle *out_handle, const char *name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Result || [[#SendSyncRequestLight|SendSyncRequestLight]] || Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || Result || [[#SendSyncRequest|SendSyncRequest]] || Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || Result || [[#SendSyncRequestWithUserBuffer|SendSyncRequestWithUserBuffer]] || uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || Result || [[#SendAsyncRequestWithUserBuffer|SendAsyncRequestWithUserBuffer]] || Handle *out_event_handle, uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || Result || [[#GetProcessId|GetProcessId]] || uint64_t *out_process_id, Handle process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || Result || [[#GetThreadId|GetThreadId]] || uint64_t *out_thread_id, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || void || [[#Break|Break]] || BreakReason break_reason, uintptr_t arg, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || Result || [[#OutputDebugString|OutputDebugString]] || const char *debug_str, size_t len&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || void || [[#ReturnFromException|ReturnFromException]] || Result result&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || Result || [[#GetInfo|GetInfo]] || uint64_t *out, InfoType info_type, Handle handle, uint64_t info_subtype&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || void || [[#FlushEntireDataCache|FlushEntireDataCache]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || Result || [[#FlushDataCache|FlushDataCache]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x2C  || Result || [[#MapPhysicalMemory|MapPhysicalMemory]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x2D  || Result || [[#UnmapPhysicalMemory|UnmapPhysicalMemory]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0-5.1.0] 0x2E  || Result || GetFutureThreadInfo || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags, int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x2E  || Result || [[#GetDebugFutureThreadInfo|GetDebugFutureThreadInfo]] || arch::LastThreadContext *out_context, uint64_t *thread_id, Handle debug_handle, int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || Result || [[#GetLastThreadInfo|GetLastThreadInfo]] || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || Result || [[#GetResourceLimitLimitValue|GetResourceLimitLimitValue]] || int64_t *out_limit_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || Result || [[#GetResourceLimitCurrentValue|GetResourceLimitCurrentValue]] || int64_t *out_current_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Result || [[#SetThreadActivity|SetThreadActivity]] || Handle thread_handle, ThreadActivity thread_activity&lt;br /&gt;
|-&lt;br /&gt;
| 0x33  || Result || [[#GetThreadContext3|GetThreadContext3]] || ThreadContext *out_context, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x34 || Result || [[#WaitForAddress|WaitForAddress]] || uintptr_t address, ArbitrationType arb_type, int32_t value, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x35 || Result || [[#SignalToAddress|SignalToAddress]] || uintptr_t address, SignalType signal_type, int32_t value, int32_t count&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0+] 0x36 || void || [[#SynchronizePreemptionState|SynchronizePreemptionState]] || &lt;br /&gt;
|-&lt;br /&gt;
| [11.0.0+] 0x37 || Result || [[#GetResourceLimitPeakValue|GetResourceLimitPeakValue]] || int64_t *out_peak_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [13.0.0+] 0x39 || Result || CreateIoPool || Handle *out_handle, IoPoolType which_pool&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x3A || Result || CreateIoRegion || Handle *out_handle, Handle io_pool, PhysicalAddress physical_address, size_t size, MemoryMapping mapping, MemoryPermission perm&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [1.0.0-3.0.2] 0x3C || void || [[#DumpInfo|DumpInfo]] || DumpInfoType dump_info_type, uint64_t arg&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x3C || void || [[#KernelDebug|KernelDebug]] || KernelDebugType kern_debug_type, uint64_t arg0, uint64_t arg1, uint64_t arg2&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x3D || void || [[#ChangeKernelTraceState|ChangeKernelTraceState]] || KernelTraceState kern_trace_state&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || Result || [[#CreateSession|CreateSession]] || Handle *out_server_session_handle, Handle *out_client_session_handle, bool is_light, uintptr_t name&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || Result || [[#AcceptSession|AcceptSession]] || Handle *out_handle, Handle port&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || Result || [[#ReplyAndReceiveLight|ReplyAndReceiveLight]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || Result || [[#ReplyAndReceive|ReplyAndReceive]] || int32_t *out_index, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || Result || [[#ReplyAndReceiveWithUserBuffer|ReplyAndReceiveWithUserBuffer]] || int32_t *out_index, uintptr_t message_buffer, size_t message_buffer_size, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || Result || [[#CreateEvent|CreateEvent]] || Handle *out_write_handle, Handle *out_read_handle&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x46 || Result || MapIoRegion || Handle io_region, uintptr_t address, size_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x47 || Result || UnmapIoRegion || Handle io_region, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x48 || Result || [[#MapPhysicalMemoryUnsafe|MapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x49 || Result || [[#UnmapPhysicalMemoryUnsafe|UnmapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4A || Result || [[#SetUnsafeLimit|SetUnsafeLimit]] || size_t limit&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x4B || Result || [[#CreateCodeMemory|CreateCodeMemory]] || Handle *out_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x4C || Result || [[#ControlCodeMemory|ControlCodeMemory]] || Handle code_memory_handle, CodeMemoryOperation operation, uint64_t address, uint64_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || void || [[#SleepSystem|SleepSystem]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || Result || [[#ReadWriteRegister|ReadWriteRegister]] || uint32_t *out_value, PhysicalAddress address, uint32_t mask, uint32_t value&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || Result || [[#SetProcessActivity|SetProcessActivity]] || Handle process_handle, ProcessActivity process_activity&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || Result || [[#CreateSharedMemory|CreateSharedMemory]] || Handle *out_handle, size_t size, MemoryPermission owner_perm, MemoryPermission remote_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || Result || [[#MapTransferMemory|MapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size, MemoryPermission owner_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || Result || [[#UnmapTransferMemory|UnmapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || Result || [[#CreateInterruptEvent|CreateInterruptEvent]] || Handle *out_read_handle, int32_t interrupt_id, InterruptType interrupt_type&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-9.2.0] 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, PhysicalAddress physical_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [10.0.0+] 0x55 || Result || QueryMemoryMapping || uintptr_t *out_address, size_t *out_size, PhysicalAddress physical_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || Result || [[#AttachDeviceAddressSpace|AttachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-12.1.0] 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || Result || [[#UnmapDeviceAddressSpace|UnmapDeviceAddressSpace]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || Result || [[#InvalidateProcessDataCache|InvalidateProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || Result || [[#StoreProcessDataCache|StoreProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || Result || [[#FlushProcessDataCache|FlushProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || Result || [[#DebugActiveProcess|DebugActiveProcess]] || Handle *out_handle, uint64_t process_id&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || Result || [[#BreakDebugProcess|BreakDebugProcess]] || Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || Result || [[#TerminateDebugProcess|TerminateDebugProcess]] || Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || Result || [[#GetDebugEvent|GetDebugEvent]] || arch::DebugEventInfo *out_info, Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || Result || [[#ContinueDebugEvent|ContinueDebugEvent]] || Handle debug_handle, uint32_t flags, const uint64_t *thread_ids, int32_t num_thread_ids&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || Result || [[#GetProcessList|GetProcessList]] || int32_t *out_num_processes, uint64_t *out_process_ids, int32_t max_out_count&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || Result || [[#GetThreadList|GetThreadList]] || int32_t *out_num_threads, uint64_t *out_thread_ids, int32_t max_out_count, Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || Result || [[#GetDebugThreadContext|GetDebugThreadContext]] || ThreadContext *out_context, Handle debug_handle, uint64_t thread_id, uint32_t context_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || Result || [[#SetDebugThreadContext|SetDebugThreadContext]] || Handle debug_handle, uint64_t thread_id, const ThreadContext *context, uint32_t context_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || Result || [[#QueryDebugProcessMemory|QueryDebugProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || Result || [[#ReadDebugProcessMemory|ReadDebugProcessMemory]] || uintptr_t buffer, Handle debug_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || Result || [[#WriteDebugProcessMemory|WriteDebugProcessMemory]] || Handle debug_handle, uintptr_t buffer, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || Result || [[#SetHardwareBreakPoint|SetHardwareBreakPoint]] || HardwareBreakPointRegisterName name, uint64_t flags, uint64_t value&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || Result || [[#GetDebugThreadParam|GetDebugThreadParam]] || uint64_t *out_64, uint32_t *out_32, Handle debug_handle, uint64_t thread_id, DebugThreadParam param&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [5.0.0+] 0x6F || Result || [[#GetSystemInfo|GetSystemInfo]] || uint64_t *out, SystemInfoType info_type, Handle handle, uint64_t info_subtype&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || Result || [[#CreatePort|CreatePort]] || Handle *out_server_handle, Handle *out_client_handle, int32_t max_sessions, bool is_light, uintptr_t name&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || Result || [[#ManageNamedPort|ManageNamedPort]] || Handle *out_server_handle, const char *name, int32_t max_sessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || Result || [[#ConnectToPort|ConnectToPort]] || Handle *out_handle, Handle port&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || Result || [[#SetProcessMemoryPermission|SetProcessMemoryPermission]] || Handle process_handle, uint64_t address, uint64_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || Result || [[#MapProcessMemory|MapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || Result || [[#UnmapProcessMemory|UnmapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || Result || [[#QueryProcessMemory|QueryProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uint64_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || Result || [[#MapProcessCodeMemory|MapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || Result || [[#UnmapProcessCodeMemory|UnmapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || Result || [[#CreateProcess|CreateProcess]] || Handle *out_handle, const arch::CreateProcessParameter *parameters, const uint32_t *caps, int32_t num_caps&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || Result || [[#StartProcess|StartProcess]] || Handle process_handle, int32_t priority, int32_t core_id, uint64_t main_thread_stack_size&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || Result || [[#TerminateProcess|TerminateProcess]] || Handle process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || Result || [[#GetProcessInfo|GetProcessInfo]] || int64_t *out_info, Handle process_handle, ProcessInfoType info_type&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || Result || [[#CreateResourceLimit|CreateResourceLimit]] || Handle *out_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || Result || [[#SetResourceLimitLimitValue|SetResourceLimitLimitValue]] || Handle resource_limit_handle, LimitableResource which, int64_t limit_value&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [15.0.0+] 0x90  || Result || MapInsecurePhysicalMemory || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [15.0.0+] 0x91  || Result || UnmapInsecurePhysicalMemory || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || HeapAddress&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d, and always in the Heap memory region) is written to HeapAddress.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition. The memory allocated counts towards the caller&#039;s process Memory ResourceLimit.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Invalid size passed. It&#039;s either bigger than 4GB, or misaligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD001:&#039;&#039;&#039; Size is bigger than the Heap Region size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; KMemoryBlockAllocator slab allocator exhausted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The memory region is in an invalid state. Likely because a mapping was made in the heap region.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x10801:&#039;&#039;&#039; Memory resource limit reached.&lt;br /&gt;
&lt;br /&gt;
== SetMemoryPermission ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The memory region was reprotected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Unaligned address specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Unaligned or zero size specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region does not fall within the userland address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD801:&#039;&#039;&#039; Invalid permission specified. Valid permissions are ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region was in an invalid state. The region must have the [[#MemoryState|FlagCanReprotect]] state, and must not have the [[#MemoryAttribute|Locked]] or [[#MemoryAttribute|Uncached]] attributes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; Kernel resource exhausted.&lt;br /&gt;
&lt;br /&gt;
== SetMemoryAttribute ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || uint32_t || Mask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes attribute of page-aligned memory region. The only allowed combination of Value and Mask is 0x8, which means only bit3 in [[#MemoryAttribute]] can be set or cleared.&lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
== MapMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#GetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#GetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== UnmapMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps a region that was previously mapped with [[#MapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== QueryMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queries information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== ExitProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== CreateThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R0 || int32_t || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R4 || int32_t || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
ProcessorId must be 0,1,2,3 or -2, where -2 uses the default CpuId for process.&lt;br /&gt;
&lt;br /&gt;
== StartThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== ExitThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== SleepThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0, R1 || uint64_t || Nanoseconds&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sleeps for a specified amount of time, or yields the thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadPriority ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || int32_t || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets the priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== SetThreadPriority ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| int32_t || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== GetThreadCoreMask ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || int32_t || CoreMask0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || R2, R3 || uint64_t || CoreMask1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets the affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== SetThreadCoreMask ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || int32_t || CoreMask0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || uint64_t || CoreMask1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== GetCurrentProcessorNumber ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || uint32_t || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
CpuId is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== SignalEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent&amp;gt; || EventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puts the given event in the signaled state.&lt;br /&gt;
&lt;br /&gt;
Will wake up any thread currently waiting on this event. Can potentially trigger a reschedule.&lt;br /&gt;
&lt;br /&gt;
Any calls to [[#WaitSynchronization]] on this handle will return immediately, until the event&#039;s signaled state is reset.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Event is now in signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
== ClearEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent&amp;gt; or Handle&amp;lt;ReadableEvent&amp;gt; || EventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes the given event out of the signaled state, if it is signaled.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success, the event is now in the not-signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
== MapSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== UnmapSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== CloseHandle ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ResetSignal ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;ReadableEvent&amp;gt; or Handle&amp;lt;Process&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this returns ResultInvalidState if the event is not signaled.&lt;br /&gt;
&lt;br /&gt;
If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The signal was reset.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The handle is invalid or of the wrong type.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; The handle was not signaled, or the process is in exited state, causing it to be permanently signaled.&lt;br /&gt;
&lt;br /&gt;
== WaitSynchronization ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || int64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint64_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with HandlesNum &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#GetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#GetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via [[#SignalEvent]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#AcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#ReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#CancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== CancelSynchronization ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#WaitSynchronization]], [[#ReplyAndReceive]] or [[#ReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== ArbitrateLock ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || uint32_t || Tag&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;                                  &lt;br /&gt;
&lt;br /&gt;
== ArbitrateUnlock ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WaitProcessWideKeyAtomic ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || KeyAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void* || TagAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Tag&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || int64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SignalProcessWideKey ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || int32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetSystemTick ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0, R1 || uint64_t || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== ConnectToNamedPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || char* || PortName&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequestLight ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequest ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequestWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and Address must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; Address is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== SendAsyncRequestWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || EventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and Address must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
== GetProcessId ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || ProcessId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadId ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || ThreadId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Break ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#BreakReason]] || BreakReason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if [[#ContinueDebugEvent]] didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== OutputDebugString ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || char* || String&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReturnFromException ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#InfoType]] || InfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || uint64_t || InfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || Info&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushEntireDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MapPhysicalMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acts like [[#SetHeapSize]] except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Invalid size passed. It&#039;s either zero or not 4k-aligned&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Invalid address. (not 4k-aligned)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xDC01:&#039;&#039;&#039; Invalid memory range. It&#039;s either causes overflow, or does not fall into &amp;quot;reserved&amp;quot; address range (aka Alias). See AliasRegionAddress at [[#InfoType]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; Invalid state. (not enough SystemResource (see [[NPDM#SystemResourceSize]]))&lt;br /&gt;
&lt;br /&gt;
== UnmapPhysicalMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugFutureThreadInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R1 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || LastThreadContextParam0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || LastThreadContextParam1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || LastThreadContextParam2&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X4 || uint64_t || LastThreadContextParam3&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X5 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W6 || uint32_t ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetLastThreadInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || LastThreadContextParam0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || LastThreadContextParam1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || LastThreadContextParam2&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X4 || uint64_t || LastThreadContextParam3&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X5 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W6 || uint32_t ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitLimitValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || LimitValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitCurrentValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || CurrentValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetThreadActivity ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || [[#ThreadActivity]] || ThreadActivity&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadContext3 ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WaitForAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#ArbitrationType]] || ArbitrationType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SignalToAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#SignalType]] || SignalType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || uint32_t || NumToSignal&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0  || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SynchronizePreemptionState ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  || &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitPeakValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || PeakValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DumpInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#DumpInfoType]] || DumpInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || DumpInfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This function was removed and replaced by [[#KernelDebug]].&lt;br /&gt;
&lt;br /&gt;
== KernelDebug ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#KernelDebugType]] || KernelDebugType&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
== ChangeKernelTraceState ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#KernelTraceState]] || KernelTraceState&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
== CreateSession ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || IsLight&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || ServerSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || Handle&amp;lt;ClientSession&amp;gt; || ClientSessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AcceptSession ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || PortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || ServerSessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceiveLight ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Port&amp;gt; or Handle&amp;lt;ServerSession&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceive ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle&amp;lt;Port&amp;gt;* or Handle&amp;lt;ServerSession&amp;gt;* || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTargetSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R0, R4 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTargetSessionHandle is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTargetSessionHandle is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTargetSessionHandle is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceiveWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || Handle&amp;lt;Port&amp;gt;* or Handle&amp;lt;ServerSession&amp;gt;* || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R0 || uint32_t || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R4 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTargetSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X6 || R5, R6 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;WritableEvent&amp;gt; || WritableEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MapPhysicalMemoryUnsafe ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#MapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== UnmapPhysicalMemoryUnsafe ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetUnsafeLimit ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || uint64_t || Limit&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;CodeMemory&amp;gt; || CodeMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== ControlCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;CodeMemory&amp;gt; || CodeMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#CodeMemoryOperation]] || CodeMemoryOperation&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4, R5 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R6 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the backing memory for a CodeMemory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|UnmapOwner/UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== SleepSystem ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || || &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReadWriteRegister ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || RegisterAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R0 || uint32_t || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R1 || uint32_t || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC#ReadWriteRegister|ReadWriteRegister]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by the SMC [[SMC#ReadWriteRegister|ReadWriteRegister]] (checked in addition to the whitelist in the ReadWriteRegister SVC), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== SetProcessActivity ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || [[#ProcessActivity]] || ProcessActivity&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#MemoryPermission]] || LocalMemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || RemoteMemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== MapTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in [[#CreateTransferMemory]], otherwise error.&lt;br /&gt;
&lt;br /&gt;
== UnmapTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
== CreateInterruptEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#Interrupt]] || Interrupt&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#InterruptType]] || InterruptType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The InterruptType argument configures the triggering. If it is 0, the IRQ is active HIGH level sensitive, if it is 1 it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
== QueryPhysicalAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || VirtualAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || PhysicalMemoryInfoAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || PhysicalMemoryInfoBaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || PhysicalMemoryInfoSize&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queries the physical address of a virtual address. Will always fetch the lowest page-aligned mapping that contains the provided physical address.&lt;br /&gt;
&lt;br /&gt;
The returned PhysicalMemoryInfoBaseAddress is the virtual address of that page-aligned mapping, while PhysicalMemoryInfoAddress is the physical address of that page. PhysicalMemoryInfoSize is the amount of continuous physical memory in that mapping.&lt;br /&gt;
&lt;br /&gt;
== QueryIoMapping ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || IoAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1 || void* || VirtualAddress&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== CreateDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || DeviceAddressSpaceStartAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0, R1 || uint64_t || DeviceAddressSpaceEndAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
StartAddr is normally set to 0 and EndAddr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== AttachDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceName&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== DetachDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceName&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpaceByForce ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || uint32_t || Option&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Address is the userspace destination address, while DeviceAddressSpaceAddress is the source address between DeviceAddressSpaceStartAddress and DeviceAddressSpaceEndAddress (passed to [[#CreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|FlagCanDeviceMap]] bit set. Bit [[SVC#MemoryAttribute|DeviceShared]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits.&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpaceAligned ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || uint32_t  || Option&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|FlagCanAlignedDeviceMap]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits.&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X5 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W6 || R7 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1 || uint64_t || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UnmapDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== InvalidateProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StoreProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DebugActiveProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BreakDebugProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TerminateDebugProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#DebugEventInfo]]* || DebugEventInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || uint32_t || [[#ContinueDebugFlags]] ([1.0.0-2.3.0] [[#ContinueDebugFlagsOld]])&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 ([1.0.0-2.3.0] R2, R3) || uint64_t* ([1.0.0-2.3.0] uint64_t)|| ThreadIdList ([1.0.0-2.3.0] ThreadId)&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || uint64_t || [3.0.0+] NumThreadIds&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maximum NumThreadIds is 64. 0 means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued or is already running.&lt;br /&gt;
&lt;br /&gt;
== GetProcessList ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || uint64_t* || ProcessIdBuffer&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || ProcessIdBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || NumProcesses&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fills the provided array with the pids of currently living processes. A process &amp;quot;lives&amp;quot; so long as it is currently running or a handle to it still exists.&lt;br /&gt;
&lt;br /&gt;
It returns the total number of processes currently alive. If this number is bigger than the size of ProcessIdBuffer, the user won&#039;t have all the pids.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xd401:&#039;&#039;&#039; The provided buffer is outside the process address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; copyToUser failed. The provided buffer is not user-accessible.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; The provided buffer size is too big. Max value is 0xFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== GetThreadList ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || uint64_t* || ThreadIdBuffer&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || ThreadIdBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || NumThreads&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugThreadContext ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R4 || uint32_t || [[#ThreadContextFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetDebugThreadContext ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R4 || uint32_t || [[#ThreadContextFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QueryDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReadDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || MemoryBufferAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WriteDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || MemoryBufferAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetHardwareBreakPoint ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || [[#HardwareBreakPointRegisterName]] || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of HardwareBreakPointRegisterName:&lt;br /&gt;
&lt;br /&gt;
If HardwareBreakPointRegisterName &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given DebugHandle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
If HardwareBreakPointRegisterName is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that HardwareBreakPointRegisterName 0 to 4 match only to Virtual Address, while HardwareBreakPointRegisterName 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
== GetDebugThreadParam ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R1 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R3 || [[#DebugThreadParam]] || DebugThreadParam&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || R3 || uint32_t || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetSystemInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#SystemInfoType]] || SystemInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || SystemInfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || SystemInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreatePort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || bool || IsLight&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R0 || uint64_t || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Port&amp;gt; || ServerPortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || R2 || Handle&amp;lt;Port&amp;gt; || ClientPortHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ManageNamedPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || char* || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || int32_t || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Port&amp;gt; || ServerPortHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ConnectToPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || ClientPortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetProcessMemoryPermission ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R5 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== MapProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== UnmapProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#MapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== QueryProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R1, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#QueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== MapProcessCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== UnmapProcessCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#MapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== CreateProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessParameter]]* || CreateProcessParameter&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint32_t* || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || int32_t || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessParameter]] as input.&lt;br /&gt;
Capabilities points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the Capabilities array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== StartProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || int32_t || MainThreadPriority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || DefaultCpuId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || uint64_t || MainThreadStackSize&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TerminateProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetProcessInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R2 || [[#ProcessInfoType]] || ProcessInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || [[#ProcessState]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== CreateResourceLimit ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetResourceLimitLimitValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || int64_t || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CallSecureMonitor ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || uint64_t || [[SMC#Secure_Monitor_calls|FunctionId]]&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1-X7 || R1-R7 || uint64_t || SMC arguments&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[SMC#Result|Result]] || SMC result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1-X7 || R1-R7 || uint64_t || SMC output&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes in a SMC function ID in X0, and arguments for that SMC function in X1-X7.&lt;br /&gt;
&lt;br /&gt;
Passing an invalid SMC function ID or calling from a core other than core 3 will result in a secure monitor panic.&lt;br /&gt;
&lt;br /&gt;
The kernel parses bits 9-15 in the passed SMC function ID (per the ARM SMC calling convention), and when set uses as an indicator to translate a pointer in the associated register (X1-X7) to a physical address. The kernel will translate any address mapped as R-W, other addresses (R--, R-X, or invalid pointers) will be translated as 0/NULL.&lt;br /&gt;
&lt;br /&gt;
Output is returned raw from the Secure Monitor; X0 will be the untranslated SMC result and X1-X7 will contain other SMC output (or be unchanged, depending on the SMC).&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* BreakDebugProcess&lt;br /&gt;
* ContinueDebugEvent&lt;br /&gt;
* WriteDebugProcessMemory&lt;br /&gt;
* SetDebugThreadContext&lt;br /&gt;
* TerminateDebugProcess&lt;br /&gt;
* SetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
DebugActiveProcess stops execution of the target process, the normal method for resuming it requires ContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== InfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || InfoType || InfoSubType || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || PriorityMask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemorySize. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || UsedMemorySize. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AslrRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AslrRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] SystemResourceSizeTotal&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] SystemResourceSizeUsed&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] InitialProcessIdRange_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] InitialProcessIdRange_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalNonSystemMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] UsedNonSystemMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 23 || 0 || [9.0.0+] IsApplication&lt;br /&gt;
|-&lt;br /&gt;
| Process || 24 || 0 || [11.0.0+] FreeThreadCount&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 25 ([1.0.0-12.1.0] 0xF0000002) || 0-3, -1 || ThreadTickCount. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 26 || 0 || [14.0.0+] IsSvcPermitted&lt;br /&gt;
|-&lt;br /&gt;
| Process || 27 || 0 || [16.0.0+] IoRegionHint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemInfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || SystemInfoType || SystemInfoSubType || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalPhysicalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalPhysicalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalPhysicalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalPhysicalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || UsedPhysicalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || UsedPhysicalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || UsedPhysicalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || UsedPhysicalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || InitialProcessIdRange_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || InitialProcessIdRange_UpperBound&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ThreadContextFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || General-purpose registers || If in 64-bit mode, GPRs 0–28 will be read/written. If in 32-bit mode, GPRs 0–12 will be read/written.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Control registers || Reads/writes the FP, LR, PC, SP, PSTATE, and TPIDR registers.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Floating-point registers || Reads/writes the floating-point vector registers.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Floating-point control registers || Reads/writes the FPCR and FPSR registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || PhysicalMemoryMax || Bytes of memory a process may allocate.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ThreadCountMax || Amount of threads a process can create.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || EventCountMax || Amount of events a process can create through [[#CreateEvent]] or [[#SendAsyncRequestWithUserBuffer]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || TransferMemoryCountMax || Amount of TransferMemory a process can create through [[#CreateTransferMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SessionCountMax || Amount of session a process can create through [[#CreateSession]], [[#ConnectToPort]] or [[#ConnectToNamedPort]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ThreadActivity =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Runnable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessActivity ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Runnable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Crashed || Processes will not enter this state unless they were created with [[#CreateProcessParameter|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended ([[#SetThreadActivity]] 1 or [[#SetProcessActivity]] 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessParameter ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || Flags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || IsApplication&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] UseSecureMemory&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] OptimizeMemoryAllocation (only allowed in combination with IsApplication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle (can be zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] SystemResourceNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one MemoryRegion.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] MemoryRegion is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] MemoryRegion is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
The PersonalMmHeap are allocated as follows:&lt;br /&gt;
* For the application, normal insecure pool is used. Carveout 5 is used to provide protection.&lt;br /&gt;
* For the applet, a pre-allocated secure pool segment of size 0x400000 is used.&lt;br /&gt;
* For sysmodules, secure pool is allocated.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AddressSpace32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AddressSpace64BitOld || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AddressSpace32BitNoReserved || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] AddressSpace64Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || [[#MemoryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || [[#MemoryPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryPermission ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Read || Can be set by [[#SetMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Write || Can be set by [[#SetMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DontCare ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Locked || Used by MapMemory, as an async IPC user buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IpcLocked || True when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceShared || True when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Uncached || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || [[#MemoryType]] || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetMemoryPermission|FlagCanReprotect]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || FlagCanDebug || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || FlagCanUseIpc || Allows sending this region as an IPC A/B/W buffer with flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || FlagCanUseNonDeviceIpc || Allows sending this region as an IPC A/B/W buffer with flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || FlagCanUseNonSecureIpc || Allows sending this region as an IPC A/B/W buffer with flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || FlagMapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#SetProcessMemoryPermission|FlagCode]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#MapMemory|FlagCanAlias]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#MapProcessCodeMemory|FlagCanCodeAlias]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#CreateTransferMemory|FlagCanTransfer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#QueryPhysicalAddress|FlagCanQueryPhysical]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#MapDeviceAddressSpace|FlagCanDeviceMap]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#MapDeviceAddressSpaceAligned|FlagCanAlignedDeviceMap]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#SendSyncRequestWithUserBuffer|FlagCanIpcUserBuffer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || FlagReferenceCounted || The physical memory blocks backing this region are refcounted.&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#MapProcessMemory|FlagCanMapProcess]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#SetMemoryAttribute|FlagCanChangeAttribute]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [15.0.0+] FlagLinearMapped ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MemoryType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || Free ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || Io || Mapped by kernel capability parsing in [[#CreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || Static || Mapped by kernel capability parsing in [[#CreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || Code || Mapped during [[#CreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| CodeData || Transition from 0xDC7E03 performed by [[#SetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| Normal || Mapped using [[#SetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || Shared || Mapped using [[#MapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] Alias || Mapped using [[#MapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || AliasCode || Mapped using [[#MapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| AliasCodeData || Transition from 0xDD7E08 performed by [[#SetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|Ipc]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || Stack || Mapped using [[#MapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|ThreadLocal]] || Mapped during [[#CreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || Transfered || Mapped using [[#MapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || SharedTransfered || Mapped using [[#MapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || SharedCode || Mapped using [[#MapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || Inaccessible ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|NonSecureIpc]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|NonDeviceIpc]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || Kernel || Mapped in kernel during [[#CreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] GeneratedCode || Mapped in kernel during [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002016 || [13.0.0+] Coverage || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05583817 || [15.0.0+] Insecure || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [2.0.0+] SError&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and [[#ReturnFromException]]:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || [2.0.0+] SError&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call [[#ReturnFromException]] (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
[[#ReturnFromException]] updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls [[#ReturnFromException]], it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12498</id>
		<title>17.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12498"/>
		<updated>2023-10-11T04:16:53Z</updated>

		<summary type="html">&lt;p&gt;SciresM: secmon diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 17.0.0 system update was released on October 11, 2023 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* 	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, controller, error, playerSelect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* nifm: Service access: added ifcfg, nettc:nd, nettc:nu, removed bsdcfg.&lt;br /&gt;
* bsdsocket: Service server access: added ifcfg.&lt;br /&gt;
* audio: Service access: removed set:fd.&lt;br /&gt;
* wlan: Name updated: wlan -&amp;gt; wlan.autogen.&lt;br /&gt;
* ldn: Service access: added ifcfg, removed bsdcfg.&lt;br /&gt;
* pcie: Service access: added i2c.&lt;br /&gt;
* account: Service access: added caps:dc.&lt;br /&gt;
* ns: Service access: added hid.&lt;br /&gt;
* npns: Service access: added time:u.&lt;br /&gt;
* migration: Fac.FsAccessFlag updated: set bitmask 0x0000000200001000 (ImageManager, SaveDataTransferVersion2).&lt;br /&gt;
* qlaunch: Service access: added htcs:sys.&lt;br /&gt;
* controller: Service access: added htcs:sys.&lt;br /&gt;
* error: Service access: added htcs:sys.&lt;br /&gt;
* playerSelect: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletWeb: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletShop: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletOff: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletLns: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletAuth: Service access: added htcs:sys.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* error applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/Error.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::fgm::sf::IDebugger&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::account::nas::IDeviceHistoryRequest&lt;br /&gt;
** nn::hshl::IBridgeSession&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
*** Added command 200 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 205 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 210 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 220 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 221 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command 300 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ICommonStateGetter&lt;br /&gt;
*** Added command 600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 910 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 52 - inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ILibraryAppletSelfAccessor&lt;br /&gt;
*** Added command 160 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::apm::ISystemManager&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::arp::detail::IReader&lt;br /&gt;
*** Changed command 2 - outbytes: 0x1 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** nn::arp::detail::IUpdater&lt;br /&gt;
*** Changed command 1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::audio::detail::IAudioDevice&lt;br /&gt;
*** Added command 15 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 16 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
*** Added command 17 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 18 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::audio::detail::IAudioSnoopManager&lt;br /&gt;
*** Removed command 1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Added command 19 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 20 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Removed command 27 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 16 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 17 - buffers: [0x5], inbytes: 0x8, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 18 - buffers: [0x5, 0x6, 0x6, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 19 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 20 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 21 - buffers: [0x5, 0x6], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 22 - buffers: [0x5, 0x6, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 23 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 50 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 51 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 52 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 53 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 54 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 55 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 56 - buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 57 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 58 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 100 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 120 - buffer_entry_sizes: [0x20, 0x0], buffers: [0x6, 0x21], inbytes: 0x18, outbytes: 0x8&lt;br /&gt;
*** Added command 130 - buffers: [0x6], inbytes: 0x20, outbytes: 0x8&lt;br /&gt;
*** Added command 140 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 150 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Changed command 50000 - buffers: [0x6, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x18, outbytes: 0x8)&lt;br /&gt;
** nn::capsrv::sf::IAlbumApplicationService&lt;br /&gt;
*** Added command 145 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 146 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x30, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 147 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
** nn::capsrv::sf::IDecoderControlService&lt;br /&gt;
*** Added command 4001 - buffers: [0x46, 0x5], inbytes: 0x28, outbytes: 0x8&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** nn::erpt::sf::IContext&lt;br /&gt;
*** Changed command 10 - inbytes: 0x8 -&amp;gt; 0xC (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0)&lt;br /&gt;
*** Added command 12 - buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command 212 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Changed command 1006 - buffer_entry_sizes: [0x48, 0x10] -&amp;gt; [0x50, 0x10] (final state: buffer_entry_sizes: [0x50, 0x10], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 1023 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1024 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Added command 1025 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1026 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1027 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Removed command 2002 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2003 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x710007990C&#039;] -&amp;gt; [&#039;0x710007AF24&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007AF24&#039;])&lt;br /&gt;
** nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0xC&lt;br /&gt;
*** Added command 117 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 221 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 618 - buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - buffer_entry_sizes: [0x124, 0x301] -&amp;gt; [0x301, 0x0], buffers: [0x1A, 0x19] -&amp;gt; [0x19, 0x6] (final state: buffer_entry_sizes: [0x301, 0x0], buffers: [0x19, 0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair&lt;br /&gt;
*** Changed command 110 - buffers: [0x5] -&amp;gt; [0x5, 0x5], inbytes: 0x28 -&amp;gt; 0x18 (final state: buffers: [0x5, 0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
*** Added command 63 - buffer_entry_sizes: [0x200, 0x0], buffers: [0x19, 0x5], inbytes: 0x2, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
*** Removed command 67 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** nn::gpio::IPadSession&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::grcsrv::IContinuousRecorder&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 217 - inbytes: 0x10, inhandles: [1], outbytes: 0x8&lt;br /&gt;
*** Added command 351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 213 - inbytes: 0x20, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 214 - buffer_entry_sizes: [0x4, 0x10], buffers: [0x9, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 311 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 312 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 1004 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command 1320 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 1321 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hshl::IManager&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::hshl::IBridgeSession&#039;]&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** nn::hshl::ISetterManager&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::migration::savedata::IClient&lt;br /&gt;
*** Added command 304 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::savedata::IServer&lt;br /&gt;
*** Added command 3 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::user::IService&lt;br /&gt;
*** Added command 1110 - buffer_entry_sizes: [0x100, 0x8], buffers: [0x19, 0x5], inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::migration::savedata::IServer&#039;]&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForWebBrowser&lt;br /&gt;
*** Added command 100 - buffers: [0x5, 0x5, 0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command 26 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Added command 30 - inbytes: 0x11, outbytes: 0x8&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Added command 45 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Added command 142 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 143 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 144 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3001 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** nn::nim::detail::IShopServiceAccessServerInterface&lt;br /&gt;
*** Added command 5 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::nim::detail::IShopServiceAccessServer&#039;], pid: True&lt;br /&gt;
** nn::npns::INpnsSystem&lt;br /&gt;
*** Added command 35 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 36 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 40 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 41 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 42 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 43 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 44 - buffer_entry_sizes: [0x10], buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 50 - buffers: [0x9, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Removed command 84 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2521 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 2523 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
*** Added command 3100 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 3101 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 3102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
*** Added command 10000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IOlscServiceForSystemService&#039;]&lt;br /&gt;
** nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
*** Removed command 600 - buffer_entry_sizes: [0x4B8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 610 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 611 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 612 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 900 - buffers: [0x45], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::pdm::detail::INotifyService&lt;br /&gt;
*** Changed command 0 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::pinmux::ISession&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Added command 107 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** nn::psc::sf::IPmControl&lt;br /&gt;
*** Added command 7 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::psm::IPsmServer&lt;br /&gt;
*** Changed command 17 - outbytes: 0x40 -&amp;gt; 0x54 (final state: inbytes: 0x0, outbytes: 0x54)&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 221 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 222 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
*** Added command 35 - buffers: [0x21, 0x22], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** nn::spsm::detail::IPowerStateInterface&lt;br /&gt;
*** Added command 12 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 13 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 14 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::ts::server::IMeasurementServer&lt;br /&gt;
*** Removed command 0 - inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
*** Removed command 1 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** nn::ts::server::ISession&lt;br /&gt;
*** Added command 5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::uart::IManager&lt;br /&gt;
*** Removed command 0 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 3 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 4 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 5 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 7 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 8 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 9 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 10 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Changed command 19 - inbytes: 0x4 -&amp;gt; 0x1 (final state: inbytes: 0x1, outbytes: 0x0)&lt;br /&gt;
*** Removed command 20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 22 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
*** Changed command 94 - buffer_entry_sizes: [0x20] -&amp;gt; [0x28] (final state: buffer_entry_sizes: [0x28], buffers: [0xA], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 200 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 201 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 202 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 203 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_10 (previously master_key_0f). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
[[Package2|INI1]] changes:&lt;br /&gt;
* BootImagePackage: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageExFat: &lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
* BootImagePackageExFatSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Secure Monitor ====&lt;br /&gt;
* Support for a new EsCommonKeyType was added (type = 2).&lt;br /&gt;
** Previously, only 0 (TitleKey) and 1 (ArchiveKey) were supported.&lt;br /&gt;
** Correspondingly, PrepareEsDeviceUniqueKeyOption&#039;s type field is now bits 6-7 instead of just bit 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler/libc changes:&lt;br /&gt;
** The kernel is now linked using RELR for relocations instead of RELA (see compiler support in lld for .relr.dyn).&lt;br /&gt;
** This greatly reduces the relocations segment size; it has decreased from 0x3A50 bytes in 16.0.0 to 0x90 in 17.0.0.&lt;br /&gt;
** Many minor optimization changes, e.g. mul+add -&amp;gt; madd, madd -&amp;gt; smaddl/umaddl, (a + b - 1) &amp;gt;&amp;gt; 36 is now (a + b) &amp;gt; 0x1000000000, various reordering.&lt;br /&gt;
* crt0 changes:&lt;br /&gt;
** crt0 is no longer located at _start, instead _start is `b crt0` followed by 0x7FC of zeroes.&lt;br /&gt;
** crt0 is now located at the start of .rodata.&lt;br /&gt;
*** The crt0 page is now identity-mapped R-X in .rodata instead of RWX at start-of-text.&lt;br /&gt;
** Many system registers which were previously set from KInitArguments are now set using a register constants table in the crt0 .rodata segment.&lt;br /&gt;
*** These are ttbr0_el1, ttbr1_el1, tcr_el1, mair_el1, and sctlr_el1.&lt;br /&gt;
*** This table is initially zeroes, and is initialized to the correct values by KernelLdr before returning to Kernel/setting permissions.&lt;br /&gt;
** Kernel Map now stores offsets relative to itself rather than relative to _start.&lt;br /&gt;
*** Kernel map also now stores an additional offset (to the &amp;quot;register constants&amp;quot;).&lt;br /&gt;
** The big idea here is to make the crt0 page no longer executable after init.&lt;br /&gt;
*** This mitigates the ability to execute gadgets (via ROP/etc) to set TTBR1_EL1 (and other important registers) to user-controlled values.&lt;br /&gt;
**** The *only* ttbr1_el1 gadget in all of kernel now sets it to the constant in .rodata, which can&#039;t be modified after KernelLdr finishes.&lt;br /&gt;
*** This also enables setting the WXN bit while still identity-mapped, instead of having to do it later in boot.&lt;br /&gt;
* KernelLdr changes:&lt;br /&gt;
** INI1 is now used in-place, if KSystemControl does not have a preferred layout.&lt;br /&gt;
* Initialize0 changes:&lt;br /&gt;
** Initialize0 now receives the initial process binary size from KernelLdr and stores it in a global.&lt;br /&gt;
*** Initialize1 forwards this to the rest of the kernel as with the address.&lt;br /&gt;
** Initialize0 no longer memsets the slab region to zero before calling the ifdef&#039;d out function for the unknown debug region.&lt;br /&gt;
*** This is now done by InitializeSlabHeaps().&lt;br /&gt;
* All exception returns now migitate post-eret speculative execution.&lt;br /&gt;
** All &amp;quot;eret&amp;quot; instructions are now &amp;quot;eret; dsb nsh; isb;&amp;quot;&lt;br /&gt;
* KInitialPageAllocator::Allocate(Aligned) now memsets the pages to zero before returning them to the caller.&lt;br /&gt;
** Correspondingly, KInitialPageTable no longer memsets those pages to zero after allocating them.&lt;br /&gt;
* KInitialProcessReader::CreateProcessParameter now ands sizes with 0x1FFFFF000 before overflow checking.&lt;br /&gt;
** This may actually just be compiler-garbage due to the types being u32-cast-to-higher-width?&lt;br /&gt;
* CreateAndStartInitialProcesses changes:&lt;br /&gt;
** A difference check is now an != when allocating page group.&lt;br /&gt;
** Segment loading/uncompressing has now been refactored:&lt;br /&gt;
*** The entire page group is no longer mapped while loading the segments.&lt;br /&gt;
*** KInitialProcessReader::Load is now responsible; it now takes the page group as argument, clears bss (using linear map), and then calls a helper to load each segment.&lt;br /&gt;
**** This helper creates a page group for just the pages relevant to the segment, copies the data (using linear map), and then if compressed maps the page group, uncompresses, and unmaps.&lt;br /&gt;
* KMemoryRegionType had a number of large changes:&lt;br /&gt;
** A new memory type is now inserted after the SecureAppletMemory region (id is 0xC200028E).&lt;br /&gt;
** Low 0x2 ID derivations changed to accommodate this.&lt;br /&gt;
** As a knock-on effect(?) type IDs for pool partitions changed substantially (likely due to derivation changes elsewhere).&lt;br /&gt;
* New KProcess field (&amp;quot;has application system resource&amp;quot;).&lt;br /&gt;
** This is set to 1 when initializing a KProcess with CreateProcessFlag_IsApplication and system_resource_num_pages == 0.&lt;br /&gt;
** When this is true, svc::GetInfo() always returns 0 for InfoType_SystemResourceSizeTotal and InfoType_SystemResourceSizeUsed.&lt;br /&gt;
*** This also modifies the calculations for various SystemResourceSize calculations.&lt;br /&gt;
*** MapPhysicalMemory() and UnmapPhysicalMemory() will also now return svc::ResultInvalidState().&lt;br /&gt;
* The KProcess::Initialize() overload used by initial processes now supports system_resource_num_pages != 0 (and allocates a system resource in this case).&lt;br /&gt;
** NOTE: KInitialProcessReader::CreateProcessParameter still hardcodes param-&amp;gt;system_resource_num_pages = 0 for all KIPs.&lt;br /&gt;
* Changes to KPageTable(Base) around KMemoryState:&lt;br /&gt;
** There is no longer a bijective mapping between svc::MemoryState and kern::KMemoryState.&lt;br /&gt;
** In particular, KMemoryState_Io has been split into two memory states:&lt;br /&gt;
*** KMemoryState_Io(Register) no longer has bit 13 (0x2000) set (new value is 0x180001).&lt;br /&gt;
*** For memory mapped with SvcMapIoRegion called with svc::MemoryMapping_Memory, KMemoryState_Io(Memory) retains that bit set (value is 0x182001).&lt;br /&gt;
*** KPageTableBase functions dealing with Io mappings now take in MemoryState arguments, and/or MemoryMapping arguments (for the IoRegion functions).&lt;br /&gt;
** KMemoryState_ThreadLocal no longer has bit 13 (0x2000) set (new value is 0x400000C).&lt;br /&gt;
** KMemoryState_Kernel no longer has bit 13 (0x2000) set (new value is 0x13).&lt;br /&gt;
** KMemoryState_Static no longer has bit 13 (0x2000) set (new value is 0x40002).&lt;br /&gt;
** KMemoryState_Insecure now supports FlagCanQueryPhysical (new value is 0x55C3817).&lt;br /&gt;
** To accommodate this, KPageTableBase::QueryMapping/Contains/GetRegionAddress/GetRegionSize now take an svc::MemoryState (u8) instead of the full KMemoryState.&lt;br /&gt;
*** In a (presumably) happy accident, this produces much, much better assembly for the switch statement.&lt;br /&gt;
** KPageTableBase::CheckMemoryState was made ALWAYS_INLINE and now calls an impl-func which takes KMemoryBlock * as argument.&lt;br /&gt;
* KPageTableBase::MapPageGroup no longer sets the io bit in page properties.&lt;br /&gt;
** This is the overload used by process creation.&lt;br /&gt;
* KMemoryBlockManager::UpdateIfMatch now takes set_disable_attr, clear_disable_attr.&lt;br /&gt;
** KPageTableBase::MapPhysicalMemory passes true for set_disable_attr if the address is exactly the start of the alias region.&lt;br /&gt;
* KPageTableBase::UnmapPhysicalMemory now passes clear_disable_attr = 1 to KMemoryManager::Update if the address is exactly the start of the alias region.&lt;br /&gt;
* KProcessPageTable::Initialize no longer has an unused truncated-process-id argument.&lt;br /&gt;
* Changes to KPageTable(Base) mapping for first-reference:&lt;br /&gt;
** KPageTable::Operate is no longer allowed to take MapFirst as operation.&lt;br /&gt;
** KPageTable::MapContiguousWithBaseAttribute no longer supports not_first argument, always calls OpenAdditionalReference.&lt;br /&gt;
** KPageTable::OperateOnPageGroup is now allowed to take MapFirst as operation, and MapWithPageGroup can now call OpenFirst or OpenAdditional for page group references.&lt;br /&gt;
** KPageTableBase::AllocatePageGroupAndOperate now passes MapFirst.&lt;br /&gt;
* Miscellaneous page table changes:&lt;br /&gt;
** KSupervisorPageTable::Initialize now checks that the WXN bit is set in sctlr_el1 instead of setting it.&lt;br /&gt;
** KPageTable::Finalize now calls a second OnFinalize() stub after NoteUpdated().&lt;br /&gt;
* KPageTableBase::MapStatic alignment checks were loosened/changed.&lt;br /&gt;
* New KMemoryAttribute bit 0x10 (&amp;quot;PermissionLocked&amp;quot;).&lt;br /&gt;
** This can be set via SvcSetMemoryAttribute.&lt;br /&gt;
*** NOTE: Once set, this bit is irrevocable and can never be unset.&lt;br /&gt;
**** This is to enable relro (read only relocations).&lt;br /&gt;
*** This requires a new KMemoryStateFlag (bit 27) &amp;quot;FlagCanPermissionLock&amp;quot;, which is set only on CodeData and AliasCodeData.&lt;br /&gt;
** KPageTable::SetMemoryAttribute now calls a new KMemoryBlockManager::UpdateAttributes function specifically for updating the attributes.&lt;br /&gt;
** This bit is allowed to be set when unmapped CodeMemory (as it can be set on (Alias)CodeData).&lt;br /&gt;
* HandleException now uses UserspaceAccess functions to retrieve the instruction when EsrEc is Unknown, IllegalState, Bkpt, or Brk.&lt;br /&gt;
* InvalidateProcessDataCache now special-cases being called on the current process, with a simpler (new) KPageTableBase function.&lt;br /&gt;
* Changes around signaling/thread termination.&lt;br /&gt;
** KThread::BeginTerminate no longer calls NotifyAvailable on the thread.&lt;br /&gt;
** KThread::DoWorkerTask now acquires the scheduler lock and calls NotifyAvailable on the thread.&lt;br /&gt;
** KThread and KProcess exit now use separate KWorkerTaskManagers (0 = Thread, 1 = Process).&lt;br /&gt;
*** Main() now initializes the two KWorkerTaskManagers, and now aborts if their priorities (both constant 11) are zero.&lt;br /&gt;
* KSleepManager&#039;s no longer saves and restores tcr_el1 when saving/restoring system registers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12497</id>
		<title>17.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12497"/>
		<updated>2023-10-11T04:00:12Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 17.0.0 system update was released on October 11, 2023 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* 	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, controller, error, playerSelect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* nifm: Service access: added ifcfg, nettc:nd, nettc:nu, removed bsdcfg.&lt;br /&gt;
* bsdsocket: Service server access: added ifcfg.&lt;br /&gt;
* audio: Service access: removed set:fd.&lt;br /&gt;
* wlan: Name updated: wlan -&amp;gt; wlan.autogen.&lt;br /&gt;
* ldn: Service access: added ifcfg, removed bsdcfg.&lt;br /&gt;
* pcie: Service access: added i2c.&lt;br /&gt;
* account: Service access: added caps:dc.&lt;br /&gt;
* ns: Service access: added hid.&lt;br /&gt;
* npns: Service access: added time:u.&lt;br /&gt;
* migration: Fac.FsAccessFlag updated: set bitmask 0x0000000200001000 (ImageManager, SaveDataTransferVersion2).&lt;br /&gt;
* qlaunch: Service access: added htcs:sys.&lt;br /&gt;
* controller: Service access: added htcs:sys.&lt;br /&gt;
* error: Service access: added htcs:sys.&lt;br /&gt;
* playerSelect: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletWeb: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletShop: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletOff: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletLns: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletAuth: Service access: added htcs:sys.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* error applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/Error.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::fgm::sf::IDebugger&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::account::nas::IDeviceHistoryRequest&lt;br /&gt;
** nn::hshl::IBridgeSession&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
*** Added command 200 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 205 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 210 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 220 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 221 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command 300 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ICommonStateGetter&lt;br /&gt;
*** Added command 600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 910 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 52 - inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ILibraryAppletSelfAccessor&lt;br /&gt;
*** Added command 160 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::apm::ISystemManager&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::arp::detail::IReader&lt;br /&gt;
*** Changed command 2 - outbytes: 0x1 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** nn::arp::detail::IUpdater&lt;br /&gt;
*** Changed command 1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::audio::detail::IAudioDevice&lt;br /&gt;
*** Added command 15 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 16 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
*** Added command 17 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 18 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::audio::detail::IAudioSnoopManager&lt;br /&gt;
*** Removed command 1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Added command 19 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 20 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Removed command 27 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 16 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 17 - buffers: [0x5], inbytes: 0x8, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 18 - buffers: [0x5, 0x6, 0x6, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 19 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 20 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 21 - buffers: [0x5, 0x6], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 22 - buffers: [0x5, 0x6, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 23 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 50 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 51 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 52 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 53 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 54 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 55 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 56 - buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 57 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 58 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 100 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 120 - buffer_entry_sizes: [0x20, 0x0], buffers: [0x6, 0x21], inbytes: 0x18, outbytes: 0x8&lt;br /&gt;
*** Added command 130 - buffers: [0x6], inbytes: 0x20, outbytes: 0x8&lt;br /&gt;
*** Added command 140 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 150 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Changed command 50000 - buffers: [0x6, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x18, outbytes: 0x8)&lt;br /&gt;
** nn::capsrv::sf::IAlbumApplicationService&lt;br /&gt;
*** Added command 145 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 146 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x30, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 147 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
** nn::capsrv::sf::IDecoderControlService&lt;br /&gt;
*** Added command 4001 - buffers: [0x46, 0x5], inbytes: 0x28, outbytes: 0x8&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** nn::erpt::sf::IContext&lt;br /&gt;
*** Changed command 10 - inbytes: 0x8 -&amp;gt; 0xC (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0)&lt;br /&gt;
*** Added command 12 - buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command 212 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Changed command 1006 - buffer_entry_sizes: [0x48, 0x10] -&amp;gt; [0x50, 0x10] (final state: buffer_entry_sizes: [0x50, 0x10], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 1023 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1024 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Added command 1025 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1026 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1027 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Removed command 2002 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2003 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x710007990C&#039;] -&amp;gt; [&#039;0x710007AF24&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007AF24&#039;])&lt;br /&gt;
** nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0xC&lt;br /&gt;
*** Added command 117 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 221 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 618 - buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - buffer_entry_sizes: [0x124, 0x301] -&amp;gt; [0x301, 0x0], buffers: [0x1A, 0x19] -&amp;gt; [0x19, 0x6] (final state: buffer_entry_sizes: [0x301, 0x0], buffers: [0x19, 0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair&lt;br /&gt;
*** Changed command 110 - buffers: [0x5] -&amp;gt; [0x5, 0x5], inbytes: 0x28 -&amp;gt; 0x18 (final state: buffers: [0x5, 0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
*** Added command 63 - buffer_entry_sizes: [0x200, 0x0], buffers: [0x19, 0x5], inbytes: 0x2, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
*** Removed command 67 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** nn::gpio::IPadSession&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::grcsrv::IContinuousRecorder&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 217 - inbytes: 0x10, inhandles: [1], outbytes: 0x8&lt;br /&gt;
*** Added command 351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 213 - inbytes: 0x20, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 214 - buffer_entry_sizes: [0x4, 0x10], buffers: [0x9, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 311 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 312 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 1004 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command 1320 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 1321 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hshl::IManager&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::hshl::IBridgeSession&#039;]&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** nn::hshl::ISetterManager&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::migration::savedata::IClient&lt;br /&gt;
*** Added command 304 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::savedata::IServer&lt;br /&gt;
*** Added command 3 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::user::IService&lt;br /&gt;
*** Added command 1110 - buffer_entry_sizes: [0x100, 0x8], buffers: [0x19, 0x5], inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::migration::savedata::IServer&#039;]&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForWebBrowser&lt;br /&gt;
*** Added command 100 - buffers: [0x5, 0x5, 0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command 26 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Added command 30 - inbytes: 0x11, outbytes: 0x8&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Added command 45 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Added command 142 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 143 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 144 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3001 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** nn::nim::detail::IShopServiceAccessServerInterface&lt;br /&gt;
*** Added command 5 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::nim::detail::IShopServiceAccessServer&#039;], pid: True&lt;br /&gt;
** nn::npns::INpnsSystem&lt;br /&gt;
*** Added command 35 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 36 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 40 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 41 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 42 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 43 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 44 - buffer_entry_sizes: [0x10], buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 50 - buffers: [0x9, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Removed command 84 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2521 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 2523 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
*** Added command 3100 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 3101 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 3102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
*** Added command 10000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IOlscServiceForSystemService&#039;]&lt;br /&gt;
** nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
*** Removed command 600 - buffer_entry_sizes: [0x4B8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 610 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 611 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 612 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 900 - buffers: [0x45], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::pdm::detail::INotifyService&lt;br /&gt;
*** Changed command 0 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::pinmux::ISession&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Added command 107 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** nn::psc::sf::IPmControl&lt;br /&gt;
*** Added command 7 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::psm::IPsmServer&lt;br /&gt;
*** Changed command 17 - outbytes: 0x40 -&amp;gt; 0x54 (final state: inbytes: 0x0, outbytes: 0x54)&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 221 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 222 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
*** Added command 35 - buffers: [0x21, 0x22], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** nn::spsm::detail::IPowerStateInterface&lt;br /&gt;
*** Added command 12 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 13 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 14 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::ts::server::IMeasurementServer&lt;br /&gt;
*** Removed command 0 - inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
*** Removed command 1 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** nn::ts::server::ISession&lt;br /&gt;
*** Added command 5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::uart::IManager&lt;br /&gt;
*** Removed command 0 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 3 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 4 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 5 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 7 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 8 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 9 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 10 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Changed command 19 - inbytes: 0x4 -&amp;gt; 0x1 (final state: inbytes: 0x1, outbytes: 0x0)&lt;br /&gt;
*** Removed command 20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 22 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
*** Changed command 94 - buffer_entry_sizes: [0x20] -&amp;gt; [0x28] (final state: buffer_entry_sizes: [0x28], buffers: [0xA], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 200 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 201 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 202 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 203 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_10 (previously master_key_0f). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
[[Package2|INI1]] changes:&lt;br /&gt;
* BootImagePackage: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageExFat: &lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
* BootImagePackageExFatSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
&lt;br /&gt;
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]].&lt;br /&gt;
&lt;br /&gt;
==== Kernel ====&lt;br /&gt;
* Compiler/libc changes:&lt;br /&gt;
** The kernel is now linked using RELR for relocations instead of RELA (see compiler support in lld for .relr.dyn).&lt;br /&gt;
** This greatly reduces the relocations segment size; it has decreased from 0x3A50 bytes in 16.0.0 to 0x90 in 17.0.0.&lt;br /&gt;
** Many minor optimization changes, e.g. mul+add -&amp;gt; madd, madd -&amp;gt; smaddl/umaddl, (a + b - 1) &amp;gt;&amp;gt; 36 is now (a + b) &amp;gt; 0x1000000000, various reordering.&lt;br /&gt;
* crt0 changes:&lt;br /&gt;
** crt0 is no longer located at _start, instead _start is `b crt0` followed by 0x7FC of zeroes.&lt;br /&gt;
** crt0 is now located at the start of .rodata.&lt;br /&gt;
*** The crt0 page is now identity-mapped R-X in .rodata instead of RWX at start-of-text.&lt;br /&gt;
** Many system registers which were previously set from KInitArguments are now set using a register constants table in the crt0 .rodata segment.&lt;br /&gt;
*** These are ttbr0_el1, ttbr1_el1, tcr_el1, mair_el1, and sctlr_el1.&lt;br /&gt;
*** This table is initially zeroes, and is initialized to the correct values by KernelLdr before returning to Kernel/setting permissions.&lt;br /&gt;
** Kernel Map now stores offsets relative to itself rather than relative to _start.&lt;br /&gt;
*** Kernel map also now stores an additional offset (to the &amp;quot;register constants&amp;quot;).&lt;br /&gt;
** The big idea here is to make the crt0 page no longer executable after init.&lt;br /&gt;
*** This mitigates the ability to execute gadgets (via ROP/etc) to set TTBR1_EL1 (and other important registers) to user-controlled values.&lt;br /&gt;
**** The *only* ttbr1_el1 gadget in all of kernel now sets it to the constant in .rodata, which can&#039;t be modified after KernelLdr finishes.&lt;br /&gt;
*** This also enables setting the WXN bit while still identity-mapped, instead of having to do it later in boot.&lt;br /&gt;
* KernelLdr changes:&lt;br /&gt;
** INI1 is now used in-place, if KSystemControl does not have a preferred layout.&lt;br /&gt;
* Initialize0 changes:&lt;br /&gt;
** Initialize0 now receives the initial process binary size from KernelLdr and stores it in a global.&lt;br /&gt;
*** Initialize1 forwards this to the rest of the kernel as with the address.&lt;br /&gt;
** Initialize0 no longer memsets the slab region to zero before calling the ifdef&#039;d out function for the unknown debug region.&lt;br /&gt;
*** This is now done by InitializeSlabHeaps().&lt;br /&gt;
* All exception returns now migitate post-eret speculative execution.&lt;br /&gt;
** All &amp;quot;eret&amp;quot; instructions are now &amp;quot;eret; dsb nsh; isb;&amp;quot;&lt;br /&gt;
* KInitialPageAllocator::Allocate(Aligned) now memsets the pages to zero before returning them to the caller.&lt;br /&gt;
** Correspondingly, KInitialPageTable no longer memsets those pages to zero after allocating them.&lt;br /&gt;
* KInitialProcessReader::CreateProcessParameter now ands sizes with 0x1FFFFF000 before overflow checking.&lt;br /&gt;
** This may actually just be compiler-garbage due to the types being u32-cast-to-higher-width?&lt;br /&gt;
* CreateAndStartInitialProcesses changes:&lt;br /&gt;
** A difference check is now an != when allocating page group.&lt;br /&gt;
** Segment loading/uncompressing has now been refactored:&lt;br /&gt;
*** The entire page group is no longer mapped while loading the segments.&lt;br /&gt;
*** KInitialProcessReader::Load is now responsible; it now takes the page group as argument, clears bss (using linear map), and then calls a helper to load each segment.&lt;br /&gt;
**** This helper creates a page group for just the pages relevant to the segment, copies the data (using linear map), and then if compressed maps the page group, uncompresses, and unmaps.&lt;br /&gt;
* KMemoryRegionType had a number of large changes:&lt;br /&gt;
** A new memory type is now inserted after the SecureAppletMemory region (id is 0xC200028E).&lt;br /&gt;
** Low 0x2 ID derivations changed to accommodate this.&lt;br /&gt;
** As a knock-on effect(?) type IDs for pool partitions changed substantially (likely due to derivation changes elsewhere).&lt;br /&gt;
* New KProcess field (&amp;quot;has application system resource&amp;quot;).&lt;br /&gt;
** This is set to 1 when initializing a KProcess with CreateProcessFlag_IsApplication and system_resource_num_pages == 0.&lt;br /&gt;
** When this is true, svc::GetInfo() always returns 0 for InfoType_SystemResourceSizeTotal and InfoType_SystemResourceSizeUsed.&lt;br /&gt;
*** This also modifies the calculations for various SystemResourceSize calculations.&lt;br /&gt;
*** MapPhysicalMemory() and UnmapPhysicalMemory() will also now return svc::ResultInvalidState().&lt;br /&gt;
* The KProcess::Initialize() overload used by initial processes now supports system_resource_num_pages != 0 (and allocates a system resource in this case).&lt;br /&gt;
** NOTE: KInitialProcessReader::CreateProcessParameter still hardcodes param-&amp;gt;system_resource_num_pages = 0 for all KIPs.&lt;br /&gt;
* Changes to KPageTable(Base) around KMemoryState:&lt;br /&gt;
** There is no longer a bijective mapping between svc::MemoryState and kern::KMemoryState.&lt;br /&gt;
** In particular, KMemoryState_Io has been split into two memory states:&lt;br /&gt;
*** KMemoryState_Io(Register) no longer has bit 13 (0x2000) set (new value is 0x180001).&lt;br /&gt;
*** For memory mapped with SvcMapIoRegion called with svc::MemoryMapping_Memory, KMemoryState_Io(Memory) retains that bit set (value is 0x182001).&lt;br /&gt;
*** KPageTableBase functions dealing with Io mappings now take in MemoryState arguments, and/or MemoryMapping arguments (for the IoRegion functions).&lt;br /&gt;
** KMemoryState_ThreadLocal no longer has bit 13 (0x2000) set (new value is 0x400000C).&lt;br /&gt;
** KMemoryState_Kernel no longer has bit 13 (0x2000) set (new value is 0x13).&lt;br /&gt;
** KMemoryState_Static no longer has bit 13 (0x2000) set (new value is 0x40002).&lt;br /&gt;
** KMemoryState_Insecure now supports FlagCanQueryPhysical (new value is 0x55C3817).&lt;br /&gt;
** To accommodate this, KPageTableBase::QueryMapping/Contains/GetRegionAddress/GetRegionSize now take an svc::MemoryState (u8) instead of the full KMemoryState.&lt;br /&gt;
*** In a (presumably) happy accident, this produces much, much better assembly for the switch statement.&lt;br /&gt;
** KPageTableBase::CheckMemoryState was made ALWAYS_INLINE and now calls an impl-func which takes KMemoryBlock * as argument.&lt;br /&gt;
* KPageTableBase::MapPageGroup no longer sets the io bit in page properties.&lt;br /&gt;
** This is the overload used by process creation.&lt;br /&gt;
* KMemoryBlockManager::UpdateIfMatch now takes set_disable_attr, clear_disable_attr.&lt;br /&gt;
** KPageTableBase::MapPhysicalMemory passes true for set_disable_attr if the address is exactly the start of the alias region.&lt;br /&gt;
* KPageTableBase::UnmapPhysicalMemory now passes clear_disable_attr = 1 to KMemoryManager::Update if the address is exactly the start of the alias region.&lt;br /&gt;
* KProcessPageTable::Initialize no longer has an unused truncated-process-id argument.&lt;br /&gt;
* Changes to KPageTable(Base) mapping for first-reference:&lt;br /&gt;
** KPageTable::Operate is no longer allowed to take MapFirst as operation.&lt;br /&gt;
** KPageTable::MapContiguousWithBaseAttribute no longer supports not_first argument, always calls OpenAdditionalReference.&lt;br /&gt;
** KPageTable::OperateOnPageGroup is now allowed to take MapFirst as operation, and MapWithPageGroup can now call OpenFirst or OpenAdditional for page group references.&lt;br /&gt;
** KPageTableBase::AllocatePageGroupAndOperate now passes MapFirst.&lt;br /&gt;
* Miscellaneous page table changes:&lt;br /&gt;
** KSupervisorPageTable::Initialize now checks that the WXN bit is set in sctlr_el1 instead of setting it.&lt;br /&gt;
** KPageTable::Finalize now calls a second OnFinalize() stub after NoteUpdated().&lt;br /&gt;
* KPageTableBase::MapStatic alignment checks were loosened/changed.&lt;br /&gt;
* New KMemoryAttribute bit 0x10 (&amp;quot;PermissionLocked&amp;quot;).&lt;br /&gt;
** This can be set via SvcSetMemoryAttribute.&lt;br /&gt;
*** NOTE: Once set, this bit is irrevocable and can never be unset.&lt;br /&gt;
**** This is to enable relro (read only relocations).&lt;br /&gt;
*** This requires a new KMemoryStateFlag (bit 27) &amp;quot;FlagCanPermissionLock&amp;quot;, which is set only on CodeData and AliasCodeData.&lt;br /&gt;
** KPageTable::SetMemoryAttribute now calls a new KMemoryBlockManager::UpdateAttributes function specifically for updating the attributes.&lt;br /&gt;
** This bit is allowed to be set when unmapped CodeMemory (as it can be set on (Alias)CodeData).&lt;br /&gt;
* HandleException now uses UserspaceAccess functions to retrieve the instruction when EsrEc is Unknown, IllegalState, Bkpt, or Brk.&lt;br /&gt;
* InvalidateProcessDataCache now special-cases being called on the current process, with a simpler (new) KPageTableBase function.&lt;br /&gt;
* Changes around signaling/thread termination.&lt;br /&gt;
** KThread::BeginTerminate no longer calls NotifyAvailable on the thread.&lt;br /&gt;
** KThread::DoWorkerTask now acquires the scheduler lock and calls NotifyAvailable on the thread.&lt;br /&gt;
** KThread and KProcess exit now use separate KWorkerTaskManagers (0 = Thread, 1 = Process).&lt;br /&gt;
*** Main() now initializes the two KWorkerTaskManagers, and now aborts if their priorities (both constant 11) are zero.&lt;br /&gt;
* KSleepManager&#039;s no longer saves and restores tcr_el1 when saving/restoring system registers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12494</id>
		<title>17.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=17.0.0&amp;diff=12494"/>
		<updated>2023-10-11T01:13:11Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add 16 -&amp;gt; 17 ipc diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 17.0.0 system update was released on October 11, 2023 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* 	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* The following titles were updated:&lt;br /&gt;
** Sysmodules: usb, htc.stub, boot2.ProdBoot, settings, Bus, bluetooth, bcat, friends, nifm, ptm, bsdsocket, hid, audio, LogManager.Prod, wlan, ldn, nvservices, pcv, capmtp, nvnflinger, pcie, account, ns, nfc, psc, capsrv, am, ssl, nim, btm, erpt, vi, pctl, npns, eupld, glue, eclct, es, fatal, creport, ro, sdb, grc, migration, jpegdec, safemode, olsc, ngct, jit, pgl, omm, eth, ngc.&lt;br /&gt;
** SystemData (non-sysver): CertStore, ErrorMessage, MiiModel, BrowserDll, Help, NgWord, SsidList, TimeZoneBinary, FontNintendoExtension, FontStandard, FontKorean, FontChineseTraditional, FontChineseSimple, FirmwareDebugSettings, BootImagePackage, BootImagePackageSafe, BootImagePackageExFat, FatalMessage, PlatformConfigIcosa, PlatformConfigCopper, PlatformConfigHoag, ControllerFirmware, NgWord2, BootImagePackageExFatSafe, PlatformConfigIcosaMariko, ContentActionTable, NgWordT, PlatformConfigAula, AulaDockFirmware.&lt;br /&gt;
** Applets: qlaunch, controller, error, playerSelect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* nifm: Service access: added ifcfg, nettc:nd, nettc:nu, removed bsdcfg.&lt;br /&gt;
* bsdsocket: Service server access: added ifcfg.&lt;br /&gt;
* audio: Service access: removed set:fd.&lt;br /&gt;
* wlan: Name updated: wlan -&amp;gt; wlan.autogen.&lt;br /&gt;
* ldn: Service access: added ifcfg, removed bsdcfg.&lt;br /&gt;
* pcie: Service access: added i2c.&lt;br /&gt;
* account: Service access: added caps:dc.&lt;br /&gt;
* ns: Service access: added hid.&lt;br /&gt;
* npns: Service access: added time:u.&lt;br /&gt;
* migration: Fac.FsAccessFlag updated: set bitmask 0x0000000200001000 (ImageManager, SaveDataTransferVersion2).&lt;br /&gt;
* qlaunch: Service access: added htcs:sys.&lt;br /&gt;
* controller: Service access: added htcs:sys.&lt;br /&gt;
* error: Service access: added htcs:sys.&lt;br /&gt;
* playerSelect: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletWeb: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletShop: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletOff: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletLns: Service access: added htcs:sys.&lt;br /&gt;
* LibAppletAuth: Service access: added htcs:sys.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/netfront/&amp;quot;: Various data updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* NgWord: updated&lt;br /&gt;
* [[System_Version_Title|SystemVersion]]: All files updated.&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* [[System_Settings|FirmwareDebugSettings/PlatformConfigAula]]: All files updated.&lt;br /&gt;
* NgWord2: updated&lt;br /&gt;
* RebootlessSystemUpdateVersion: All files updated.&lt;br /&gt;
* NgWordT: All files updated.&lt;br /&gt;
* qlaunch applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* controller applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* error applet: &amp;quot;/lyt/common.szs&amp;quot; updated, &amp;quot;/lyt/Error.szs&amp;quot; updated, &amp;quot;/message/KRko/common.msbt.szs&amp;quot; updated, &amp;quot;/message/Ocean.msbp.szs&amp;quot; updated&lt;br /&gt;
* playerSelect applet:&lt;br /&gt;
** &amp;quot;/lyt/&amp;quot;: Various data updated.&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: Various data updated.&lt;br /&gt;
* [[Internet_Browser|LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth]]: All files updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::fgm::sf::IDebugger&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::account::nas::IDeviceHistoryRequest&lt;br /&gt;
** nn::hshl::IBridgeSession&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 213 - inbytes: 0x4, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 214 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
*** Added command 215 - inbytes: 0x14, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IOAuthProcedureForUserRegistration&#039;]&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 170 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::account::nas::IDeviceHistoryRequest&#039;]&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForUserRegistration&lt;br /&gt;
*** Added command 200 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 205 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 210 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 220 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 221 - buffers: [0x5], inbytes: 0x21, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command 300 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ICommonStateGetter&lt;br /&gt;
*** Added command 600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 910 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 52 - inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** nn::am::service::ILibraryAppletSelfAccessor&lt;br /&gt;
*** Added command 160 - inbytes: 0x0, outbytes: 0x8&lt;br /&gt;
** nn::apm::ISystemManager&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::arp::detail::IReader&lt;br /&gt;
*** Changed command 2 - outbytes: 0x1 -&amp;gt; 0x10 (final state: inbytes: 0x8, outbytes: 0x10)&lt;br /&gt;
** nn::arp::detail::IUpdater&lt;br /&gt;
*** Changed command 1 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::audio::detail::IAudioDevice&lt;br /&gt;
*** Added command 15 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 16 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
*** Added command 17 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 18 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::audio::detail::IAudioSnoopManager&lt;br /&gt;
*** Removed command 1 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Added command 19 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 20 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Removed command 27 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 16 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 17 - buffers: [0x5], inbytes: 0x8, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 18 - buffers: [0x5, 0x6, 0x6, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 19 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 20 - buffers: [0x5, 0x6], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 21 - buffers: [0x5, 0x6], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 22 - buffers: [0x5, 0x6, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 23 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 50 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 51 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 52 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 53 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 54 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 55 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 56 - buffers: [0x5, 0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 57 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 58 - buffers: [0x5], inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 100 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 120 - buffer_entry_sizes: [0x20, 0x0], buffers: [0x6, 0x21], inbytes: 0x18, outbytes: 0x8&lt;br /&gt;
*** Added command 130 - buffers: [0x6], inbytes: 0x20, outbytes: 0x8&lt;br /&gt;
*** Added command 140 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 150 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Changed command 50000 - buffers: [0x6, 0x6] -&amp;gt; [0x6] (final state: buffers: [0x6], inbytes: 0x18, outbytes: 0x8)&lt;br /&gt;
** nn::capsrv::sf::IAlbumApplicationService&lt;br /&gt;
*** Added command 145 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 146 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x30, outbytes: 0x8, pid: True&lt;br /&gt;
*** Added command 147 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x20, outbytes: 0x8, pid: True&lt;br /&gt;
** nn::capsrv::sf::IDecoderControlService&lt;br /&gt;
*** Added command 4001 - buffers: [0x46, 0x5], inbytes: 0x28, outbytes: 0x8&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
** nn::erpt::sf::IContext&lt;br /&gt;
*** Changed command 10 - inbytes: 0x8 -&amp;gt; 0xC (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0)&lt;br /&gt;
*** Added command 12 - buffers: [0x5, 0x5, 0x5], inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command 212 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Changed command 1006 - buffer_entry_sizes: [0x48, 0x10] -&amp;gt; [0x50, 0x10] (final state: buffer_entry_sizes: [0x50, 0x10], buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 1023 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1024 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Added command 1025 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1026 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x8, outbytes: 0x4&lt;br /&gt;
*** Added command 1027 - buffer_entry_sizes: [0x10, 0x0], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Removed command 2002 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2003 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x710007990C&#039;] -&amp;gt; [&#039;0x710007AF24&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007AF24&#039;])&lt;br /&gt;
** nn::fssrv::sf::IDeviceOperator&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0xC&lt;br /&gt;
*** Added command 117 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 221 - buffers: [0x6], inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 618 - buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - buffer_entry_sizes: [0x124, 0x301] -&amp;gt; [0x301, 0x0], buffers: [0x1A, 0x19] -&amp;gt; [0x19, 0x6] (final state: buffer_entry_sizes: [0x301, 0x0], buffers: [0x19, 0x6], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerForSaveDataRepair&lt;br /&gt;
*** Changed command 110 - buffers: [0x5] -&amp;gt; [0x5, 0x5], inbytes: 0x28 -&amp;gt; 0x18 (final state: buffers: [0x5, 0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;])&lt;br /&gt;
** nn::fssrv::sf::ISaveDataTransferManagerWithDivision&lt;br /&gt;
*** Added command 63 - buffer_entry_sizes: [0x200, 0x0], buffers: [0x19, 0x5], inbytes: 0x2, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
*** Removed command 67 - buffers: [0x5], inbytes: 0x18, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::ISaveDataDivisionImporter&#039;]&lt;br /&gt;
** nn::gpio::IPadSession&lt;br /&gt;
*** Removed command 6 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::grcsrv::IContinuousRecorder&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 217 - inbytes: 0x10, inhandles: [1], outbytes: 0x8&lt;br /&gt;
*** Added command 351 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 352 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 213 - inbytes: 0x20, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 214 - buffer_entry_sizes: [0x4, 0x10], buffers: [0x9, 0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 311 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 312 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 1004 - inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command 1320 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 1321 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hshl::IManager&lt;br /&gt;
*** Added command 9 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::hshl::IBridgeSession&#039;]&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** nn::hshl::ISetterManager&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::migration::savedata::IClient&lt;br /&gt;
*** Added command 304 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::savedata::IServer&lt;br /&gt;
*** Added command 3 - buffer_entry_sizes: [0x8], buffers: [0x6], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::migration::user::IService&lt;br /&gt;
*** Added command 1110 - buffer_entry_sizes: [0x100, 0x8], buffers: [0x19, 0x5], inbytes: 0x18, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::migration::savedata::IServer&#039;]&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForWebBrowser&lt;br /&gt;
*** Added command 100 - buffers: [0x5, 0x5, 0x6], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command 26 - inbytes: 0x10, outbytes: 0x1&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Added command 30 - inbytes: 0x11, outbytes: 0x8&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Added command 45 - inbytes: 0x8, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Added command 142 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 143 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 144 - inbytes: 0x18, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3000 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
*** Added command 3001 - inbytes: 0x8, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;]&lt;br /&gt;
** nn::nim::detail::IShopServiceAccessServerInterface&lt;br /&gt;
*** Added command 5 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: [&#039;nn::nim::detail::IShopServiceAccessServer&#039;], pid: True&lt;br /&gt;
** nn::npns::INpnsSystem&lt;br /&gt;
*** Added command 35 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 36 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 40 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 41 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 42 - buffers: [0x9], inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 43 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
*** Added command 44 - buffer_entry_sizes: [0x10], buffers: [0x9], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 50 - buffers: [0x9, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Removed command 84 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 2521 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Added command 2523 - inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
*** Added command 3100 - inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Added command 3101 - inbytes: 0x0, outbytes: 0x0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 3102 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::olsc::srv::IOlscServiceForSystemService&lt;br /&gt;
*** Added command 10000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::olsc::srv::IOlscServiceForSystemService&#039;]&lt;br /&gt;
** nn::omm::srv::IDisplayLayerControl&lt;br /&gt;
*** Removed command 600 - buffer_entry_sizes: [0x4B8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 610 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 611 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 612 - buffer_entry_sizes: [0x4C8], buffers: [0x15], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 900 - buffers: [0x45], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::pdm::detail::INotifyService&lt;br /&gt;
*** Changed command 0 - inbytes: 0x10 -&amp;gt; 0x18 (final state: inbytes: 0x18, outbytes: 0x0)&lt;br /&gt;
** nn::pinmux::ISession&lt;br /&gt;
*** Added command 3 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 4 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 5 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 7 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 8 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 9 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 10 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Added command 107 - inbytes: 0x18, outbytes: 0x0&lt;br /&gt;
** nn::psc::sf::IPmControl&lt;br /&gt;
*** Added command 7 - inbytes: 0xC, outbytes: 0x0&lt;br /&gt;
** nn::psm::IPsmServer&lt;br /&gt;
*** Changed command 17 - outbytes: 0x40 -&amp;gt; 0x54 (final state: inbytes: 0x0, outbytes: 0x54)&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 221 - inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
*** Added command 222 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
*** Added command 35 - buffers: [0x21, 0x22], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** nn::spsm::detail::IPowerStateInterface&lt;br /&gt;
*** Added command 12 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 13 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 14 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::ts::server::IMeasurementServer&lt;br /&gt;
*** Removed command 0 - inbytes: 0x1, outbytes: 0x8&lt;br /&gt;
*** Removed command 1 - inbytes: 0x1, outbytes: 0x4&lt;br /&gt;
** nn::ts::server::ISession&lt;br /&gt;
*** Added command 5 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 6 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 7 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::uart::IManager&lt;br /&gt;
*** Removed command 0 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x1&lt;br /&gt;
*** Removed command 2 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 3 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 4 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 5 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 7 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 8 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 9 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
*** Removed command 10 - inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Changed command 19 - inbytes: 0x4 -&amp;gt; 0x1 (final state: inbytes: 0x1, outbytes: 0x0)&lt;br /&gt;
*** Removed command 20 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 21 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Removed command 22 - inbytes: 0x1, outbytes: 0x0&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
*** Changed command 94 - buffer_entry_sizes: [0x20] -&amp;gt; [0x28] (final state: buffer_entry_sizes: [0x28], buffers: [0xA], inbytes: 0x0, outbytes: 0x4)&lt;br /&gt;
*** Added command 200 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 201 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 202 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
*** Added command 203 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
RomFs changes: all files updated.&lt;br /&gt;
&lt;br /&gt;
Using updated master-key: master_key_10 (previously master_key_0f). See [[NCA]] for the KeyGeneration listing.&lt;br /&gt;
&lt;br /&gt;
[[Package2|INI1]] changes:&lt;br /&gt;
* BootImagePackage: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
* BootImagePackageExFat: &lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
* BootImagePackageExFatSafe: &lt;br /&gt;
** 0100000000000003 (ProcessMana): MainThreadStackSize updated: 0x1000 -&amp;gt; 0x3000.&lt;br /&gt;
** 0100000000000005 (boot): SVC access: added CreateEvent.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=16.0.3&amp;diff=12353</id>
		<title>16.0.3</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=16.0.3&amp;diff=12353"/>
		<updated>2023-05-08T22:37:21Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* System Titles */ Add FS diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 16.0.3 system update was released on May 9, 2023 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* 	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
Only package2 was updated. The kernel was not updated. All KIPs other than FS were only re-built (only difference is GNU build hash).&lt;br /&gt;
&lt;br /&gt;
====FS====&lt;br /&gt;
* Mutex lock and unlock were added to some SaveData functions which were previously missing them.&lt;br /&gt;
** In particular, this is nn::fs::save::SaveDataFileSystemCore::HasOpenedFiles and nn::fs::save::SaveDataFileSystemCore::HasOpenedEntries.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-05-09_00-05-11&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=12346</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=12346"/>
		<updated>2023-04-30T21:57:56Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Move this to the sensible place.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu. Video capture is not supported.&lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
**** KPageTable::MemoryRange now tracks whether the range is reference counted, and Close() only closes the pages if they are.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
====Loader====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[Bluetooth_Driver_services|bluetooth]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[WLAN_services|wlan]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[NS_Services|ns]]===&lt;br /&gt;
Besides the various IPC changes, vulnerable RNG usage was [[Switch_System_Flaws|fixed]] to properly use secure RNG where needed.&lt;br /&gt;
&lt;br /&gt;
===[[RO_services|ro]]===&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===nnSdk===&lt;br /&gt;
&amp;lt;code&amp;gt;nn::diag::detail::VAbortImpl&amp;lt;/code&amp;gt; when handling the retaddr for storing elsewhere, now uses instruction [https://developer.arm.com/documentation/dui0801/g/A64-General-Instructions/XPACD--XPACI--XPACLRI xpaclri]. PAC instructions are NOPs on ARM hardware which doesn&#039;t support it, which includes current NX consoles.&lt;br /&gt;
&lt;br /&gt;
This is likely due to a LLVM [https://reviews.llvm.org/D84502 patch] where xpaclri is now always emitted and not related to actual Armv8.3 hardware.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Removed command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Removed command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Removed command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Removed command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Removed command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Removed command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Removed command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=12345</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=12345"/>
		<updated>2023-04-30T21:52:09Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Kernel */ Missed this during 14 -&amp;gt; 15 diffing, apparently.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu. Video capture is not supported.&lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KPageTable::MemoryRange now tracks whether the range is reference counted, and Close() only closes the pages if they are.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
====Loader====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[Bluetooth_Driver_services|bluetooth]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[WLAN_services|wlan]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[NS_Services|ns]]===&lt;br /&gt;
Besides the various IPC changes, vulnerable RNG usage was [[Switch_System_Flaws|fixed]] to properly use secure RNG where needed.&lt;br /&gt;
&lt;br /&gt;
===[[RO_services|ro]]===&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===nnSdk===&lt;br /&gt;
&amp;lt;code&amp;gt;nn::diag::detail::VAbortImpl&amp;lt;/code&amp;gt; when handling the retaddr for storing elsewhere, now uses instruction [https://developer.arm.com/documentation/dui0801/g/A64-General-Instructions/XPACD--XPACI--XPACLRI xpaclri]. PAC instructions are NOPs on ARM hardware which doesn&#039;t support it, which includes current NX consoles.&lt;br /&gt;
&lt;br /&gt;
This is likely due to a LLVM [https://reviews.llvm.org/D84502 patch] where xpaclri is now always emitted and not related to actual Armv8.3 hardware.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Removed command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Removed command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Removed command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Removed command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Removed command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Removed command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Removed command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12267</id>
		<title>16.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12267"/>
		<updated>2023-03-08T17:31:59Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Improve IPC diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 16.0.0 system update was released on February 21, 2023 (UTC). This Switch update was released for the following regions: ALL, CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   User nicknames that cannot be used will be replaced with “???” which can be updated from the profile settings. &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* New sysmodule ngc was added (0100000000000050).&lt;br /&gt;
* All sysmodules were updated (excluding stubbed-lbl).&lt;br /&gt;
* Most SystemData were updated, except for: Chinese and Korean dictionaries, Dictionary, AvatarImage, UrlBlackList, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* Most applets were updated, except for: cabinet, controller, netConnect, swkbd, miiEdit, starter, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* [[Boot2|boot2.ProdBoot]] now has access to [[NCM_services|ncm]].&lt;br /&gt;
* [[Friend_services|friends]] no longer has access to [[SPL_services|csrng]].&lt;br /&gt;
* nifm now has htc:nd access.&lt;br /&gt;
* nifm, ldn, ns: pl:u access was replaced with pl:s.&lt;br /&gt;
* ns now has access to ns:am2 and ns:su (for GetService).&lt;br /&gt;
* nim no longer has access to spl: (on older versions this was unused besides service-init).&lt;br /&gt;
* vi now has pl:u access.&lt;br /&gt;
* glue now has hosted-service pl:u access (moved from sdb) and access to svcCreateSharedMemory.&lt;br /&gt;
* fatal had access for the following removed: nvdrv:s, pl:u, vi:s.&lt;br /&gt;
* sdb had access for pl:u (hosted-service) and svcCreateSharedMemory removed.&lt;br /&gt;
* qlaunch, playerSelect, photoViewer, myPage: access to ngc:u was added.&lt;br /&gt;
&lt;br /&gt;
The SafeMode bootpkgs KIP for PCV had &amp;quot;Default CPU Core&amp;quot; changed from 3 to 63.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated and &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; added.&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/UserCssCore0.dat&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/UserCss.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/&amp;quot; added, which contains &amp;quot;BrowserOffscreenDrawer.bnsh&amp;quot;.&lt;br /&gt;
** &amp;quot;/lyt/Browse/Page.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot; The various NROs located under here were updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; and &amp;quot;/legallines.htdocs/index.html&amp;quot; were updated.&lt;br /&gt;
* NgWord: updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnSupIntro/main_Other.jpg&amp;quot;, &amp;quot;/message/EUnl/localNews.msbt.szs&amp;quot;, &amp;quot;/message/revision.txt&amp;quot; updated.&lt;br /&gt;
* Eula: &amp;quot;/KRko/Eula.msbt.szs&amp;quot; and &amp;quot;/revision.txt&amp;quot; updated.&lt;br /&gt;
* FirmwareDebugSettings: [[System_Settings|updated]]&lt;br /&gt;
* NgWord2: updated. Added &amp;quot;/ac_similar_form_nx&amp;quot; and &amp;quot;/table_similar_form_nx&amp;quot;.&lt;br /&gt;
* NgWordT: &amp;quot;/mars_dirty_words_db&amp;quot; updated&lt;br /&gt;
* applets: various UI/message/gfx data updated.&lt;br /&gt;
* web-applets: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; and &amp;quot;/.nrr/modules.nrr&amp;quot; updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::ngc::detail::IService&lt;br /&gt;
** nn::pl::sharedresource::detail::IPlatformSharedResourceManager&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Changed command 152 - buffer_entry_sizes: [0x401] -&amp;gt; [0x801] (final state: buffer_entry_sizes: [0x801], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
*** Added command 910 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Changed command 152 - buffer_entry_sizes: [0x401] -&amp;gt; [0x801] (final state: buffer_entry_sizes: [0x801], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
*** Added command 910 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::account::IAccountServiceForSystemService&lt;br /&gt;
*** Changed command 152 - buffer_entry_sizes: [0x401] -&amp;gt; [0x801] (final state: buffer_entry_sizes: [0x801], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** nn::account::IAccountServiceForSystemServiceWithProfileEditor&lt;br /&gt;
*** Changed command 152 - buffer_entry_sizes: [0x401] -&amp;gt; [0x801] (final state: buffer_entry_sizes: [0x801], buffers: [0x1A], inbytes: 0x0, outbytes: 0x0)&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 161 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 161 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForNintendoAccountLinkage&lt;br /&gt;
*** Added command 200 - buffers: [0x9, 0x9, 0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IApplicationFunctions&lt;br /&gt;
*** Removed command 34 - buffers: [0x5], inbytes: 0x0, outbytes: 0x1&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 51 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 300 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::am::service::IHomeMenuFunctions&lt;br /&gt;
*** Added command 50 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 51 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::aocsrv::detail::IAddOnContentManager&lt;br /&gt;
*** Added command 300 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 301 - buffers: [0x6], inbytes: 0x10, outbytes: 0x0, pid: True&lt;br /&gt;
*** Added command 302 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 13 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 14 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 15 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::codec::detail::IHardwareOpusDecoderManager&lt;br /&gt;
*** Added command 8 - inbytes: 0x10, outbytes: 0x4&lt;br /&gt;
*** Added command 9 - buffer_entry_sizes: [0x118], buffers: [0x19], inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 3 - inbytes: 0x8, outbytes: 0x10&lt;br /&gt;
*** Added command 13 - inbytes: 0x10, outbytes: 0x10&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 7 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 8 - inbytes: 0x4, inhandles: [1], outbytes: 0x0&lt;br /&gt;
** nn::ec::IContentsServiceManager&lt;br /&gt;
*** Added command 1 - buffers: [0x5], inbytes: 0x60, outbytes: 0x0, outhandles: [1], outinterfaces: [None], pid: True&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Changed command 11 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x10, outbytes: 0x4)&lt;br /&gt;
*** Changed command 16 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x10, outbytes: 0x4)&lt;br /&gt;
*** Added command 18 - buffer_entry_sizes: [0x10, 0x0, 0x8], buffers: [0x6, 0x6, 0x6], inbytes: 0x10, outbytes: 0x8&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Removed command 3001 - buffer_entry_sizes: [0x40, 0x248, 0x0], buffers: [0x16, 0x16, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Removed command 3002 - buffer_entry_sizes: [0x248], buffers: [0x16], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::fan::detail::IManager&lt;br /&gt;
*** Added command 1 - inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x7100078D58&#039;] -&amp;gt; [&#039;0x710007990C&#039;] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: [&#039;0x710007990C&#039;])&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 10 - buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Changed command 206 - inbytes: 0x4 -&amp;gt; 0x8 (final state: buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x8, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IStorage&#039;])&lt;br /&gt;
*** Removed command 609 - buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x0, outbytes: 0x10&lt;br /&gt;
*** Changed command 610 - inbytes: 0x0 -&amp;gt; 0x1 (final state: buffer_entry_sizes: [0x301], buffers: [0x19], inbytes: 0x1, outbytes: 0x18)&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - inbytes: 0x8 -&amp;gt; 0x10 (final state: buffer_entry_sizes: [0x124, 0x301], buffers: [0x1A, 0x19], inbytes: 0x10, outbytes: 0x0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 25 - inbytes: 0x1C, outbytes: 0x0&lt;br /&gt;
*** Added command 26 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 3000 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 26 - inbytes: 0x8, outbytes: 0x0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Removed command 1130 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, pid: True&lt;br /&gt;
** nn::ncm::IContentManager&lt;br /&gt;
*** Added command 15 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Changed command 19 - inbytes: 0x10 -&amp;gt; 0x11 (final state: inbytes: 0x11, outbytes: 0x18)&lt;br /&gt;
*** Changed command 20 - inbytes: 0x10 -&amp;gt; 0x11 (final state: inbytes: 0x11, outbytes: 0x18)&lt;br /&gt;
*** Changed command 27 - inbytes: 0x20 -&amp;gt; 0x21 (final state: inbytes: 0x21, outbytes: 0x18)&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Changed command 10 - outbytes: 0x58 -&amp;gt; 0x60 (final state: inbytes: 0x10, outbytes: 0x60)&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0x0 -&amp;gt; 0x1 (final state: buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x1)&lt;br /&gt;
*** Removed command 604 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 611 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
** nn::ns::detail::IDocumentInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0x0 -&amp;gt; 0x1 (final state: buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x1)&lt;br /&gt;
** nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
*** Removed command 14 - buffers: [0x5], inbytes: 0x8, outbytes: 0x1&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Changed command 0 - buffer_entry_sizes: [0x18] -&amp;gt; [0x28] (final state: buffer_entry_sizes: [0x28], buffers: [0x6], inbytes: 0x8, outbytes: 0x4)&lt;br /&gt;
*** Changed command 4 - outbytes: 0x28 -&amp;gt; 0x48 (final state: inbytes: 0x10, outbytes: 0x48)&lt;br /&gt;
*** Changed command 5 - outbytes: 0x28 -&amp;gt; 0x48 (final state: inbytes: 0x20, outbytes: 0x48)&lt;br /&gt;
*** Changed command 10 - buffer_entry_sizes: [0x40] -&amp;gt; [0x38] (final state: buffer_entry_sizes: [0x38], buffers: [0x6], inbytes: 0x4, outbytes: 0x4)&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Removed command 0 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Removed command 1 - inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
*** Removed command 2 - inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
*** Removed command 3 - inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
*** Removed command 4 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]&lt;br /&gt;
*** Removed command 5 - buffer_entry_sizes: [0x4, 0x4, 0x4], buffers: [0x6, 0x6, 0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
*** Removed command 6 - buffer_entry_sizes: [0x4, 0x4, 0x4], buffers: [0x6, 0x6, 0x6], inbytes: 0x8, outbytes: 0x8&lt;br /&gt;
** nn::ssl::sf::ISslConnection&lt;br /&gt;
*** Added command 28 - buffers: [0x5], inbytes: 0x4, outbytes: 0x4&lt;br /&gt;
*** Added command 29 - buffers: [0x6], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 30 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
*** Added command 31 - buffers: [0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 32 - inbytes: 0x0, outbytes: 0x2&lt;br /&gt;
*** Added command 33 - buffers: [0x6, 0x5, 0x5], inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 34 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 35 - inbytes: 0x0, outbytes: 0x4&lt;br /&gt;
** nn::ssl::sf::ISslContext&lt;br /&gt;
*** Added command 12 - buffers: [0x5, 0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
*** Added command 13 - buffers: [0x6, 0x6, 0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
*** Added command 12 - buffers: [0x5, 0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
*** Added command 13 - buffers: [0x6, 0x6, 0x5], inbytes: 0x4, outbytes: 0x8&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Added command 2060 - inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 2062 - buffers: [0x5], inbytes: 0x4, outbytes: 0x0&lt;br /&gt;
*** Added command 2063 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
*** Added command 6014 - inbytes: 0x10, outbytes: 0x0&lt;br /&gt;
*** Added command 6015 - inbytes: 0x8, outbytes: 0x0&lt;br /&gt;
** nn::visrv::sf::IManagerRootService&lt;br /&gt;
*** Added command 100 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 101 - inbytes: 0x0, outbytes: 0x0&lt;br /&gt;
*** Added command 102 - inbytes: 0x14, outbytes: 0x0&lt;br /&gt;
*** Added command 103 - buffer_entry_sizes: [0x4], buffers: [0x5], inbytes: 0x20, outbytes: 0x4&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler upgrade&lt;br /&gt;
** Version is currently unknown, probably ~LLVM 15?&lt;br /&gt;
** Many NOPs inserted to align branch destinations to 16 bytes, many ADRP + ADD pairs replaced with NOP + ADR&lt;br /&gt;
*** This probably corresponds to this commit? https://github.com/llvm/llvm-project/commit/4450a2a23df0e7081ca7fee3ec641774afedc2bc&lt;br /&gt;
**** Alexander Shaposhnikov, why did you do this, it makes diffing harder :(&lt;br /&gt;
** Compiler now more frequently detecting a reusable computed offset for load/store&lt;br /&gt;
* KThreadStackParameters:&lt;br /&gt;
** Stack parameters are now 0x10 larger.&lt;br /&gt;
** The additional 0x10 bytes appear to be completely unused, at least on prod NX builds of the kernel.&lt;br /&gt;
* KScheduler changes:&lt;br /&gt;
** Idle count tracking has been changed to use two fields (&amp;quot;idle count&amp;quot;, &amp;quot;switch count&amp;quot;).&lt;br /&gt;
*** In UpdateHighestThreads(), switching to the idle thread does idle_count = ++switch_count, and switching to a non-kernel thread does ++switch_count.&lt;br /&gt;
*** KProcess now has an additional array of counts (&amp;quot;running_thread_switch_counts&amp;quot;), UpdateHighestThreads() also sets running_thread_switch_counts[core] = switch_count.&lt;br /&gt;
** KDebug::GetRunningThreadInfo() now only succeeds if running_thread_switch_counts[core] == Scheduler-&amp;gt;switch_count + 1.&lt;br /&gt;
*** Previously, this checked running_thread_idle_counts[core] == Scheduler-&amp;gt;idle_count, which meant the thread had to have not switched to idle between its last execution and the GetRunningThreadInfo() wait finishing.&lt;br /&gt;
*** Now, this requires the core to have switched directly from the target thread to GetRunningThreadInfo(), which is to say the condition is &amp;quot;The thread is actually running at the target time&amp;quot;.&lt;br /&gt;
*** In addition, now ResultNoThread is returned if switch_count == idle_count + 1, otherwise ResultUnknownThread is returned; previously only NoThread was returnable.&lt;br /&gt;
**** switch_count == idle_count + 1 implies that the switch to GetRunningThreadInfo() happened from idle thread, so ResultNoThread is returned exactly when the running thread was the idle thread.&lt;br /&gt;
**** Otherwise, if a thread other than the idle thread was the running thread, UnknownThread is returned.&lt;br /&gt;
** KSchedulerLock::Lock() now always increments count, instead of setting count = 1 when the lock owner is not the current thread.&lt;br /&gt;
** Note: Several KScheduler functions have big assembly changes, but this appears to be pure compiler optimization changes with no semantic differences.&lt;br /&gt;
* KProcess had the creation time member deleted.&lt;br /&gt;
* A new KPageTable::Operate operation was added (&amp;quot;ChangePermsAndRefreshWithFlushDataCache&amp;quot;)&lt;br /&gt;
** Previously, all calls to Operate with ChangePermsAndRefresh would flush data cache; now, calls to ChangePermsAndRefresh do not flush data cache and calls to ChangePermsAndRefreshWithFlushDataCache do.&lt;br /&gt;
*** ChangePermsAndRefreshWithFlushDataCache is otherwise identical to ChangePermsAndRefresh semantically.&lt;br /&gt;
* QueryIoMapping now supports querying memory regions with KMemoryState_Static in addition to KMemoryState_Io.&lt;br /&gt;
* Some changes surrounding KIoRegion:&lt;br /&gt;
** KIoRegion now uses an intrusive red black tree member for the pool list, rather than an intrusive list node.&lt;br /&gt;
** KIoPool::AddIoRegion() uses the intrusive tree to check fewer regions for Contains().&lt;br /&gt;
** KPageTableBase::UnmapIoRegion now takes the MemoryMapping as argument (which was passed to CreateIoRegion).&lt;br /&gt;
*** When mapping is MemoryMapping_Memory, the mapping following is done before unmap:&lt;br /&gt;
**** The region is permission changed to be uncached, using ChangePermsAndRefresh (without FlushDataCache).&lt;br /&gt;
**** The table&#039;s lock is released.&lt;br /&gt;
**** cpu::FlushDataCache() is called to flush the mapping.&lt;br /&gt;
**** The table&#039;s lock is reacquired.&lt;br /&gt;
*** All fallible operations now call KernelPanic() on failure, rather than returning the result code&lt;br /&gt;
* KAddressSpaceInfo::GetAddressSpaceStart()/GetAddressSpaceSize() no longer use complicated switch logic to only examine the indices with the right bit-width, and instead just iterate all indices with an if to check bit width.&lt;br /&gt;
* Big changes to KThread waiting/priority inheritance:&lt;br /&gt;
** m_waiter_list, m_lock_owner fields were deleted.&lt;br /&gt;
** New fields m_held_lock_info_list, m_waiting_lock_info were added.&lt;br /&gt;
*** This is an intrusive list of new type KThreadLockInfo (storing info on all locks held), and a pointer to the lock this thread is waiting on, if any.&lt;br /&gt;
*** There is one lock info for each address key.&lt;br /&gt;
*** KThreadLockInfo is slab allocated, count = # of KThreads&lt;br /&gt;
*** KThreadLockInfo has the following fields:&lt;br /&gt;
**** LockWithPriorityInheritanceThreadTree m_cv_tree; // Tree of threads waiting on the lock, this re-uses the node for condvar/arbiter.&lt;br /&gt;
**** KProcessAddress m_address_key;&lt;br /&gt;
**** KThread *m_owner;&lt;br /&gt;
**** u32 m_waiter_count;&lt;br /&gt;
** This greatly simplifies RemoveWaiterByKey (as there is a single KThreadLockInfo representing all threads waiting on the key).&lt;br /&gt;
*** RemoveWaiterByKey now also has an output bool pointer for whether the lock still has waiters, rather than an output s32 pointer for # of waiters.&lt;br /&gt;
** RestorePriority has been shuffled to ensure the new CV tree inside lock info has its invariants maintained across the priority set.&lt;br /&gt;
** Several calls to RestorePriority are now guarded by if statements, to only invoke RestorePriority if there is a possible change in inherited priority.&lt;br /&gt;
* Big changes to crt0/Initialize0/KInitialPageTable/Sleep Manager:&lt;br /&gt;
** KInitialPageTable::Map (and others) now take a new physical-to-virtual-offset argument, and add this to L1 table etc.&lt;br /&gt;
** Changes to Initial Arguments:&lt;br /&gt;
*** Initial arguments are now size 0x80.&lt;br /&gt;
*** Initial argument pointers are no longer used; Init arguments array addresses are used directly, with presumption that no page boundary is crossed.&lt;br /&gt;
*** Initial arguments no longer use setup function/etc.&lt;br /&gt;
*** Instead of setting ep = HorizonKernelMain, Initial arguments now set ep = InvokeMain (this function was previously &amp;quot;InvokeEntryPoint&amp;quot;)&lt;br /&gt;
*** idle stack is now retrieved from KMemoryLayout inside InvokeMain, instead of being a field inside Initial Arguments.&lt;br /&gt;
** After setting up initial arguments, Initialize0 now returns to crt0, which sets sp = InitArguments[0]-&amp;gt;sp and calls new function (&amp;quot;Initialize1&amp;quot;).&lt;br /&gt;
*** All KInitialPageTable calls from here onward now pass g_LinearPhysToVirtDiff, and thus page table accesses are done using the Linear mapping set up by Initialize0.&lt;br /&gt;
** Initialize1 does the following:&lt;br /&gt;
*** The initial identity mapping is unmapped in its entirety.&lt;br /&gt;
**** The single-page containing crt0 + interrupt vectors is re-identity-mapped as R-X.&lt;br /&gt;
**** PageAllocator for this is an extremely simplified new InitialPageAllocator type, which always has exactly two free pages to be allocated.&lt;br /&gt;
*** All remaining logic which used to be in Initialize0 happens here, with no changes.&lt;br /&gt;
** TurnOnAllCores now calls a helper function (&amp;quot;TurnOnCore&amp;quot;) to turn on the cores.&lt;br /&gt;
*** void TurnOnCore(__int64 core, InitArguments *argument);&lt;br /&gt;
*** TurnOnCore does virt-&amp;gt;phys translation lookup (using at s1e1r) on StartOtherCore (from crt0 page) + argument, and calls smc::CpuOn directly.&lt;br /&gt;
**** TurnOnCore is &amp;quot;probably&amp;quot; a KSystemControl function.&lt;br /&gt;
** Sleep handler thread function now sets resume entry addr = StartOtherCore, and sets up an InitArguments for each core.&lt;br /&gt;
*** ResumeEntry and ResumeEntryVirtual are now merged/simplified.&lt;br /&gt;
* Changes to pool allocations:&lt;br /&gt;
** Minimum non-secure system pool size is now ~2MB larger (0x2C04000 vs 0x2A0C000).&lt;br /&gt;
** Slab heap gaps size is now 0x9000 smaller (0x1A7000 vs 0x1B0000).&lt;br /&gt;
* KSystemControl::Initialize has been restructured (operations reordered), and now calls a helper which sets up the MT, creates system resource limit, etc.&lt;br /&gt;
** This helper also modifies the KAddressSpaceInfo tables, when memory is large (these were previously read-only).&lt;br /&gt;
** In particular, the following modifications are made to the 39-bit address space infos based on the total memory size:&lt;br /&gt;
*** size &amp;lt;= 8 GB: No changes (Heap Region = 8 GB, Alias region = 64 GB)&lt;br /&gt;
*** 8 GB &amp;lt; size &amp;lt;= 16 GB: Heap Region = size, Alias Region = 8 * size&lt;br /&gt;
*** 16 GB &amp;lt; size &amp;lt;= 32 GB: Heap region = size, Alias region = 128 GB&lt;br /&gt;
*** 32 GB &amp;lt;= size: Heap region = 32 GB, Alias region = 128 GB&lt;br /&gt;
* KSystemControl::Init::GenerateRandomRange now supports min=0, max=0xFFFFFFFFFFFFFFFF (previously it was incorrect for this case).&lt;br /&gt;
* New InfoType (0x1B) (&amp;quot;IoRegionHint&amp;quot;)&lt;br /&gt;
** This takes a handle to a KIoRegion, and returns the low bits of the region&#039;s address.&lt;br /&gt;
*** If the region&#039;s size is &amp;lt; 0x10000, this is the low 12 bits, otherwise if size &amp;lt; 0x200000, this is the low 16 bits, otherwise it&#039;s the low 21 bits.&lt;br /&gt;
* UserspaceAccess functions no longer do adr X30, fail in the loop, now do adr X#, fail before the loop and mov X30, X# in the loop.&lt;br /&gt;
* All code which sets ThreadContext&#039;s pstate field now uses the mask 0xF0000000 for aarch64 threads and 0xFE0FFE20 for aarch32 threads.&lt;br /&gt;
** Previously, this used the mask 0xFF0FFE20 for both.&lt;br /&gt;
** This removes the ability to get/set the DIT bit for both aarch64 and aarch32, and removes many other bits for aarch64 only.&lt;br /&gt;
* Interrupt disable logic was removed from a number of functions:&lt;br /&gt;
** KAddressArbiter::SignalAndIncrementIfEqual, KAddressArbiter::SignalAndModifyBasedOnWaitingThreadCount, KAddressArbiter::WaitIfLessThan, KConditionVariable::SignalConditionVariableImpl&lt;br /&gt;
* KConditionVariable::SignalToAddress now does dmb before copying updated value to userspace.&lt;br /&gt;
* KDebugBase functions for DebugEvents were changed to take pointer to params + count, instead of 5 parameter arguments.&lt;br /&gt;
** This propagates up to many/all caller functions.&lt;br /&gt;
** The only variable length parameter counts are DebugEvent_Exception + DebugException_UserBreak/DebugException_DebuggerBreak&lt;br /&gt;
*** This copies the variable-count parameters directly to the result exception info without maximum size check.&lt;br /&gt;
**** This is not exploitable, because there is no way for userspace to control parameter count, and it will always remain in bounds.&lt;br /&gt;
**** Presumably exception info type is larger if compiling for a target with more than 4 CPUs, to prevent out-of-bounds copies.&lt;br /&gt;
&lt;br /&gt;
=== [[USB_services|usb]] ===&lt;br /&gt;
A vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== [[Bluetooth_Driver_services|bluetooth]] ===&lt;br /&gt;
An IPC vuln due to a regression was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== [[Error_Applet|LibraryAppletError]] ===&lt;br /&gt;
&lt;br /&gt;
As described [[Title_list|here]], nnSdk now supports two ErrorMessage SystemDataIds. NX LibraryAppletError is hard-coded for using the original ErrorMessage SystemDataId, the new ErrorMessage SystemData doesn&#039;t exist on NX retail.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-02-21_00-05-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=12206</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=12206"/>
		<updated>2023-02-22T20:35:29Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* MemoryRegionMap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#META|META]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| [[#ACID|ACID]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| [[#ACI0|ACI0]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;META&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] SignatureKeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MainThreadPriority|MainThreadPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| MainThreadCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] [[#SystemResourceSize|SystemResourceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Version|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MainThreadStackSize|MainThreadStackSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| ProductCode (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1-3&lt;br /&gt;
| ProcessAddressSpace (0x00 = AddressSpace32Bit, 0x01 = AddressSpace64BitOld, 0x02 = AddressSpace32BitNoReserved, 0x03 = AddressSpace64Bit)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [7.0.0+] OptimizeMemoryAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [11.0.0+] DisableDeviceAddressSpaceMerge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MainThreadPriority ==&lt;br /&gt;
Ranges from 0 to 0x3F.&lt;br /&gt;
&lt;br /&gt;
== SystemResourceSize ==&lt;br /&gt;
When this is non-zero, the kernel reserves this amount of memory and dynamically uses it as needed for page table pages, KMemoryBlocks, and KBlockInfos. When this is zero, the process uses global shared heaps for these.&lt;br /&gt;
&lt;br /&gt;
This enables a process to sacrifice some of the memory available to it in order to have higher limits on these resources, thus enabling the use of SvcMapPhysicalMemory.&lt;br /&gt;
&lt;br /&gt;
Maximum size as is 0x1FE00000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
0 for all titles.&lt;br /&gt;
&lt;br /&gt;
[8.1.0+] Now set to 1 for certain titles.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now set to a proper version field for all titles.&lt;br /&gt;
&lt;br /&gt;
== MainThreadStackSize ==&lt;br /&gt;
Must be aligned to 0x1000. If zero, kernel will start the process&#039;s initial thread with sp=0.&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| 0x1&lt;br /&gt;
| [14.0.0+] &lt;br /&gt;
|-&lt;br /&gt;
| 0x20A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Flags_2|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ProductionFlag&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| UnqualifiedApproval&lt;br /&gt;
|-&lt;br /&gt;
| 2-5&lt;br /&gt;
| [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegion is set to Application for &amp;quot;starter&amp;quot; and NonSecureSystem for &amp;quot;nvservices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACI0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAccessControl =&lt;br /&gt;
For [[#ACID|ACID]] this is a simple descriptor as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| [5.0.0+] ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For [[#ACI0|ACI0]] this embeds data as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (Optional) ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x1 * SaveDataOwnerIdCount&lt;br /&gt;
| Accessibilities (1=Read, 2=Write, 3=ReadWrite)&lt;br /&gt;
|-&lt;br /&gt;
| Variable (padded to nearest 4 bytes)&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FsAccessFlag ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| RegisterProgramIndexMapInfo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| CreateOwnSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| MoveCacheStorage&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 37&lt;br /&gt;
| DeviceTreeBlob&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 38&lt;br /&gt;
| NotifyErrorContextServiceReady&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 39-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the [[Filesystem_services#Permissions|filesystem permissions]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Size (length of the service-name without null-terminator minus 1)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| IsServer (service is allowed to be registered)&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to.&lt;br /&gt;
&lt;br /&gt;
The service name string starts after the first byte and supports the wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= KernelCapability =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| [[#ThreadInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| [[#EnableSystemCalls]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| [[#MemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| [[#IoMemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxx01111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit10&lt;br /&gt;
| [8.0.0+] [[#MemoryRegionMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| [[#EnableInterrupts]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| [[#MiscParams]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| [[#KernelVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| [[#HandleTableSize]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| [[#MiscFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
== ThreadInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| LowestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 10-15&lt;br /&gt;
| HighestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| MinCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| MaxCoreNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableSystemCalls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 5-28&lt;br /&gt;
| SystemCallId&lt;br /&gt;
|-&lt;br /&gt;
| 29-31&lt;br /&gt;
| Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryMap ==&lt;br /&gt;
MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-30&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| PermissionType (0=RW, 1=RO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-26&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 27-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| MappingType (0=Io, 1=Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== IoMemoryMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryRegionMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 11-16&lt;br /&gt;
| RegionType0 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RegionIsReadOnly0&lt;br /&gt;
|-&lt;br /&gt;
| 18-23&lt;br /&gt;
| RegionType1 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| RegionIsReadOnly1&lt;br /&gt;
|-&lt;br /&gt;
| 25-30&lt;br /&gt;
| RegionType2 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| RegionIsReadOnly2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableInterrupts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| InterruptNumber0&lt;br /&gt;
|-&lt;br /&gt;
| 22-31&lt;br /&gt;
| InterruptNumber1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
0x3FF means empty.&lt;br /&gt;
&lt;br /&gt;
== MiscParams ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 14-16&lt;br /&gt;
| ProgramType (0 = System, 1 = Application, 2 = Applet)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ProgramType is parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
&lt;br /&gt;
== KernelVersion ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15-18&lt;br /&gt;
| MinorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 19-31&lt;br /&gt;
| MajorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This encodes the intended kernel version for the program.&lt;br /&gt;
&lt;br /&gt;
The kernel requires that the intended version is &amp;gt;= the minimum supported version (3.0 for all released kernels), and &amp;lt;= the current version.&lt;br /&gt;
&lt;br /&gt;
Kernel version is derived from/equivalent to SDK version:&lt;br /&gt;
* Kernel Major = SDK Major + 4&lt;br /&gt;
* Kernel Minor = SDK Minor&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Corresponding SDK Version&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0 || 1.0.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1 || 2.1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3 || 5.3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0 || 14.4 || 10.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0 || 15.4 || 11.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1 || 15.4 || 11.4.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandleTableSize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MiscFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| ForceDebug&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=12171</id>
		<title>Switch System Flaws</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=12171"/>
		<updated>2023-02-21T17:00:07Z</updated>

		<summary type="html">&lt;p&gt;SciresM: imagine knowing what month it is&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo Switch. This page is a list of publicly known Switch system flaws.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
Flaws in this category pertain to the underlying hardware that powers the Switch.&lt;br /&gt;
&lt;br /&gt;
This includes components shared across Tegra based devices such as the [[TSEC]], the [[Security_Engine|Security Engine]], the [[GPU]] and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| GMMU DMA attack&lt;br /&gt;
| The Switch&#039;s GPU includes a separate MMU (GMMU) that is allowed to bypass the system&#039;s IOMMU (SMMU). By accessing the GPU&#039;s MMIO region and manipulating the page table entries in the GMMU, an attacker can read/write any portion of the DRAM (except memory carveouts).&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Works around this hardware flaw by using memory pool partitioning. You can no longer escalate into sysmodules with GPU DMA because all their memory is allocated using heap that&#039;s carved out.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by adding a new register which restricts what memory untranslated DMA requests may access. Untranslated GPU DMA may now only access the GPU carveout (physmem 0x80002000-0x80006000), which the GPU already has legitimate and exclusive access to.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Summer 2017&lt;br /&gt;
| December 28, 2017&lt;br /&gt;
| [[User:hexkyz|hexkyz]], [[User:SciresM|SciresM]] and [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Weak Security Engine context validation&lt;br /&gt;
| The Tegra X1 supports a &amp;quot;deep sleep&amp;quot; feature, where everything but DRAM and the PMC registers lose their content (and the SoC loses power). Upon awaking, the bootrom re-executes, restoring system state. Among these stored states is the Security Engine&#039;s saved state, which uses AES-128-CBC with a random key and all-zeroes IV. However, the bootrom doesn&#039;t perform a MAC on this data, and only validates the last block. This allows one to control most of security engine&#039;s state upon wakeup, if one has a way to modify the encrypted state buffer.&lt;br /&gt;
&lt;br /&gt;
With a way to modify the encrypted state buffer, one can thus dump keys from &amp;quot;write-only&amp;quot; keyslots, etc.&lt;br /&gt;
&lt;br /&gt;
This also bypasses the SBK protection of the bootROM: indeed, at warmboot, bootROM will always clear keyslot 0xE to prevent malicious code from saving the SBK. Moving the SBK to another keyslot in the saved context renders this protection moot.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by streamlining the context save process; security engine contexts are now saved to protected memory which the CPU cannot access or modify.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| December 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Security Engine keyslots vulnerable to partial overwrite attack&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 security engine supports writing keyslot data to the engine with syntax as follows: &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_ADDR = (keyslot &amp;lt;&amp;lt; 4) | (dword_index_in_keyslot); &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_DATA = readle32(key, dword_index_in_keyslot * 4); &lt;br /&gt;
&lt;br /&gt;
However, the Security Engine flushes writes to the internal key tables immediately when AES_KEYTABLE_DATA is written -- this allows one to overwrite a single dword of a key at a time, and thus brute force the contents of keyslots in time (2^32 * 8) = 2^35 instead of 2^256.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Theorized Summer 2017 due to suggestive syntax, confirmed April 9, 2018&lt;br /&gt;
| April 9, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], almost surely others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-6242 (leveraged by the ShofEL2 and Fusée Gelée exploits)&lt;br /&gt;
| The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) &amp;quot;application processors&amp;quot; at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01) (also fixed independently on Tegra186).&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| [[User:Shuffle2|shuffle2]] and fail0verflow (originally),&amp;lt;br&amp;gt; [[User:Ktemkin|ktemkin]] and ReSwitched Team (independently),&amp;lt;br&amp;gt; [[User:Naehrwert|naehrwert]] (independently),&amp;lt;br&amp;gt; [[User:Hexkyz|hexkyz]] (independently),&amp;lt;br&amp;gt; st4rk with [[User:Shinyquagsire23|Shiny Quagsire]] and Dazzozo (independently),&amp;lt;br&amp;gt; and many others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Poor validation of bootrom SDRAM configuration parameters leads to arbitrary writes in bootrom&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 bootrom supports saving SDRAM parameters to scratch registers, and using the saved configuration to enable DRAM during warmboot.&lt;br /&gt;
&lt;br /&gt;
The code that parses these parameters does if (params-&amp;gt;EmcBctSpareN) *params-&amp;gt;EmcBctSpareN = params-&amp;gt;EmcBctSpareNPlusOne for most N, without validating either the address or value written to it.&lt;br /&gt;
There are other arbitrary writes in this code, as well (e.g. BootromPatch parameters intended for patching MISC registers do not check a relative offset to 0x7000000, etc).&lt;br /&gt;
&lt;br /&gt;
This allows a user with access to the PMC registers (via pre-sleep bpmp execution, or otherwise) to gain arbitrary bootrom code execution.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by validating that the spare writes/bootrom patch before performing them.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| 2017&lt;br /&gt;
| December 16, 2018&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC ROM does not clear crypto registers after signature verification&lt;br /&gt;
|&lt;br /&gt;
TSEC supports executing signed-microcode at a greater privilege level than normal payloads.&lt;br /&gt;
&lt;br /&gt;
When jumping to signed microcode, the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
TSEC ROM then calculates the expected signature and compares it to the user-supplied one in $c6. On match, the secure payload is executed, and on failure an exception is raised.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM fails to clear the crypto registers used to calculate the expected signature in either of the success/failure cases.&lt;br /&gt;
&lt;br /&gt;
Thus, with some way of obtaining the contents of crypto registers (e.g. ROP under some secure payload), an attacker can dump intermediary values from signature calculation.&lt;br /&gt;
&lt;br /&gt;
With enough data/trial/error, this is enough to reconstruct the signature algorithm:&lt;br /&gt;
* mac = &amp;lt;davies meyer hash of (page || address of page) for each 0x100 page in the payload&amp;gt;&lt;br /&gt;
* key = AES-ENCRYPT(hardware csecret 0x1, seed)&lt;br /&gt;
* signature = AES-ENCRYPT(key, mac)&lt;br /&gt;
&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC signature validation design flaw leads to fake-signing&lt;br /&gt;
|&lt;br /&gt;
As mentioned above, when jumping to signed microcode the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM performs no validation on the input seed used to generate the signing key.&lt;br /&gt;
&lt;br /&gt;
This leads to the following attack:&lt;br /&gt;
* Attacker gains rop under any secure microcode payload with signature = S.&lt;br /&gt;
* Attacker uses the &amp;quot;csigenc&amp;quot; instruction to obtain K = AES-ENCRYPT(hardware csecret 0x1, S).&lt;br /&gt;
* Attacker jumps to their own microcode with $c6 = &amp;lt;signature calculated on pc using K&amp;gt;, $c7 = S&lt;br /&gt;
* TSEC ROM calculates key = AES-ENCRYPT(hardware csecret 0x1, S) = K, and the signature check passes.&lt;br /&gt;
* Attackers microcode is executed in secure mode as though it were signed by NVidia.&lt;br /&gt;
&lt;br /&gt;
Thus an attacker who has exploited *any* secure payload may use this to obtain a &amp;quot;fake signature key&amp;quot;, which can be used to sign and execute arbitrary microcode in secure mode.&lt;br /&gt;
&lt;br /&gt;
Note: this does not break the TSEC cryptosystem, as the csigenc mechanism relies on the signature of the executing microcode, and fakesigning produces different signatures from NVidia that cannot be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| ROP under TSEC secure bootrom via DMA engine stack overwrite (--xploit)&lt;br /&gt;
| TSEC DMA engine does not stop when entering TSEC secure bootrom. By pointing TSEC DMA to current stack before secure bootrom entry, stack can be controlled. &lt;br /&gt;
&lt;br /&gt;
One can then use blind ROP against the TSEC secure bootrom (which is execute only, and cannot be dumped).&lt;br /&gt;
&lt;br /&gt;
With sufficient effort, an attacker can construct a ROP chain that leads to csigcmp being executed with fully controlled arguments.&lt;br /&gt;
&lt;br /&gt;
This allows for arbitrary heavy secure mode code execution with the current signature set to an arbitrary value.&lt;br /&gt;
&lt;br /&gt;
This completely breaks the TSEC cryptosystem, by allowing one to obtain the result of csigenc with signature = &amp;lt;any desired value&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This has many uses/results, notably including dumping the &amp;quot;true&amp;quot; signature key (set signature = zeroes, perform csigenc using csecret 0x1).&lt;br /&gt;
| None&lt;br /&gt;
| TSEC for all Tegra devices&lt;br /&gt;
| Late 2018&lt;br /&gt;
| January 2021&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]/[[User:SciresM|SciresM]], [[User:Vale|Vale]]/[[User:Thog|Thog]] (independently), [[User:Tatsuko|Tatsuko]] (independently), possibly others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Boot straps are not relatched on watchdog resets (strapwn)&lt;br /&gt;
| On boot, the BOOTSELECT, RCM and RAM_CODE straps are latched from external GPIO to determine which boot medium to use and verify from in bootrom. However, APB_MISC_PP_STRAPPING_OPT_A can be overwritten with arbitrary values following bootrom. Write access to PP_STRAPPING_OPT_A would otherwise be mundane, however these straps are not relatched during a watchdog reset (despite being latched during other software resets), allowing for arbitrary straps to be selected and executed in bootrom.&lt;br /&gt;
&lt;br /&gt;
This allows setting NVPROD_UART on some hardware configurations where it would normally be unavailable (ie on Jetson Nano boards), but is otherwise mostly useless and/or useful for testing unintended boot options (such as USB Mass Storage boot) without having to move boot strap resistors.&lt;br /&gt;
| Unknown&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| May 2020&lt;br /&gt;
| April 30, 2021&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
Flaws in this category pertain to the firmware running on hardware devices, such as wifi/bluetooth, etc. Firmware is generally uploaded by sysmodules.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Broadpwn (CVE-2017-9417)&lt;br /&gt;
| See [https://blog.exodusintel.com/2017/07/26/broadpwn/ here] and [https://www.blackhat.com/docs/us-17/thursday/us-17-Artenstein-Broadpwn-Remotely-Compromising-Android-And-iOS-Via-A-Bug-In-Broadcoms-Wifi-Chipsets.pdf here].&lt;br /&gt;
| Code execution on the wifi controller (untested on Switch).&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Switch: July 2022&lt;br /&gt;
| Switch: July 30, 2022&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Bootloader ==&lt;br /&gt;
Flaws in this category pertain to any bootloader component such as the [[Package1#Package1ldr|package1ldr]], the [[Package1#Section_1|NX bootloader]] or the [[Package1#Section_0|warmboot binary]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Null-dereference in panic()&lt;br /&gt;
| The Switch&#039;s stage 1 bootloader, on panic(), clears the stack and then attempts to clear the Security Engine. However, it does so by dereferencing a pointer to the SE in .bss (initially NULL), and this pointer doesn&#039;t get initialized until partway into the bootloader&#039;s main() after several functions that might panic() are called. Thus, a panic() caused prior to SE initialization would result in the SE pointer still being NULL when dereferenced. &lt;br /&gt;
The BPMP doesn&#039;t have an active MPU and the bus won&#039;t data abort on an invalid address, so no exception will be entered: it&#039;ll end up overwriting some exception vectors with NULL before halting.&lt;br /&gt;
&lt;br /&gt;
In 3.0.0, this was fixed by moving the security engine initialization earlier in main(), before the first function that could potentially panic().&lt;br /&gt;
| Some exception vectors overwritten with NULL, before SBK/other keyslots are cleared. Probably useless for anything more interesting.&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Early July, 2017&lt;br /&gt;
| July 30, 2017&lt;br /&gt;
| Everyone who diff&#039;d 2.3.0 and 3.0.0 Package1&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DIS_PGM not written by package1 &lt;br /&gt;
| The switch&#039;s hardware fuse driver contains a write-once bit in a register called &amp;quot;FUSE_DIS_PGM&amp;quot;, which disables burning fuses until the next reboot. While Nintendo&#039;s bootloader code for waking up from sleep writes this on all firmware, the actual package1 initial bootloader forgets to write to it on cold reboot. &lt;br /&gt;
&lt;br /&gt;
This isn&#039;t too big of a problem because another fuse is burnt on retail devices (production mode), which prevents burning *all* fuses other than ODM_RESERVED ones in hardware.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 3.0.0 by writing to the register on cold boot (although the write happens in TZ instead of package1 where it should take place, possibly to obfuscate the fact that they made this mistake).&lt;br /&gt;
| Burning arbitrary ODM reserved fuses with TZ code execution, which should never be possible for non-bootloader code.&lt;br /&gt;
&lt;br /&gt;
Warning: one could irreparably brick one&#039;s console by playing with this.&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Late summer/early fall 2017&lt;br /&gt;
| December 31, 2017&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| maconstack (TSEC firmware leaves MAC on the stack)&lt;br /&gt;
| Package1ldr loads a firmware blob into TSEC early on boot. This piece of code runs on the TSEC in Authenticated Mode and has the sole purpose of generating the per-console TSEC key (see [[Cryptosystem]]).&lt;br /&gt;
&lt;br /&gt;
As a way to mitigate attacks, the TSEC firmware blob is split into 3 stages: [[TSEC_Firmware#Boot|Boot]] which is unencrypted and unsigned, [[TSEC_Firmware#KeygenLdr|KeygenLdr]] which is unencrypted but signed and [[TSEC_Firmware#Keygen|Keygen]] which is encrypted and signed.&lt;br /&gt;
Boot loads a static pre-generated signature into the Falcon&#039;s CPU crypto registers, loads KeygenLdr into the Falcon&#039;s CODE region and jumps to it. Execution will proceed into KeygenLdr in Heavy Secure Mode if, and only if, the loaded signature matches the one Falcon calculates internally for KeygenLdr.&lt;br /&gt;
&lt;br /&gt;
Among various things, KeygenLdr will attempt to do a &amp;quot;backwards&amp;quot; security check by calculating a CMAC over Boot and comparing it with a known hash stored in the TSEC firmware&#039;s key data (a small buffer stored after Boot&#039;s code). If the hashes don&#039;t match, execution aborts.&lt;br /&gt;
&lt;br /&gt;
KeygenLdr stores the calculated Boot&#039;s CMAC in the stack, but forgets to clear it. Since the stack is located in Falcon&#039;s DATA region, loading the TSEC firmware blob and dumping the DATA region afterwards (via MMIO) will reveal the calculated hash.&lt;br /&gt;
This allows using KeygenLdr as an oracle to generate a valid CMAC for arbitrary Boot code. Replacing the CMAC in the TSEC firmware&#039;s key data region results in KeygenLdr accepting any Boot code, thus rendering this security measure useless.&lt;br /&gt;
&lt;br /&gt;
Additionally, since signed Falcon code can&#039;t be revoked without an hardware revision, an attacker can always reuse the flawed KeygenLdr code even if a fix is issued.&lt;br /&gt;
| Running TSEC firmware&#039;s KeygenLdr in a user controlled environment.&lt;br /&gt;
| None&lt;br /&gt;
| [[5.0.2]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 29, 2018&lt;br /&gt;
| [[User:Hexkyz|hexkyz]], [[User:Rei|Reisyukaku]] (independently), probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| pk1ldrhax&lt;br /&gt;
| Package1ldr decrypts and verifies the keyblob inside of the current BCT in order to get the package1 key, and then uses the package1 key to decrypt package1. It then validates package1 before jumping to it by checking the PK11 magic number, and that the section sizes sum to the expected size (and are individually less than the expected size). &lt;br /&gt;
&lt;br /&gt;
However, package1ldr does not actually validate the package1 key against a fixed vector (much like kernel9loader forgot to do so on the 3ds). This would normally not matter, as keyblobs are validated -- however, with bootrom code execution one can dump SBK and forge keyblobs, and thus control the package1 key. &lt;br /&gt;
&lt;br /&gt;
Thus (&#039;&#039;&#039;in theory, but not in practice due to the size of the brute force required&#039;&#039;&#039;) one can replace the package1 key with garbage, causing package1 to decrypt into garbage, and hope that this garbage passes validation checks and that package1ldr jumping into the garbage will do something useful.&lt;br /&gt;
&lt;br /&gt;
This was fixed incidentally in [[6.2.0]], as pk1ldr does not use keyblob data to decrypt package1 any more.&lt;br /&gt;
&lt;br /&gt;
| With a large enough brute force: arbitrary package1 code execution from coldboot.&lt;br /&gt;
&lt;br /&gt;
However, a usable brute force is on the order of &amp;gt;= ~2^80, so &#039;&#039;&#039;this is almost certainly not actually usable in any meaningful context&#039;&#039;&#039;.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| Early 2017 (as soon as plaintext package1ldr was first dumped)&lt;br /&gt;
| November 20, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Stack smash in TSEC firmware&#039;s KeygenLdr&lt;br /&gt;
| Given that we can control the [[TSEC_Firmware#Key_data|key data]] (which is not authenticated) and the [[TSEC_Firmware#Boot|Boot]] blob (see &amp;quot;maconstack&amp;quot;), as well as the fact Non-secure and Heavy Secure code share the same stack, we can use this to attack KeygenLdr. KeygenLdr uses memcpy to copy over a payload to DMEM to verify it, which can be abused to smash the stack (in DMEM) and write over the return address of said function.&lt;br /&gt;
| ROP under KeygenLdr in Heavy Secure mode.&lt;br /&gt;
| None&lt;br /&gt;
| [[8.0.1]]&lt;br /&gt;
| Early 2018&lt;br /&gt;
| May 21, 2019&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TrustZone ==&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package1#Section_2|Secure Monitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Non-atomic mutexes&lt;br /&gt;
| When an [[SMC]] is called, TrustZone sets a global variable to mark that an SMC is in progress, so that two SMCs using shared resources (like the security engine) do not trample on one another. On 1.0.0, this global variable was written using non-atomic writes, and thus a race condition is possible.&lt;br /&gt;
&lt;br /&gt;
However, the SMC handler enforces that all SMCs must be called from core #3, unless the top-level handler ID is 1 (SMCs internal to the kernel). Thus, the only SMCs that can be run side-by-side are [any userland smc] and smcGetRandomBytesForKernel, and this turns out to not really be abusable.&lt;br /&gt;
| Mostly useless. Maybe some oob-write into unused (and thus useless) memory if running smcGetRandomBytesForKernel and smcGetRandomBytesForUser at the same time.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December 2017 (Probably earlier by others)&lt;br /&gt;
| January 18, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| jamais vu (non-secure world access to PMC MMIO and pre-deep sleep firmware)&lt;br /&gt;
| On [[1.0.0]], one could map in the PMC registers in userland. In addition, [[AM_services|am]] ran a little-kernel based firmware on the BPMP at runtime. With code execution under am, one could modify the BPMP&#039;s little-kernel firmware to hook deep sleep entry, and modify TrustZone/Security engine state. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry.&lt;br /&gt;
| Arbitrary TrustZone code execution.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December, 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Missed BPMP Exception Vector Writes&lt;br /&gt;
| Starting in [[2.0.0]], the BPMP is asleep at runtime, and is turned on by TrustZone during [[SMC|smcCpuSuspend]] in order to initiate the deep sleep process. When it does so, it is held in RESET, and TrustZone attempts to write to the BPMP exception vectors at 0x6000F200 to register EVP_RESET = lp0_entry_fw_crt0, and all other EVPs to a function that simply reboots. However, while they successfully write EVP_RESET, they miss all the other vectors, accidentally writing to the 0x6000F004-0x6000F020 region instead of the 0x6000F204-0x6000F220 region they want to write to. This results in all the exception vectors for the BPMP other than RESET being &amp;quot;undefined&amp;quot; (attacker controlled).&lt;br /&gt;
&lt;br /&gt;
With some way of causing an exception vector to be taken at the right time, this would give pre-sleep code execution (and thus arbitrary TrustZone code execution, via the security engine flaw). However, none of the abort vectors are really triggerable, and interrupts are disabled for the BPMP when it is taken out of reset. Thus, this is useless in practice.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by writing to the correct registers.&lt;br /&gt;
| Theoretically: Arbitrary TrustZone code execution. In practice: Useless.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January, 2018&lt;br /&gt;
| February 23, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]], [[User:Naehrwert|naehrwert]], [[User:Hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC has access to the secure kernel carveout &lt;br /&gt;
| TrustZone is responsible for managing security carveouts to prevent DMA controllers from accessing the carveout which contains the kernel, sysmodules, and other critical operating system data.&lt;br /&gt;
&lt;br /&gt;
Until [[8.0.0]], the list of devices that could access the carveout included the TSEC. However, the TSEC can bypass the SMMU when in authenticated mode by writing to a certain register. Thus, pwning nvservices would allow one to take over the TSEC, and use it to write to normally protected mmio/memory.&lt;br /&gt;
&lt;br /&gt;
In [[8.0.0]], this was fixed by removing TSEC access, and adding TSECB access (TSECB cannot bypass the SMMU).&lt;br /&gt;
| With access to the TSEC mmio (nvservices ROP) and code execution in TSEC Heavy Secure mode, kernel code execution, probably.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| 2017 (when TrustZone code plaintext was first obtained).&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| deja vu (insufficient system state validation on suspend leads to pre-sleep BPMP code execution)&lt;br /&gt;
| Jamais Vu was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry, since gaining pre-sleep code execution on the BPMP compromises the system.&lt;br /&gt;
&lt;br /&gt;
However, the state validation performed by Nintendo&#039;s Secure Monitor was insufficient to prevent pre-sleep execution from being obtained.&lt;br /&gt;
&lt;br /&gt;
Prior to [[6.0.0]], one could use a DMA controller that had access to IRAM and was not held in reset (there were multiple) to race TrustZone&#039;s writes to the BPMP firmware in IRAM, and thus overwrite Nintendo&#039;s firmware with an attacker&#039;s to gain pre-sleep code execution.&lt;br /&gt;
&lt;br /&gt;
[[6.0.0]] addressed this by performing TrustZone state MAC writes and locking PMC scratch *before* turning on the BPMP, fixing the original Jamais Vu exploit entirely. In addition, the BPMP firmware in TrustZone&#039;s .rodata is now memcmp&#039;d to the actual data after it is written to IRAM. This mitigates race attacks that modify the firmware.&lt;br /&gt;
&lt;br /&gt;
However, Nintendo both forgot to validate the BPMP exception vectors after writing them, and forgot to hold in reset a DMA controller that can write to the BPMP&#039;s exception vectors.&lt;br /&gt;
&lt;br /&gt;
AHB-DMA is not blacklisted by kernel mapping whitelist (Nintendo probably forgot it, because the TX1 TRM does not really document that it&#039;s present, although the MMIO works as documented in older (Tegra 3 and before) TRMs).&lt;br /&gt;
&lt;br /&gt;
Thus, with kernel code execution (or some other way of accessing AHB-DMA, e.g. nspwn on &amp;lt;= 4.1.0, TSEC hax, or other arbitrary mmio access flaws), one can DMA to the BPMP&#039;s exception vectors as they are written, causing TrustZone to start the BPMP executing an attacker&#039;s firmware at a different location than TrustZone intends/validates.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.0.0]] by blocking AHB-DMA arbitration and verifying it is held in reset during suspend, and thus there are no more devices that can write to the relevant MMIO at the right time.&lt;br /&gt;
&lt;br /&gt;
| Arbitrary TrustZone/BootROM code execution, by using either the original Jamais Vu flaw (prior to [[6.0.0]] or a warmboot bootrom exploit (any firmware where pre-sleep execution can be gained).&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| December 2017&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:motezazer|motezazer]] and ktemkin,  [[User:Naehrwert|naehrwert]] (independently), almost certainly others (independently)&lt;br /&gt;
|-&lt;br /&gt;
| TrustZone allows using imported RSA exponents with arbitrary modulus&lt;br /&gt;
| TrustZone supports &amp;quot;importing&amp;quot; RSA private exponents for use by userland -- these are stored encrypted with TrustZone only keydata in NAND, and decrypted only to TZRAM. This prevents a console that has compromised userland from learning the private exponents of these keys and doing calculations with them offline. In practice, this is used for FS (gamecard communications), ES (drm), and SSL (console client cert communications).&lt;br /&gt;
&lt;br /&gt;
However, the actual SMC API only imports the RSA exponent, and not the modulus, which is passed separately by userland in each call. There is no validation done on the modulus passed in -- this means that userland can pass in any message and modulus it chooses, and obtain the result of (message ^ private exponent) % modulus back from the secure monitor.&lt;br /&gt;
&lt;br /&gt;
By choosing a prime number modulus P such that P has &amp;quot;smooth&amp;quot; order (totient(P) == P-1 is divisible only by &amp;quot;small&amp;quot; primes), one can efficiently use the [[wikipedia:Pohlig-Hellman algorithm|Pohlig-Hellman algorithm]] to calculate the discrete logarithm of such a result directly, and thus obtain the private exponent.&lt;br /&gt;
&lt;br /&gt;
This is mostly useless in practice, given the general availability of other exploits to obtain these decrypted exponents.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 10.0.0 by importing the modulus in addition to the exponent for the ES device key and ES client cert key. For backwards compatibility reasons the SSL key and Lotus key still only import the exponent.&lt;br /&gt;
&lt;br /&gt;
StorageExpMod also now validates that the exponentiation of &amp;quot;DDDDD...&amp;quot; about the provided modulus by the imported exponent and then the fixed public exponent returns &amp;quot;DDDDD...&amp;quot;, and returns invalid argument if validation fails.&lt;br /&gt;
| With userland privileges sufficient to use an imported RSA key: obtaining that RSA key&#039;s private exponent.&lt;br /&gt;
| [[10.0.0]]&lt;br /&gt;
| [[10.0.0]]&lt;br /&gt;
| August 14, 2019&lt;br /&gt;
| August 14, 2019&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package2#Section_0|HorizonOS Kernel]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Syscall Infoleaks&lt;br /&gt;
| Many syscalls leaked kernel pointers on sad paths (for example svcSetHeapSize and svcQueryMemory), until they landed a bunch of fixes in 2.0.0.&lt;br /&gt;
| Nothing really.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| svcWaitSynchronization/svcReplyAndReceive bad cleanup on error&lt;br /&gt;
| If there is a page fault when fetching handles from the userspace array, it cleans up by dereferencing all objects despite having only loaded first N. Allows the attacker to make arbitrary decrefs on any kernel synchronization object, and thus can be used to get UAF. Haven&#039;t actually been tried on real HW though, but should work (tm).&lt;br /&gt;
| Kernel code execution&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| April 24, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Bad irq_id check in CreateInterruptEvent&lt;br /&gt;
| CreateInterruptEvent syscall is designed to work only for irq_id &amp;gt;= 32. All irq_ids &amp;lt; 32 are &amp;quot;per-core&amp;quot; and reserved for kernel use (watchdog/scheduling/core communications).&lt;br /&gt;
On 1.0.0 you could supply irq_id &amp;lt; 32 and it would write outside the SharedIrqs table.&lt;br /&gt;
| You can register irq&#039;s in the Core3Irqs table, and thus register per-core irqs for core3, that are normally reserved for kernel. Useless.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| October 2017&lt;br /&gt;
| October 17, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel .text mapped executable in usermode&lt;br /&gt;
| Prior to [[3.0.2]] the kernel .text was [[Memory_layout|mapped]] in usermode as executable. This can be used for usermode ROP for bypassing ASLR, but SVCs/IPC are not usable by running kernel .text in usermode.&lt;br /&gt;
| Executing kernel .text in usermode&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| &lt;br /&gt;
| December 28, 2017 (34c3)&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Memory Controller not properly secured&lt;br /&gt;
| The Switch OS originally had the memory controller not set to be accessible only by the secure-world, which was problematic because insecure access can compromise the kernel.&lt;br /&gt;
&lt;br /&gt;
This was fixed partially in [[2.0.0]] by blacklisting the memory controller from being mapped by user-processes, and was fixed entirely in [[4.0.0]] by making the memory controller TZ-only and making all kernel accesses go through [[SMC|smcReadWriteRegister]].&lt;br /&gt;
| With some way to access the memory controller MMIO, arbitrary kernel code execution.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| January 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Potential [[SVC|svcWaitForAddress]] thread use-after-free&lt;br /&gt;
| Between [[4.0.0]], where svcWaitForAddress was introduced, and [[7.0.0]], there was a second intrusive rbtree node in KThread for the WaitForAddress tree (the key being (address, priority), sorted lexicographically). Unlike the WaitProcessWideKeyAtomic tree, the kernel forgot to reinsert the WaitForAddress node when the thread&#039;s priority changed (priority inheritance and/or SetPriority), breaking the rbtree invariants; and since the kernel walks through the entire tree to remove intrusive nodes, you could cause threads to stay in the tree even after their deletion.&lt;br /&gt;
&lt;br /&gt;
[[7.0.0]] fixed the issue by using the same intrusive node for both trees. The thread/node knows which tree it is in, and the latter is correctly updated when thread priority changes.&lt;br /&gt;
| It unluckily didn&#039;t look exploitable&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| July 2018&lt;br /&gt;
| February 2019&lt;br /&gt;
| [[User:TuxSH|TuxSH]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel RWX identity mapping never unmapped&lt;br /&gt;
| During init, the kernel binary is identity-mapped as RWX at 0x80060000; this is necessary to facilitate the transitionary period while the MMU is being enabled but mappings for e.g. KASLR are not yet determined, and also to enable smooth MMU enable transition during wake-from-sleep.&lt;br /&gt;
&lt;br /&gt;
However, the identity mapping was never unmapped, and thus the whole kernel code bin remained permanently mapped as RWX for all kernel threads (any thread which does not have an owner process and thus uses the KSupervisorPageTable TTBR0).&lt;br /&gt;
&lt;br /&gt;
Thus, any theoretical exploit which would give kernel memory corruption or ROP under a kernel thread would allow making use of this mapping to modify kernel text + bypass KASLR.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[16.0.0]] by unmapping the identity-mapping during init, and re identity-mapping only the very first page of kernel .text as R-X (for use by wake-from-sleep), which fixes the shellcode problem and mostly fixes the ROP problem, since this page mostly lacks interesting gadgets.&lt;br /&gt;
| In theory, with another exploitable kernel memory corruption (or ROP under kernel thread) bug: bypassing KASLR + modifying kernel .text. &lt;br /&gt;
&lt;br /&gt;
However, no such bugs are known.&lt;br /&gt;
| [[16.0.0]]&lt;br /&gt;
| [[16.0.0]]&lt;br /&gt;
| Summer 2018&lt;br /&gt;
| February 2023&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FIRM-package System Modules ==&lt;br /&gt;
Flaws in this category pertain to any of the [[Package2#Section_1|built-in system modules]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Service access control bypass (sm:h, smhax, probably other names)&lt;br /&gt;
| Prior to [[3.0.1]], the &#039;&#039;service manager&#039;&#039; (sm) built-in system module treats a user as though it has full permissions if the user creates a new &amp;quot;sm:&amp;quot; port session but bypasses [[Services_API#Initialize|initialization]]. This is due to the other sm commands skipping the service ACL check for Pids &amp;lt;= 7 (i.e. all kernel bundled modules) and that skipping the initialization command leaves the Pid field uninitialized.&lt;br /&gt;
In [[3.0.1]], sm returns error code 0x415 if [[Services_API#Initialize|Initialize]] has not been called yet.&lt;br /&gt;
| Acquiring, registering, and unregistering arbitrary services&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| May 2017&lt;br /&gt;
| August 17, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Overly permissive SPL service&lt;br /&gt;
| The concept behind the switch&#039;s [[SMC|Secure Monitor]] is that all cryptographic keydata is located in userspace, but stored as &amp;quot;access keys&amp;quot; encrypted with &amp;quot;keks&amp;quot; that never leave TrustZone. The [[SPL services|spl]] (&amp;quot;security processor liaison&amp;quot;?) service serves as an interface between the rest of the system and the secure monitor. Prior to [[4.0.0]], spl exposed only a single service &amp;quot;spl:&amp;quot;, which provided all TrustZone wrapper functions to all sysmodules with access to it. Thus anyone with access to the spl: service (via smhax or by pwning a sysmodule with access) could do crypto with any access keys they knew. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by splitting spl: into spl:, spl:mig, spl:ssl, spl:es, and spl:fs.&lt;br /&gt;
| Arbitrary spl: crypto with any access keys one knows. For example, one could use the SSL module&#039;s access keys to decrypt their console&#039;s SSL certificate private key without having to pwn the SSL sysmodule.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Summer 2017 (after smhax was discovered).&lt;br /&gt;
| December 23, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single session services not really single session&lt;br /&gt;
| Several &amp;quot;critical&amp;quot; services (like fsp-ldr, fsp-pr, sm:m, etc) are meant to only ever hold a single session with a specific sysmodule. However, when a sysmodule dies, all its service session handles are released -- and thus killing the holder of a single session handle would allow one (via sm:hax etc) to get access to that service. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by adding a semaphore to these critical single-session services, so that even if one gets access to them an error code will be returned when attempting to use any of their commands.&lt;br /&gt;
| With some way to access these services and kill their session holders (like expLDR): dumping sysmodule code, arbitrary service access, elevated filesystem permissions, etc.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| May/June 2017 (basically immediately after smhax was discovered)&lt;br /&gt;
| December 30, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nspwn&lt;br /&gt;
| fsp-ldr command 0 &amp;quot;MountCode&amp;quot; takes in a Content Path (retrieved from NCM by Loader), and returns an IFileSystem for the resulting ExeFS. These content paths, are normally NCAs, but MountCode also supports a number of other formats, including &amp;quot;.nsp&amp;quot; -- which is just a PFS0.&lt;br /&gt;
&lt;br /&gt;
When a path ending in &amp;quot;.nsp&amp;quot; is parsed by MountCode, the PFS0 is treated as a raw ExeFS. Because there is no NCA header, the ACID signatures are not validated -- and because there are no other signatures in a PFS0, this results in no signature checking happening at all.&lt;br /&gt;
&lt;br /&gt;
The actual .nsp handling is eventually done by {content mounting function} called by MountCode and other FS commands.&lt;br /&gt;
&lt;br /&gt;
Thus, by placing an ExeFS (NSOs + &amp;quot;main.npdm&amp;quot;) and setting one&#039;s desired title ID to &amp;quot;@Sdcard:/some_title.nsp&amp;quot; or &amp;quot;@User:/some_title.nsp&amp;quot; etc one can launch arbitrary unsigned code, with arbitrary unsigned NPDMs.&lt;br /&gt;
&lt;br /&gt;
This appears to have been fixed by only allowing .nsp when the input fstype==7 for the internal content-mounting function, returning 0x2EE202 otherwise.&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: Arbitrary code execution with full system privileges.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| Late 2017&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single null-byte stack overflow in Loader ContentPath parsing&lt;br /&gt;
| Previously, loader content path parsing looked like this, where path_from_lr was up to 0x300 bytes and not necessarily null-terminated:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300] = {0};&lt;br /&gt;
  strcat(nca_path, path_from_lr);&lt;br /&gt;
  for (int i = 0; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Thus, a content path of the maximum length (0x300 bytes) would result in strcat writing a NULL terminator past the end of the nca_path buffer.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[6.0.0]], the new code looks like this:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300];&lt;br /&gt;
  strncpy(nca_path, path_from_lr, sizeof(nca_path));&lt;br /&gt;
  for (int i = 0; i  &amp;lt; sizeof(nca_path) &amp;amp;&amp;amp; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: single null-byte stack overflow in Loader. Maybe (but probably not) loader code execution.&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 2, 2018&lt;br /&gt;
| September 19, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
|-&lt;br /&gt;
| System modules vulnerable to selective downgrade attacks&lt;br /&gt;
| Horizon has no mechanism for specifying the specific title version to Loader on process creation.&lt;br /&gt;
&lt;br /&gt;
Observing this, one can note that after a system update one could install a downgraded version of a specific system module (e.g. nvservices) while leaving the rest of the OS at the same version.&lt;br /&gt;
&lt;br /&gt;
Unless there was some breaking API change, this allows one to make a console vulnerable once more to an exploit in a sysmodule by downgrading it and nothing else.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.1.0]] by incrementing a version field in NPDM, and checking it against a hardcoded list for certain titles in Loader&#039;s process creation func.&lt;br /&gt;
| With access to content installation commands (or a vulnerable lower version to selectively install newer titles), reintroducing bugs in vulnerable system modules on newer firmware versions.&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| When FIRM was first dumped in 2017.&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[Loader_services|Loader]] ASLR&lt;br /&gt;
| The RNG used for generating the ASLR slide is only seeded with 32bits, with the data from [[SVC|svcGetInfo]]. Hence, one could bruteforce the seed if one has infoleaks from any programs. This can be successfully bruteforced with at least 2 sample codebin addrs from different programs (with only 1 sample a lot of invalid seeds are found), however in some cases more than 1 seed might be found.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] Loader now uses csrng_GenerateRandomBytes for determining the ASLR slide.&lt;br /&gt;
&lt;br /&gt;
See also [https://github.com/switchbrew/loader-aslr-solver loader-aslr-solver].&lt;br /&gt;
| Breaking ASLR for all non-KIP processes, allowing predicting the main-codebin base addr for all non-KIP processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| January 30, 2022 (presumably found much earlier?)&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== System Modules ==&lt;br /&gt;
Flaws in this category pertain to any non-built-in system module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| OOB Read in NS system module (pl:utoohax, pl:utonium, maybe other names)&lt;br /&gt;
| Prior to [[3.0.0]], pl:u (Shared Font services implemented in the NS sysmodule) service commands 1,2,3 took in a signed 32-bit index and returned that index of an array but did not check that index at all. This allowed for an arbitrary read within a 34-bit range (33-bit signed) from NS .bss. In [[3.0.0]], sending out of range indexes causes error code 0x60A to be returned.&lt;br /&gt;
| Dumping full NS .text, .rodata and .data, infoleak, etc&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| June 19, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]], ReSwitched Team (independently)&lt;br /&gt;
|-&lt;br /&gt;
| Unchecked domain ID in common IPC code&lt;br /&gt;
| Prior to [[2.0.0]], object IDs in [[IPC_Marshalling#Domain_message|domain messages]] are not bounds checked. This out-of-bounds read could be exploited to brute-force ASLR and get PC control in some services that support domain messages.&lt;br /&gt;
|&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| July 2017&lt;br /&gt;
| July 20, 2017‎&lt;br /&gt;
| [[User:hthh|hthh]]&lt;br /&gt;
|-&lt;br /&gt;
| Out-of-bounds array read for [[BCAT_Content_Container]] secret-data index&lt;br /&gt;
| The [[BCAT_Content_Container]] secret-data index is not validated at all. This is handled before the RSA-signature(?) is ever used. Since the field is an u8, a total of 0x800-bytes relative to the array start can be accessed.&lt;br /&gt;
This is not useful since the string loaded from this array is only involved with key-generation.&lt;br /&gt;
| &lt;br /&gt;
| Unknown&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| August 4, 2017&lt;br /&gt;
| August 6, 2017&lt;br /&gt;
| [[User: shinyquagsire23|Shiny Quagsire]], [[User:Yellows8|yellows8]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| expLDR (sysmodule handle table exhaustion)&lt;br /&gt;
| Most sysmodules share common template code to handle IPC control messages. The command DuplicateSession (type 5 command 2)&#039;s template code will abort() if it fails to duplicate a session&#039;s handle for the requester. Because many sysmodules have limited handle table size (smaller than the browser/other entrypoints), repeatedly requesting to duplicate one&#039;s session will cause the sysmodule to run out of handle table space and abort, causing the service to release all its handles cleanly.&lt;br /&gt;
| Sysmodule crashes.  Most usefully, crashing ldr allows access to fsp-ldr and crashing pm allows access to fsp-pr. Useless after [[4.0.0]], which mitigated a number of single-session service access issues.&lt;br /&gt;
| Unfixed&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| June 24, 2017&lt;br /&gt;
| March 8, 2018&lt;br /&gt;
| [[User:daeken|daeken]]&lt;br /&gt;
|-&lt;br /&gt;
| Transfer Memory leak in nvservices system module&lt;br /&gt;
| The nvservices sysmodule does not clear most of its transfer memory prior to release.&lt;br /&gt;
| The calling process can read key bits of memory, including breaking ASLR (by revealing the image base) and exposing the address of other transfer memory to set up attacks. More details here: [https://daeken.svbtle.com/nintendo-switch-nvservices-info-leak transfermeme (nvservices info leak)] by [[User:daeken|daeken]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| June 2017&lt;br /&gt;
| October 16, 2018&lt;br /&gt;
| [[User:qlutoo|qlutoo]] and [[User:hexkyz|hexkyz]],&lt;br /&gt;
[[User:daeken|daeken]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| OOB write in audio system module&lt;br /&gt;
| Prior to [[2.0.0]], the [[Audio_services#audout:u|AppendAudioOutBuffer]] and [[Audio_services#audin:u|AppendAudioInBuffer]] IPC commands would blindly increment the appended buffers&#039; count while using said count value as an index to where the user data should be copied into. This resulted in an 0x28 bytes, user controlled, out-of-bounds memory write into the [[Audio_services|audio]] sysmodule&#039;s memory space.&lt;br /&gt;
Combined with the [[Audio_services#audout:u|GetReleasedAudioOutBuffer]] or [[Audio_services#audin:u|GetReleasedAudioInBuffer]] commands, this could also be used as an 8 byte infoleak.&lt;br /&gt;
&lt;br /&gt;
In [[2.0.0]], the commands now return error code 0x1099 if the number of unreleased buffers exceeds 0x1F.&lt;br /&gt;
| Code execution under audio sysmodule&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| November 2, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak in nvservices system module&lt;br /&gt;
| The [[NV_services|nvservices]] ioctl [[NV_services#NVMAP_IOC_ALLOC|NVMAP_IOC_ALLOC]] takes an optional argument &amp;quot;addr&amp;quot; which allows the calling process to pass a pointer to user allocated memory for backing a nvmap object. If &amp;quot;addr&amp;quot; is left as 0, nvservices uses the transfer memory region (donated by the user during initialization) instead, when allocating memory for the nvmap object.&lt;br /&gt;
By design, freeing the nvmap object by calling the ioctl [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] returns, in its &amp;quot;refcount&amp;quot; argument, the user address previously supplied if the reference count reaches 0.&lt;br /&gt;
However, prior to [[6.2.0]], the case where the transfer memory region is used to allocate the nvmap object was not taken into account, thus resulting in [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] leaking back an address from within the transfer memory region mapped in nvservices&#039; memory space.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] no longer returns the address when the transfer memory region is used instead of user supplied memory.&lt;br /&gt;
| Combined with other vulnerabilities: Defeating ASLR in nvservices sysmodule.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nvhax (memory corruption in nvservices system module)&lt;br /&gt;
| Prior to [[6.2.0]], the [[NV_services|nvservices]] ioctl [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] would take a single &amp;quot;pwarpstate&amp;quot; argument which would be interpreted by nvservices as a memory pointer for writing 2 &amp;quot;warpstate&amp;quot; structs (one for each Streaming Multiprocessor).&lt;br /&gt;
This resulted in nvservices attempting to blindly memcpy into this user supplied address and trigger a crash. However, if paired with an infoleak, this could be used to arbitrarily write 0x30 bytes anywhere in nvservices&#039; memory space.&lt;br /&gt;
Additionally, the &amp;quot;warpstate&amp;quot; struct itself was never initialized, which means nvservices would leak the 0x30 bytes from the stack. By invoking other ioctls it was also possible to partially control the stack contents and achieve a usable arbitrary memory write primitive.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] now takes 2 inline &amp;quot;warpstate&amp;quot; structs instead of a &amp;quot;pwarpstate&amp;quot; pointer, thus effectively avoiding the bad memcpy.&lt;br /&gt;
| Code execution under nvservices sysmodule&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 5, 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IStorage|AM IStorage]] infoleak&lt;br /&gt;
| Originally the buffer allocated by [[Applet_Manager_services#CreateStorage|CreateStorage]] using the specified input size was not cleared. With [8.0.0+] this was fixed by adding a memset() for the buffer after successful allocation.&lt;br /&gt;
&lt;br /&gt;
Hence, IStorage-&amp;gt;IStorageAccessor-&amp;gt;Read will return uninitialized memory when the Write cmd was not previously used with the specified region.&lt;br /&gt;
| Infoleak from the main [[Applet_Manager_services#IStorage|AM]] heap, allowing defeating ASLR by reading addresses from previously allocated objects.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| December 2018&lt;br /&gt;
| August 9, 2019&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services#hid:sys|hid:sys]] ButtonConfig s32 array-index not validated&lt;br /&gt;
| The input s32 array-index for [[HID_services#hid:sys|hid:sys]] ButtonConfig cmds 1255-1270 was originally not validated. Using a negative or &amp;gt;=5 index results in accessing out-of-bounds data, with an array stored on stack.&lt;br /&gt;
[10.1.0-10.2.0] Each of these cmds will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] Now an unsigned compare is used, with 0 or an error being immediately returned when the value is invalid.&lt;br /&gt;
| hid infoleak, out-of-bounds mem-write anywhere in hid address-space relative to the stack array (with constraints on the data).&lt;br /&gt;
| [[10.1.0]]&lt;br /&gt;
| [[11.0.1]]&lt;br /&gt;
| April 18, 2020&lt;br /&gt;
| July 14, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] sdp_server.cc process_service_search() continuation request p_req validation&lt;br /&gt;
| With [5.0.0+], the following was added to the if-block prior to loading cont_offset from p_req: &amp;lt;code&amp;gt;(p_req + sizeof(cont_offset) &amp;gt; p_req_end)&amp;lt;/code&amp;gt; (which verifies that cont_offset is within message bounds).&lt;br /&gt;
| Bluetooth-sysmodule out-of-bounds read from heap, probably not useful since the read value must match a state field, etc.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] A-63146698&lt;br /&gt;
| [https://android.googlesource.com/platform/system/bt/+/226ea26684d4cd609a5b456d3d2cc762453c2d75 A-63146698] / CVE-2017-0785. See also [https://info.armis.com/rs/645-PDC-047/images/BlueBorne%20Technical%20White%20Paper_20171130.pdf here].&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR (note: not tested on hw).&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] GetAdapterProperty/SetAdapterProperty unchecked memcpy size&lt;br /&gt;
| GetAdapterProperty copies data from stack to the output buffer using the buffer size, without checking the size (when not handling the Name type). SetAdapterProperty copies data to stack from the input buffer using the buffer size, without checking the size.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.0.0]] by replacing the buffer data with a fixed-size-struct.&lt;br /&gt;
| Stack infoleak with GetAdapterProperty, stack buffer overflow (and hence ROP) with SetAdapterProperty.&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| July 17, 2020&lt;br /&gt;
| April 7, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] stack buffer overflow with HID DATA packets&lt;br /&gt;
| The BSA (bt-stack) func bta_hh_co_data copies data from a HID DATA packet to stack without checking the size, then sends it over Uipc. [7.0.0+] The user Uipc callback also copies the input data to stack without checking the size, then sends it to the sharedmem CircularBuffer.&lt;br /&gt;
With [12.0.2+] this was fixed in bta_hh_co_data by clamping the size to a maximum of 0x2BB. The aforementioned buffer overflow in the Uipc callback can&#039;t be triggered since at that point the size was already clamped.&lt;br /&gt;
&lt;br /&gt;
Before this bta_hh_co_data func is reached, there is no validation of the size (such as comparing against the L2CAP MTU) when Basic Mode is being used.&lt;br /&gt;
&lt;br /&gt;
Actually triggering this requires using a data-size larger than the normal L2CAP MTU. This can be done by for example, using raw HCI to send the packet from the remote bluetooth device.&lt;br /&gt;
&lt;br /&gt;
Note that when the remote device is configured as an audio device for [12.0.0+] where [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].TrustedServices was only ever set for audio since system-boot, it is not possible for the remote device to connect to the Switch for HID.&lt;br /&gt;
| ROP under [[Bluetooth_Driver_services|bluetooth]] via HID DATA packet sent by a paired HID bluetooth device. This can be triggered at any time while not in sleep-mode, when not in airplane-mode. The earliest is while the Nintendo Switch logo screen is displayed during system boot.&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| July-August 2020&lt;br /&gt;
| May 11, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] WriteHidData/WriteHidData2/SetHidReport unchecked memcpy size&lt;br /&gt;
| WriteHidData/SetHidReport copies the input struct to stack, then passes it to the funcptr/vfunc call. WriteHidData2 passes the input buffer addr directly to the funcptr/vfunc call. The called func eventually copies the input data to the stack struct using the specified size without validating it.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.1.0]] in WriteHidData/SetHidReport by doing a fixed-size copy into another tmp struct, with the size field being clamped to a maximum of 0x2BB afterwards. This struct is then used when calling the vfunc. The vfuncs called by WriteHidData/WriteHidData2/SetHidReport were also updated to clamp the size to the required maximum value.&lt;br /&gt;
| Stack buffer overflow&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| July 16, 2020&lt;br /&gt;
| July 6, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[HID_services|hid:sys]] SetButtonConfigStorage{name}Deprecated&lt;br /&gt;
| These cmds pass a stack ptr for the StorageName when calling the internal func. Nothing is written to this StorageName. Hence, stack infoleak (data is copied as a NUL-terminated string), which can be later read by the GetButtonConfigStorage{name} cmds.&lt;br /&gt;
&lt;br /&gt;
This was fixed by removing the Deprecated cmds in [[13.0.0]].&lt;br /&gt;
| Infoleak of hid stack from a StorageName readable via GetButtonConfigStorage{name}, up to the NUL-terminator.&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| December 11, 2020&lt;br /&gt;
| September 27, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] EventInfo infoleak&lt;br /&gt;
| The various funcs which send messages to the thread which handles writing to EventInfo, didn&#039;t clear the stack msgbuf. Hence, the various get-EventInfo cmds could return leaked stack data. This likely affected most (?) get-EventInfo cmds, besides CircularBuffer-GetHidReportEventInfo.&lt;br /&gt;
&lt;br /&gt;
This only matters for events where there&#039;s uninitialized regions of the EventInfo, such as events with variable-size data without a memset.&lt;br /&gt;
&lt;br /&gt;
This was fixed by clearing the msgbuf in a number of funcs.&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| &lt;br /&gt;
| During initial [[13.0.0|diff]]. Added to this page on: December 12, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|ssl]] CVE-2021-43527&lt;br /&gt;
| CVE-2021-43527, see also [https://bugs.chromium.org/p/project-zero/issues/detail?id=2237 here] and [https://googleprojectzero.blogspot.com/2021/12/this-shouldnt-have-happened.html here].&lt;br /&gt;
Using BigSig where the server cert sig is RSA-PSS results in the remote server throwing {no shared cipher} error when Switch connects. If however one creates a rootCA using BigSig (RSA-PSS), which then signs a server cert where the server key is RSA (not PSS), the vuln can be triggered (if the rootCA is trusted, via using the import service-cmd). It&#039;s unknown whether there&#039;s other ways to trigger the vuln.&lt;br /&gt;
&lt;br /&gt;
The crash occurs in VFY_Begin when using the previously overwritten data. A bitsize of &amp;lt;code&amp;gt;$((16384 + 32 + 64 + 64 + 64))&amp;lt;/code&amp;gt; is only enough to overwrite cx-&amp;gt;hashcx, to fully overwrite cx-&amp;gt;hashobj an additional 0xC-bytes (additional 96 bits) is needed.&lt;br /&gt;
Note that partial overwrite isn&#039;t an option: this is the func that initializes those fields to begin with, it just does deinit first before initializing hashcx/hashobj (prior to that these fields would be all-zero when not overwritten by the buf-overflow).&lt;br /&gt;
| Heap buffer overflow in [[SSL_services|ssl]], overwriting data including a ptr to an object which is later used to load a funcptr.&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| Switch: December 1-2, 2021&lt;br /&gt;
| Switch: January 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA gatt_process_notification stack buffer overflow&lt;br /&gt;
| gatt_process_notification is the GATT handler for processing notification/indication messages. gatt_process_notification does memcpy to stack from the input bt msg data, without size validation. The input len param isn&#039;t validated in this func either - if the remaining len following op_code is less than 2, a negative value will be used for the data copy to stack.&lt;br /&gt;
These were fixed by adding a bounds check for the size, size==0 is also checked for now.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow, with data received from a bluetooth message&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| January 19, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] TakeScreenShotOfOwnLayer OOB&lt;br /&gt;
| The captureBuf is used as an array index without validation. Data used from this array includes calling a funcptr from the array entry, if set. Eventually this is also used to write bools into this array, one of which is from the command input.&lt;br /&gt;
With [5.0.0+] a func is eventually called to get a ptr determined by the input captureBuf, with nullptr being returned for captureBuf&amp;gt;=0x10. The caller will Abort if nullptr was returned.&lt;br /&gt;
| OOB array access&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] ClearCaptureBuffer OOB&lt;br /&gt;
| The captureBuf is used as an array index without proper validation. There is code validating it, but on failure it just skips over a code-block, with code using captureBuf still being used afterwards. Then this is used to write bools into a global array, one of which is from the command input.&lt;br /&gt;
This was fixed with [9.1.0+] by requiring captureBuf = 0-1.&lt;br /&gt;
| OOB bool writes into an array&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFCONF infoleak&lt;br /&gt;
| Originally bsd ioctl SIOCGIFCONF was handled by setting the data in IPC outbuf0 to the size/addr of IPC outbuf1. These buffers are HipcAutoSelect, so if buf1 is small enough for HipcPointer (otherwise it would be HipcMapAlias) the IPC-buf-ptr leaked into outbuf0 would be located in the codebin-region. Since this is done before the actual ioctl-handling, it doesn&#039;t matter whether the fd is valid.&lt;br /&gt;
This was fixed in [5.0.0+] by using a tmp struct on stack instead of buf0.&lt;br /&gt;
| bsdsockets-sysmodule codebin-region addr infoleak, which allows defeating ASLR.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022 (probably earlier)&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFMEDIA input can contain ptr&lt;br /&gt;
| Originally bsd ioctl SIOCGIFMEDIA used the user-specified ifmediareq structure directly from the input buffer. This includes a ptr. This ptr probably isn&#039;t actually used?&lt;br /&gt;
With [5.0.0+] the structure used as input for the ioctl was changed to using &amp;lt;code&amp;gt;int ifm_ulist[1]&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;int *ifm_ulist&amp;lt;/code&amp;gt; (which is unused). The input structure is copied to a tmp struct which is used as the original ifmediareq structure, with ifm_ulist always NULL. The user can still specify a non-zero ifm_count value, however that&#039;s not useful with ifm_ulist being always NULL.&lt;br /&gt;
| Useless?&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[Joy-Con]] HidCommand PairingIn&lt;br /&gt;
| The joycon protocol handler for PairingIn copies data from stack to the response cmd-buf for sending PairingOut. Only the first byte is set to a type value, the rest is uninitialized stack data.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [15.0.0+] by directly writing to the response data without using stack data.&lt;br /&gt;
| Infoleak of hid stack via a bluetooth/uart message+response with a connected hid controller. This returns addrs for the main-codebin/stack, which allows defeating ASLR.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| September 4, 2020&lt;br /&gt;
| October 10, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[RO_services|ro]] ASLR&lt;br /&gt;
| The RNG used to determine where to randomly map NROs in the target process was TinyMT (nn::os::detail::RngManager output, seeded by 128 bits of entropy). However, TinyMT is not cryptographically secure (and can in fact be analytically solved). &lt;br /&gt;
&lt;br /&gt;
Thus, with a few NRO mapping addresses, one could learn the TinyMT state and derive all previous/future RNG outputs, breaking NRO aslr for all processes. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ro now uses csrng_GenerateRandomBytes to determine the random map address for NROs.&lt;br /&gt;
| Breaking ASLR for all NROs loaded in all processes, allowing predicting all NRO mappings for all processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| Late 2021/Early 2022&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG used by [[NS_Services|ns]]&lt;br /&gt;
| The code generating the sd seed and the data for the [[SD_Filesystem|sd]] private/private1 file, all use nn::os::GenerateRandomBytes, not csrng. The sd-seed is generated first, then private, then private1. This allows deriving sd-seed from private since this uses TinyMT, as long as the system shipped from factory on [2.0.0+]. private1 is only useful if the system shipped with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
There&#039;s various other code in ns using nn::os::GenerateRandomBytes as well. This includes the code generating ns_systemseed when it doesn&#039;t exist. ns_systemseed is generated at some point after the various sd-seed-related code (both are called from the same func). Hence, ns_systemseed can be recovered with the above method as well, if it wasn&#039;t recreated at some point without regenerating the above nand-save used with the above.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ns now uses csrng_GenerateRandomBytes for sd-seed/private and ns_systemseed, etc. This only matters when the file is newly generated, which is usually only for factory-fresh systems which ship with this version. This would also apply after being deleted during {System Settings -&amp;gt; Formatting Options -&amp;gt; Initialize Console}, and also with a refurbished console.&lt;br /&gt;
| Generation of a system&#039;s sd-seed allowing decryption of the NAX0 layer of data on [[SD_Filesystem|SD]], derived using the private file from SD. Applies to systems which factory-shipped with a system-version prior to [[15.0.0]] (that is, [2.0.0-14.1.2]).&lt;br /&gt;
| [[15.0.0]], for newly generated files&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| December ~12, 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA bsa_sv_av_cback stack buffer overflow&lt;br /&gt;
| bsa_sv_av_cback checks for two input type values (0xC/0xD), on match it copies the input data to stack without size validation. Then it sends an internal request with this data (likewise when the type values don&#039;t match, except the input data is passed directly with a small size), then it returns.&lt;br /&gt;
This requires the AV functionality added with [13.0.0+], however this func is only reachable with [14.0.0+] where the required functionality was enabled.&lt;br /&gt;
&lt;br /&gt;
This requires message data that&#039;s larger than the MTU, so fragmentation must be used, or manually send the ACL data to bypass the MTU.&lt;br /&gt;
&lt;br /&gt;
This can be triggered via an AVRC message with opcode=0x0 (vendor). The above type 0xC is reached via AVRC ctype 0..4, while 0xD is reached with ctype&amp;gt;=0x9.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] the size value for the memcpy (which is also written to the request struct) is clamped to a max value.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow on [14.0.0-14.1.2], with data received from an AVRC bluetooth message with a bluetooth-audio device.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[WLAN_services|wlan]] SetMulticastList heap buffer overflow&lt;br /&gt;
| The [[WLAN_services#SetMulticastList|SetMulticastList]] command allocates a 0x31-bytes sized buffer and copies to it as much [[WLAN_services#MacAddress|MacAddress]] values from the input [[WLAN_services#MulticastList|MulticastList]] as specified by the &amp;quot;Count&amp;quot; field, but this field is never validated. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] error code 0x1906B is now returned if &amp;quot;Count&amp;quot; is larger than 8.&lt;br /&gt;
| wlan-sysmodule heap buffer overflow.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| June 6, 2022&lt;br /&gt;
| November 9, 2022&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Internet Browser == &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2016-4657&lt;br /&gt;
| WebKit vuln discovered around August 2016. Most notably used in the iOS 9.3.X exploit. A simple PoC can be found [https://github.com/LiveOverflow/lo_nintendoswitch/blob/master/poc1.html here]. This was later exploited by [https://twitter.com/qwertyoruiopz Qwertyoruiop] using an adjusted version of his iOS 9.3 webkit exploit (others exploited this prior to then).&lt;br /&gt;
|&lt;br /&gt;
| [[2.1.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| Original: August 2016&lt;br /&gt;
Switch: March 3rd-4th 2017&lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2017-7005&lt;br /&gt;
| WebKit type confusion.&lt;br /&gt;
|&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2016-4622&lt;br /&gt;
| WebKit memory corruption bug. This bug was incorrectly re-introduced in [[4.0.0]]. See [http://www.phrack.org/papers/attacking_javascript_engines.html here] for a detailed write-up from the author.&lt;br /&gt;
|&lt;br /&gt;
| [[6.1.0]]&lt;br /&gt;
| [[6.1.0]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-4441&lt;br /&gt;
| WebKit memory corruption bug. See [https://bugs.chromium.org/p/project-zero/issues/detail?id=1685&amp;amp;desc=2 here].&lt;br /&gt;
|&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Whitelist ===&lt;br /&gt;
This section documents [[Internet_Browser|WebApplet]] whitelist issues in applications. These can be used to load your own browser content over plain HTTP, which then for example could be used for web-applet exploitation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Application&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with app version&lt;br /&gt;
!  Newest app version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Sonic Mania&lt;br /&gt;
| Originally this game launched web-applet with a plain-http URL for displaying the manual, this was later changed to https. Originally the whitelist only had 1 entry for a http URL, this was later replaced with various https-only URLs.&lt;br /&gt;
| 1.04, unknown if fixed with an earlier update&lt;br /&gt;
| 1.04&lt;br /&gt;
| January (?) 2022&lt;br /&gt;
| February 23, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NintendoSDK ==&lt;br /&gt;
This section documents vulnerabilities for NSOs in NintendoSDK.&lt;br /&gt;
&lt;br /&gt;
=== nnSdk ===&lt;br /&gt;
This section documents vulnerabilities for nnSdk (sdknso).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in SDK [[System_Versions|version]]&lt;br /&gt;
!  Last SDK version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services|hidbus]] GetJoyPollingReceivedData buffer overflow&lt;br /&gt;
| hidbus GetJoyPollingReceivedData doesn&#039;t validate the u8 size used for memcpy, when copying the data to the output JoyPollingReceivedData. With 11.x, the size is now clamped to a maximum of 0x2C (regardless of polling-mode). Note that 0x2C is the data-size for JoyButtonOnlyPollingDataAccessor, the other polling-modes have a smaller size.&lt;br /&gt;
&lt;br /&gt;
The hid-sysmodule code which writes data here does handle it properly: size is clamped to a max size, and the data-read uses a fixed-size anyway (hence there&#039;s no way to trigger this sdknso vuln with the hid-sysmodule tmem writing code).&lt;br /&gt;
&lt;br /&gt;
This could only be exploited if one directly writes to the tmem when one has previously compromised hid-sysmodule, without using the normal tmem-writing func for this.&lt;br /&gt;
&lt;br /&gt;
There are only a few [[HID_services#ExternalDevices|apps]] which use hidbus.&lt;br /&gt;
| Triggering a buffer overflow in an application which uses hidbus GetJoyPollingReceivedData, from a previously compromised hid-sysmodule.&lt;br /&gt;
| 11.x.0&lt;br /&gt;
| 11.4.0&lt;br /&gt;
| March 2020&lt;br /&gt;
| December 3, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Profile_Selector|Profile Selector]] uninitialized input data&lt;br /&gt;
| Originally unused regions of [[Profile_Selector]] UiSettings/UserSelectionSettings were not cleared prior to being sent to the applet. With 1.x.x these are now properly memset().&lt;br /&gt;
| Stack infoleak from user-process, sent to the applet.&lt;br /&gt;
| 1.x.x&lt;br /&gt;
| 11.4.0&lt;br /&gt;
| November-December 2019&lt;br /&gt;
| December 31, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pia ===&lt;br /&gt;
This section documents vulnerabilities for [https://github.com/Kinnay/NintendoClients/wiki/Pia-Overview Pia].&lt;br /&gt;
&lt;br /&gt;
In v5.11.3 (exact starting version unknown) the fixes aren&#039;t present for the below vulns which were fixed in v5.9.3, while in v5.18.98 these are present (exact starting version unknown). This probably indicates that the vuln fixes were backported from a newer Pia version to v5.9.3.&lt;br /&gt;
&lt;br /&gt;
The Pia packet handlers are only active when the game is using multiplayer. LanProtocol is only active in the games which are actively using the LAN-mode option (not Ldn) - only certain games support LAN-mode. The LanProtocol Pia packet handler can be reached while in a lobby or searching for one.&lt;br /&gt;
&lt;br /&gt;
Most Pia packets require an active StationProtocol connection to be active with {InetAddr which the packet was received from}, otherwise the packet is filtered out. The only protocols which don&#039;t use filtering are the following: NatTraversalProtocol, LanProtocol, StationProtocol, LocalProtocol.&lt;br /&gt;
&lt;br /&gt;
Note that broadcast IP-dest Pia packets are accepted - this can be used to target every device on the network which is using Pia (which is really only useful with {above protocols} due to the filtering mentioned above, unless one also handles StationProtocol).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in Pia version&lt;br /&gt;
!  Last Pia version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::RelayRouteManageJob::UpdateConnectionReport buffer overflow&lt;br /&gt;
| nn::pia::session::RelayRouteManageJob::UpdateConnectionReport() checks that the input size is at least {value}, but there&#039;s no max size check. This is used to memcpy from the input to elsewhere - hence buf-overflow if size is too large. The dst buffer is allocated on the pead heap - this buffer is probably small.&lt;br /&gt;
Note that there&#039;s various requirements before it would actually reach the memcpy, such as &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::Mesh::IsHost() const&amp;gt;&amp;lt;/code&amp;gt; must return true.&lt;br /&gt;
&lt;br /&gt;
In fixed versions immediately after the StationIndex validation it now does: &amp;lt;code&amp;gt;if(statefield+0x10&amp;lt;input_size) return;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called from nn::pia::session::MeshProtocol::ParseConnectionReport().&lt;br /&gt;
| Heap buffer overflow triggered by a Pia MeshProtocol message sent to a host device.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 11, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::lan::LanProtocol::ParseSessionMessage buffer overflow&lt;br /&gt;
| nn::pia::lan::LanProtocol::ParseSessionMessage() calls nn::pia::lan::LanSessionMessage::Deserialize() to deserialize the message payload data buffer into the LanSessionMessage object on stack. LanSessionMessage::Deserialize (among other things) memcpys data from the input buffer to the object, using an u32 from the input buffer - there is no size validation in Deserialize itself.&lt;br /&gt;
There is a size check immediately after calling Deserialize() to verify &amp;lt;code&amp;gt;payloadsize=={u32val}+{constant}&amp;lt;/code&amp;gt;, returning on fail - but this doesn&#039;t matter for too-large-size.&lt;br /&gt;
&lt;br /&gt;
In fixed versions Deserialize now does bounds checking, both for the minimum message size and clamping the memcpy size to a constant. An error is thrown if the clamped memcpy size is larger than the message size. The caller now checks the ret properly, previously it was ignored.&lt;br /&gt;
&lt;br /&gt;
Following the size check in ParseSessionMessage() it calls &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::Mesh::IsProcessingLeaveMesh() const&amp;gt;&amp;lt;/code&amp;gt;, returning if ret is false.&lt;br /&gt;
&lt;br /&gt;
Then it calls nn::pia::lan::LanProtocol::ReceivedFragmentData::Receive(), with the memcpy&#039;d buffer/size from the above LanSessionMessage, and other fields from LanSessionMessage. This eventually memcpys the input buffer to object+{offset}+{chunksize_field}*inputu8, there is no validation for size or inputu8 (except for the above size check). Hence, if the u8 is large enough, this would result in a heap buffer overflow.&lt;br /&gt;
&lt;br /&gt;
In fixed versions ReceivedFragmentData::Receive added a bunch of validation before the memcpy.&lt;br /&gt;
| Stack/heap buffer overflow triggered by a Pia LanProtocol message.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 14, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::SessionProtocol::ParseLeaveMeshInvitation buffer overflow&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::SessionProtocol::ParseLeaveMeshInvitation(nn::pia::transport::ReceivedMessageAccessor const&amp;amp;)&amp;gt;&amp;lt;/code&amp;gt; This immediately returns if *(ReceivedMessageAccessor+16) is 0. Then the input data is deserialized. The input u64 array is deserialized to stack, the u8 arraycount field from input is not validated.&lt;br /&gt;
&lt;br /&gt;
Hence, stack buffer overflow. Note that there&#039;s similar loop code in nearby funcs, which do validate the count properly.&lt;br /&gt;
&lt;br /&gt;
In fixed versions the arraycount field is now validated.&lt;br /&gt;
&lt;br /&gt;
SessionProtocol uses ReliableSlidingWindow MessageHeader, with a maximum message size of 0x100. The allocated size used for the above u64 array is also 0x100-bytes. Hence, when triggering a buf overflow the data after the buffer is uncontrolled data from the SessionProtocol object.&lt;br /&gt;
| Stack buffer overflow triggered by a Pia SessionProtocol message.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 14, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Optional Pia packet encryption&lt;br /&gt;
| Pia packet encryption is optional. If the encryption flag is disabled, the packet handler will accept it and skip crypto.&lt;br /&gt;
In fixed versions immediately after grabbing a packet, it now checks the crypto flag. If it&#039;s plaintext the packet is dropped.&lt;br /&gt;
&lt;br /&gt;
This can be used to send a plaintext Pia packet without needing to handle encryption, especially useful if the session-key can&#039;t be obtained (online-play matchmaking). This could be combined with other vulns if wanted.&lt;br /&gt;
| Sending a plaintext Pia packet without needing to handle encryption.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.3 (and later versions)&lt;br /&gt;
| &lt;br /&gt;
| November 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::{JoinMeshJob/ProcessUpdateMeshJob}::SetStationDataList OOB read/write/vfunc-call&lt;br /&gt;
| &amp;lt;code&amp;gt;nn::pia::session::JoinMeshJob::SetStationDataList&amp;lt;/code&amp;gt;is called by &amp;lt;code&amp;gt;nn::pia::session::MeshProtocol::ParseJoinResponse(nn::pia::transport::ReceivedMessageAccessor const&amp;amp;)&amp;gt;&amp;lt;/code&amp;gt; with the ReceivedMessageAccessor buffer.&lt;br /&gt;
SetStationDataList will update state and immediately return if the join was denied. It will also validate the num_mesh_stations field against state. ParseJoinResponse also essentially verifies that the message was received from the host device.&lt;br /&gt;
&lt;br /&gt;
The input buffer size is ignored.&lt;br /&gt;
&lt;br /&gt;
The num_fragments field must be value 1 or &amp;lt;=3 otherwise it will return, there&#039;s two seperate code blocks handling these.&lt;br /&gt;
&lt;br /&gt;
Other than the checks at the start, there&#039;s no validation for the index fields. So large enough values could result in OOB-reads.&lt;br /&gt;
&lt;br /&gt;
When handling multiple fragments, it will loop through the stationinfo list. There is no validation for the u8 count field or the baseindex field. It calls a vfunc from obj baseptr+index*{entrysize} with data from the buffer, where index starts with the above baseindex field. Afterwards, an u8 is copied into an u32 array (with certain versions an u16 is deserialized into an u16 array).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nn::pia::session::ProcessUpdateMeshJob::UpdateStationDataList&amp;lt;/code&amp;gt; is (eventually) called from &amp;lt;code&amp;gt;nn::pia::session::MeshProtocol::ParseUpdateMesh&amp;lt;/code&amp;gt;, which has similar issues to the above.&lt;br /&gt;
&lt;br /&gt;
Note that ParseJoinResponse/ParseUpdateMesh essentially require the message to be received from the host device.&lt;br /&gt;
&lt;br /&gt;
With fixed versions (v5.18.98, exact version unknown) various validation was added. Additional/updated validation was added in a later version (v5.31.0, exact version unknown).&lt;br /&gt;
| OOB read/write / vfunc call where the object is selected by an OOB index, triggered by a Pia MeshProtocol message.&lt;br /&gt;
| v5.18.98 and v5.31.0 (exact versions unknown).&lt;br /&gt;
| v5.31.0&lt;br /&gt;
| November 18, 2022&lt;br /&gt;
| November 21, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Insecure encryption&lt;br /&gt;
| Originally Pia packets used AES-ECB encryption. As documented [https://github.com/Kinnay/NintendoClients/wiki/Pia-Overview here] it was later changed with v5.7.0 to AES-GCM. Each 0x10-byte block would have the same encrypted block output where the plaintext 0x10-byte data is the same.&lt;br /&gt;
The mechanism for generating the Pia SessionKey for LAN has also changed over time.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Kinnay/NintendoClients/wiki/LAN-Protocol LAN] non-Pia-encapsulated packets were also originally sent in plaintext, however at some point it was changed to mostly encrypted.&lt;br /&gt;
| &lt;br /&gt;
| AES-GCM fix: v5.7.0&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::transport::UnreliableProtocol::Dispatch buffer overflow&lt;br /&gt;
| &amp;lt;code&amp;gt;nn::pia::transport::UnreliableProtocol::Dispatch&amp;lt;/code&amp;gt; memcpys data from the message into a list entry, without size validation. If the pia packet is the max size, it will only overwrite the 0xC-bytes which were written to immediately before the memcpy: the u32 size and the 8-byte StationAddress (depending on the version there can also be 4-byte padding after the size for alignment).&lt;br /&gt;
However, nn::pia::transport::UnreliableProtocol::Receive will clamp the size from the list entry to the outbuf size when doing the memcpy. So this is probably useless.&lt;br /&gt;
&lt;br /&gt;
It&#039;s unknown whether there&#039;s a version where more data could be overwritten, and whether that would be useful.&lt;br /&gt;
&lt;br /&gt;
This is fixed in v5.31.0, exact version unknown. The message is dropped if too large in Dispatch.&lt;br /&gt;
| Small buffer overflow triggered by a Pia UnreliableProtocol message.&lt;br /&gt;
| v5.31.0, exact version unknown.&lt;br /&gt;
| v5.18.98/v5.31.0&lt;br /&gt;
| November 2022&lt;br /&gt;
| November 29, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Uncleared input structs for [[LDN_services|LDN]]&lt;br /&gt;
| The Pia code using ldn CreateNetwork*/ConnectNetwork*/Scan doesn&#039;t properly memset the input data for SecurityConfig/ScanFilter (when keysize is less than 0x40 for the former). Hence, infoleak from games is sent to ldn (structs are located on stack, so stack data is leaked). This requires ldn compromise/mitm to obtain the leaked data - these are not sent over the network.&lt;br /&gt;
With v6.20.1 (exact version unknown - fix isn&#039;t present in v5.32.0), the code using Scan* now clears the input ScanFilter properly. With v6.25.1 (exact version unknown - fix isn&#039;t present in v6.23.3), the code using CreateNetwork*/ConnectNetwork* now clears the input SecurityConfig properly.&lt;br /&gt;
| Infoleak from games with LDN cmds, requires compromised sysmodule/mitm.&lt;br /&gt;
| v6.20.1 and v6.25.1, exact versions unknown.&lt;br /&gt;
| v5.32.0/v6.20.1/v6.23.3/v6.25.1&lt;br /&gt;
| &lt;br /&gt;
| December 7, 2022&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ENL ===&lt;br /&gt;
This section documents vulnerabilities for [https://github.com/kinnay/NintendoClients/wiki/ENL-Protocol ENL].&lt;br /&gt;
A framework used by Nintendo games including Mario Kart 8 Deluxe, Splatoon 2 / 3, Mario Maker 2, and more.&lt;br /&gt;
&lt;br /&gt;
Fun fact, this library appears to re-use network code and concepts from older Nintendo titles such as Mario Kart 7 and some Wii multiplayer games.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in Enl version&lt;br /&gt;
!  Last Enl version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| enl::TransportManager::updateReceiveBuffer_() nullptr deref&lt;br /&gt;
| enl::TransportManager::updateReceiveBuffer_() is called when the ENL framework receives a PIA packet from a client, it will fully trust the ENL header which includes a &amp;quot;ContentTransporter&amp;quot; type (ID) and a length.&lt;br /&gt;
The function will try to fetch the content transporter by ID using &amp;lt;code&amp;gt;enl::TransportManager::getContentTransporter(unsigned char const &amp;amp;)&amp;lt;/code&amp;gt;, it returns NULL if there&#039;s no content transporter with the same ID&lt;br /&gt;
&lt;br /&gt;
*NOTE: The function may be inlined&lt;br /&gt;
&lt;br /&gt;
Then it will try to call a virtual method: &amp;lt;code&amp;gt;virtual size_t readyReceiveStream(enl::RamReadStream&amp;amp;, enl::Buffer*, size_t)&amp;lt;/code&amp;gt;, dereferencing the pointer to fetch the vtable ptr&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/Rambo6Glaz/c088e2ed7a12db08f6322e9f7a3c4911 Pseudocode of the function before it was fixed]&lt;br /&gt;
&lt;br /&gt;
| nullptr dereference triggered by an invalid content transporter type in the ENL header (it will crash the game/process)&lt;br /&gt;
| Unknown&lt;br /&gt;
| Depends on the game&lt;br /&gt;
| Early April 2022&lt;br /&gt;
| November 16, 2022&lt;br /&gt;
| [[User:Rambo6Glaz|Rambo6Glaz]], Kinnay (massive RE help)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There&#039;s another one more interesting but it will have to wait a bit :)&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=12170</id>
		<title>Switch System Flaws</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=12170"/>
		<updated>2023-02-21T16:57:14Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Kernel */ rip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo Switch. This page is a list of publicly known Switch system flaws.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
Flaws in this category pertain to the underlying hardware that powers the Switch.&lt;br /&gt;
&lt;br /&gt;
This includes components shared across Tegra based devices such as the [[TSEC]], the [[Security_Engine|Security Engine]], the [[GPU]] and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| GMMU DMA attack&lt;br /&gt;
| The Switch&#039;s GPU includes a separate MMU (GMMU) that is allowed to bypass the system&#039;s IOMMU (SMMU). By accessing the GPU&#039;s MMIO region and manipulating the page table entries in the GMMU, an attacker can read/write any portion of the DRAM (except memory carveouts).&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Works around this hardware flaw by using memory pool partitioning. You can no longer escalate into sysmodules with GPU DMA because all their memory is allocated using heap that&#039;s carved out.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by adding a new register which restricts what memory untranslated DMA requests may access. Untranslated GPU DMA may now only access the GPU carveout (physmem 0x80002000-0x80006000), which the GPU already has legitimate and exclusive access to.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Summer 2017&lt;br /&gt;
| December 28, 2017&lt;br /&gt;
| [[User:hexkyz|hexkyz]], [[User:SciresM|SciresM]] and [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Weak Security Engine context validation&lt;br /&gt;
| The Tegra X1 supports a &amp;quot;deep sleep&amp;quot; feature, where everything but DRAM and the PMC registers lose their content (and the SoC loses power). Upon awaking, the bootrom re-executes, restoring system state. Among these stored states is the Security Engine&#039;s saved state, which uses AES-128-CBC with a random key and all-zeroes IV. However, the bootrom doesn&#039;t perform a MAC on this data, and only validates the last block. This allows one to control most of security engine&#039;s state upon wakeup, if one has a way to modify the encrypted state buffer.&lt;br /&gt;
&lt;br /&gt;
With a way to modify the encrypted state buffer, one can thus dump keys from &amp;quot;write-only&amp;quot; keyslots, etc.&lt;br /&gt;
&lt;br /&gt;
This also bypasses the SBK protection of the bootROM: indeed, at warmboot, bootROM will always clear keyslot 0xE to prevent malicious code from saving the SBK. Moving the SBK to another keyslot in the saved context renders this protection moot.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by streamlining the context save process; security engine contexts are now saved to protected memory which the CPU cannot access or modify.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| December 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Security Engine keyslots vulnerable to partial overwrite attack&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 security engine supports writing keyslot data to the engine with syntax as follows: &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_ADDR = (keyslot &amp;lt;&amp;lt; 4) | (dword_index_in_keyslot); &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_DATA = readle32(key, dword_index_in_keyslot * 4); &lt;br /&gt;
&lt;br /&gt;
However, the Security Engine flushes writes to the internal key tables immediately when AES_KEYTABLE_DATA is written -- this allows one to overwrite a single dword of a key at a time, and thus brute force the contents of keyslots in time (2^32 * 8) = 2^35 instead of 2^256.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Theorized Summer 2017 due to suggestive syntax, confirmed April 9, 2018&lt;br /&gt;
| April 9, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], almost surely others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-6242 (leveraged by the ShofEL2 and Fusée Gelée exploits)&lt;br /&gt;
| The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) &amp;quot;application processors&amp;quot; at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01) (also fixed independently on Tegra186).&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| [[User:Shuffle2|shuffle2]] and fail0verflow (originally),&amp;lt;br&amp;gt; [[User:Ktemkin|ktemkin]] and ReSwitched Team (independently),&amp;lt;br&amp;gt; [[User:Naehrwert|naehrwert]] (independently),&amp;lt;br&amp;gt; [[User:Hexkyz|hexkyz]] (independently),&amp;lt;br&amp;gt; st4rk with [[User:Shinyquagsire23|Shiny Quagsire]] and Dazzozo (independently),&amp;lt;br&amp;gt; and many others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Poor validation of bootrom SDRAM configuration parameters leads to arbitrary writes in bootrom&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 bootrom supports saving SDRAM parameters to scratch registers, and using the saved configuration to enable DRAM during warmboot.&lt;br /&gt;
&lt;br /&gt;
The code that parses these parameters does if (params-&amp;gt;EmcBctSpareN) *params-&amp;gt;EmcBctSpareN = params-&amp;gt;EmcBctSpareNPlusOne for most N, without validating either the address or value written to it.&lt;br /&gt;
There are other arbitrary writes in this code, as well (e.g. BootromPatch parameters intended for patching MISC registers do not check a relative offset to 0x7000000, etc).&lt;br /&gt;
&lt;br /&gt;
This allows a user with access to the PMC registers (via pre-sleep bpmp execution, or otherwise) to gain arbitrary bootrom code execution.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by validating that the spare writes/bootrom patch before performing them.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| 2017&lt;br /&gt;
| December 16, 2018&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC ROM does not clear crypto registers after signature verification&lt;br /&gt;
|&lt;br /&gt;
TSEC supports executing signed-microcode at a greater privilege level than normal payloads.&lt;br /&gt;
&lt;br /&gt;
When jumping to signed microcode, the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
TSEC ROM then calculates the expected signature and compares it to the user-supplied one in $c6. On match, the secure payload is executed, and on failure an exception is raised.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM fails to clear the crypto registers used to calculate the expected signature in either of the success/failure cases.&lt;br /&gt;
&lt;br /&gt;
Thus, with some way of obtaining the contents of crypto registers (e.g. ROP under some secure payload), an attacker can dump intermediary values from signature calculation.&lt;br /&gt;
&lt;br /&gt;
With enough data/trial/error, this is enough to reconstruct the signature algorithm:&lt;br /&gt;
* mac = &amp;lt;davies meyer hash of (page || address of page) for each 0x100 page in the payload&amp;gt;&lt;br /&gt;
* key = AES-ENCRYPT(hardware csecret 0x1, seed)&lt;br /&gt;
* signature = AES-ENCRYPT(key, mac)&lt;br /&gt;
&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC signature validation design flaw leads to fake-signing&lt;br /&gt;
|&lt;br /&gt;
As mentioned above, when jumping to signed microcode the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM performs no validation on the input seed used to generate the signing key.&lt;br /&gt;
&lt;br /&gt;
This leads to the following attack:&lt;br /&gt;
* Attacker gains rop under any secure microcode payload with signature = S.&lt;br /&gt;
* Attacker uses the &amp;quot;csigenc&amp;quot; instruction to obtain K = AES-ENCRYPT(hardware csecret 0x1, S).&lt;br /&gt;
* Attacker jumps to their own microcode with $c6 = &amp;lt;signature calculated on pc using K&amp;gt;, $c7 = S&lt;br /&gt;
* TSEC ROM calculates key = AES-ENCRYPT(hardware csecret 0x1, S) = K, and the signature check passes.&lt;br /&gt;
* Attackers microcode is executed in secure mode as though it were signed by NVidia.&lt;br /&gt;
&lt;br /&gt;
Thus an attacker who has exploited *any* secure payload may use this to obtain a &amp;quot;fake signature key&amp;quot;, which can be used to sign and execute arbitrary microcode in secure mode.&lt;br /&gt;
&lt;br /&gt;
Note: this does not break the TSEC cryptosystem, as the csigenc mechanism relies on the signature of the executing microcode, and fakesigning produces different signatures from NVidia that cannot be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| ROP under TSEC secure bootrom via DMA engine stack overwrite (--xploit)&lt;br /&gt;
| TSEC DMA engine does not stop when entering TSEC secure bootrom. By pointing TSEC DMA to current stack before secure bootrom entry, stack can be controlled. &lt;br /&gt;
&lt;br /&gt;
One can then use blind ROP against the TSEC secure bootrom (which is execute only, and cannot be dumped).&lt;br /&gt;
&lt;br /&gt;
With sufficient effort, an attacker can construct a ROP chain that leads to csigcmp being executed with fully controlled arguments.&lt;br /&gt;
&lt;br /&gt;
This allows for arbitrary heavy secure mode code execution with the current signature set to an arbitrary value.&lt;br /&gt;
&lt;br /&gt;
This completely breaks the TSEC cryptosystem, by allowing one to obtain the result of csigenc with signature = &amp;lt;any desired value&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This has many uses/results, notably including dumping the &amp;quot;true&amp;quot; signature key (set signature = zeroes, perform csigenc using csecret 0x1).&lt;br /&gt;
| None&lt;br /&gt;
| TSEC for all Tegra devices&lt;br /&gt;
| Late 2018&lt;br /&gt;
| January 2021&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]/[[User:SciresM|SciresM]], [[User:Vale|Vale]]/[[User:Thog|Thog]] (independently), [[User:Tatsuko|Tatsuko]] (independently), possibly others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Boot straps are not relatched on watchdog resets (strapwn)&lt;br /&gt;
| On boot, the BOOTSELECT, RCM and RAM_CODE straps are latched from external GPIO to determine which boot medium to use and verify from in bootrom. However, APB_MISC_PP_STRAPPING_OPT_A can be overwritten with arbitrary values following bootrom. Write access to PP_STRAPPING_OPT_A would otherwise be mundane, however these straps are not relatched during a watchdog reset (despite being latched during other software resets), allowing for arbitrary straps to be selected and executed in bootrom.&lt;br /&gt;
&lt;br /&gt;
This allows setting NVPROD_UART on some hardware configurations where it would normally be unavailable (ie on Jetson Nano boards), but is otherwise mostly useless and/or useful for testing unintended boot options (such as USB Mass Storage boot) without having to move boot strap resistors.&lt;br /&gt;
| Unknown&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| May 2020&lt;br /&gt;
| April 30, 2021&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
Flaws in this category pertain to the firmware running on hardware devices, such as wifi/bluetooth, etc. Firmware is generally uploaded by sysmodules.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Broadpwn (CVE-2017-9417)&lt;br /&gt;
| See [https://blog.exodusintel.com/2017/07/26/broadpwn/ here] and [https://www.blackhat.com/docs/us-17/thursday/us-17-Artenstein-Broadpwn-Remotely-Compromising-Android-And-iOS-Via-A-Bug-In-Broadcoms-Wifi-Chipsets.pdf here].&lt;br /&gt;
| Code execution on the wifi controller (untested on Switch).&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Switch: July 2022&lt;br /&gt;
| Switch: July 30, 2022&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
== Bootloader ==&lt;br /&gt;
Flaws in this category pertain to any bootloader component such as the [[Package1#Package1ldr|package1ldr]], the [[Package1#Section_1|NX bootloader]] or the [[Package1#Section_0|warmboot binary]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Null-dereference in panic()&lt;br /&gt;
| The Switch&#039;s stage 1 bootloader, on panic(), clears the stack and then attempts to clear the Security Engine. However, it does so by dereferencing a pointer to the SE in .bss (initially NULL), and this pointer doesn&#039;t get initialized until partway into the bootloader&#039;s main() after several functions that might panic() are called. Thus, a panic() caused prior to SE initialization would result in the SE pointer still being NULL when dereferenced. &lt;br /&gt;
The BPMP doesn&#039;t have an active MPU and the bus won&#039;t data abort on an invalid address, so no exception will be entered: it&#039;ll end up overwriting some exception vectors with NULL before halting.&lt;br /&gt;
&lt;br /&gt;
In 3.0.0, this was fixed by moving the security engine initialization earlier in main(), before the first function that could potentially panic().&lt;br /&gt;
| Some exception vectors overwritten with NULL, before SBK/other keyslots are cleared. Probably useless for anything more interesting.&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Early July, 2017&lt;br /&gt;
| July 30, 2017&lt;br /&gt;
| Everyone who diff&#039;d 2.3.0 and 3.0.0 Package1&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DIS_PGM not written by package1 &lt;br /&gt;
| The switch&#039;s hardware fuse driver contains a write-once bit in a register called &amp;quot;FUSE_DIS_PGM&amp;quot;, which disables burning fuses until the next reboot. While Nintendo&#039;s bootloader code for waking up from sleep writes this on all firmware, the actual package1 initial bootloader forgets to write to it on cold reboot. &lt;br /&gt;
&lt;br /&gt;
This isn&#039;t too big of a problem because another fuse is burnt on retail devices (production mode), which prevents burning *all* fuses other than ODM_RESERVED ones in hardware.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 3.0.0 by writing to the register on cold boot (although the write happens in TZ instead of package1 where it should take place, possibly to obfuscate the fact that they made this mistake).&lt;br /&gt;
| Burning arbitrary ODM reserved fuses with TZ code execution, which should never be possible for non-bootloader code.&lt;br /&gt;
&lt;br /&gt;
Warning: one could irreparably brick one&#039;s console by playing with this.&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Late summer/early fall 2017&lt;br /&gt;
| December 31, 2017&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| maconstack (TSEC firmware leaves MAC on the stack)&lt;br /&gt;
| Package1ldr loads a firmware blob into TSEC early on boot. This piece of code runs on the TSEC in Authenticated Mode and has the sole purpose of generating the per-console TSEC key (see [[Cryptosystem]]).&lt;br /&gt;
&lt;br /&gt;
As a way to mitigate attacks, the TSEC firmware blob is split into 3 stages: [[TSEC_Firmware#Boot|Boot]] which is unencrypted and unsigned, [[TSEC_Firmware#KeygenLdr|KeygenLdr]] which is unencrypted but signed and [[TSEC_Firmware#Keygen|Keygen]] which is encrypted and signed.&lt;br /&gt;
Boot loads a static pre-generated signature into the Falcon&#039;s CPU crypto registers, loads KeygenLdr into the Falcon&#039;s CODE region and jumps to it. Execution will proceed into KeygenLdr in Heavy Secure Mode if, and only if, the loaded signature matches the one Falcon calculates internally for KeygenLdr.&lt;br /&gt;
&lt;br /&gt;
Among various things, KeygenLdr will attempt to do a &amp;quot;backwards&amp;quot; security check by calculating a CMAC over Boot and comparing it with a known hash stored in the TSEC firmware&#039;s key data (a small buffer stored after Boot&#039;s code). If the hashes don&#039;t match, execution aborts.&lt;br /&gt;
&lt;br /&gt;
KeygenLdr stores the calculated Boot&#039;s CMAC in the stack, but forgets to clear it. Since the stack is located in Falcon&#039;s DATA region, loading the TSEC firmware blob and dumping the DATA region afterwards (via MMIO) will reveal the calculated hash.&lt;br /&gt;
This allows using KeygenLdr as an oracle to generate a valid CMAC for arbitrary Boot code. Replacing the CMAC in the TSEC firmware&#039;s key data region results in KeygenLdr accepting any Boot code, thus rendering this security measure useless.&lt;br /&gt;
&lt;br /&gt;
Additionally, since signed Falcon code can&#039;t be revoked without an hardware revision, an attacker can always reuse the flawed KeygenLdr code even if a fix is issued.&lt;br /&gt;
| Running TSEC firmware&#039;s KeygenLdr in a user controlled environment.&lt;br /&gt;
| None&lt;br /&gt;
| [[5.0.2]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 29, 2018&lt;br /&gt;
| [[User:Hexkyz|hexkyz]], [[User:Rei|Reisyukaku]] (independently), probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| pk1ldrhax&lt;br /&gt;
| Package1ldr decrypts and verifies the keyblob inside of the current BCT in order to get the package1 key, and then uses the package1 key to decrypt package1. It then validates package1 before jumping to it by checking the PK11 magic number, and that the section sizes sum to the expected size (and are individually less than the expected size). &lt;br /&gt;
&lt;br /&gt;
However, package1ldr does not actually validate the package1 key against a fixed vector (much like kernel9loader forgot to do so on the 3ds). This would normally not matter, as keyblobs are validated -- however, with bootrom code execution one can dump SBK and forge keyblobs, and thus control the package1 key. &lt;br /&gt;
&lt;br /&gt;
Thus (&#039;&#039;&#039;in theory, but not in practice due to the size of the brute force required&#039;&#039;&#039;) one can replace the package1 key with garbage, causing package1 to decrypt into garbage, and hope that this garbage passes validation checks and that package1ldr jumping into the garbage will do something useful.&lt;br /&gt;
&lt;br /&gt;
This was fixed incidentally in [[6.2.0]], as pk1ldr does not use keyblob data to decrypt package1 any more.&lt;br /&gt;
&lt;br /&gt;
| With a large enough brute force: arbitrary package1 code execution from coldboot.&lt;br /&gt;
&lt;br /&gt;
However, a usable brute force is on the order of &amp;gt;= ~2^80, so &#039;&#039;&#039;this is almost certainly not actually usable in any meaningful context&#039;&#039;&#039;.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| Early 2017 (as soon as plaintext package1ldr was first dumped)&lt;br /&gt;
| November 20, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Stack smash in TSEC firmware&#039;s KeygenLdr&lt;br /&gt;
| Given that we can control the [[TSEC_Firmware#Key_data|key data]] (which is not authenticated) and the [[TSEC_Firmware#Boot|Boot]] blob (see &amp;quot;maconstack&amp;quot;), as well as the fact Non-secure and Heavy Secure code share the same stack, we can use this to attack KeygenLdr. KeygenLdr uses memcpy to copy over a payload to DMEM to verify it, which can be abused to smash the stack (in DMEM) and write over the return address of said function.&lt;br /&gt;
| ROP under KeygenLdr in Heavy Secure mode.&lt;br /&gt;
| None&lt;br /&gt;
| [[8.0.1]]&lt;br /&gt;
| Early 2018&lt;br /&gt;
| May 21, 2019&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TrustZone ==&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package1#Section_2|Secure Monitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Non-atomic mutexes&lt;br /&gt;
| When an [[SMC]] is called, TrustZone sets a global variable to mark that an SMC is in progress, so that two SMCs using shared resources (like the security engine) do not trample on one another. On 1.0.0, this global variable was written using non-atomic writes, and thus a race condition is possible.&lt;br /&gt;
&lt;br /&gt;
However, the SMC handler enforces that all SMCs must be called from core #3, unless the top-level handler ID is 1 (SMCs internal to the kernel). Thus, the only SMCs that can be run side-by-side are [any userland smc] and smcGetRandomBytesForKernel, and this turns out to not really be abusable.&lt;br /&gt;
| Mostly useless. Maybe some oob-write into unused (and thus useless) memory if running smcGetRandomBytesForKernel and smcGetRandomBytesForUser at the same time.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December 2017 (Probably earlier by others)&lt;br /&gt;
| January 18, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| jamais vu (non-secure world access to PMC MMIO and pre-deep sleep firmware)&lt;br /&gt;
| On [[1.0.0]], one could map in the PMC registers in userland. In addition, [[AM_services|am]] ran a little-kernel based firmware on the BPMP at runtime. With code execution under am, one could modify the BPMP&#039;s little-kernel firmware to hook deep sleep entry, and modify TrustZone/Security engine state. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry.&lt;br /&gt;
| Arbitrary TrustZone code execution.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December, 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Missed BPMP Exception Vector Writes&lt;br /&gt;
| Starting in [[2.0.0]], the BPMP is asleep at runtime, and is turned on by TrustZone during [[SMC|smcCpuSuspend]] in order to initiate the deep sleep process. When it does so, it is held in RESET, and TrustZone attempts to write to the BPMP exception vectors at 0x6000F200 to register EVP_RESET = lp0_entry_fw_crt0, and all other EVPs to a function that simply reboots. However, while they successfully write EVP_RESET, they miss all the other vectors, accidentally writing to the 0x6000F004-0x6000F020 region instead of the 0x6000F204-0x6000F220 region they want to write to. This results in all the exception vectors for the BPMP other than RESET being &amp;quot;undefined&amp;quot; (attacker controlled).&lt;br /&gt;
&lt;br /&gt;
With some way of causing an exception vector to be taken at the right time, this would give pre-sleep code execution (and thus arbitrary TrustZone code execution, via the security engine flaw). However, none of the abort vectors are really triggerable, and interrupts are disabled for the BPMP when it is taken out of reset. Thus, this is useless in practice.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by writing to the correct registers.&lt;br /&gt;
| Theoretically: Arbitrary TrustZone code execution. In practice: Useless.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January, 2018&lt;br /&gt;
| February 23, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]], [[User:Naehrwert|naehrwert]], [[User:Hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC has access to the secure kernel carveout &lt;br /&gt;
| TrustZone is responsible for managing security carveouts to prevent DMA controllers from accessing the carveout which contains the kernel, sysmodules, and other critical operating system data.&lt;br /&gt;
&lt;br /&gt;
Until [[8.0.0]], the list of devices that could access the carveout included the TSEC. However, the TSEC can bypass the SMMU when in authenticated mode by writing to a certain register. Thus, pwning nvservices would allow one to take over the TSEC, and use it to write to normally protected mmio/memory.&lt;br /&gt;
&lt;br /&gt;
In [[8.0.0]], this was fixed by removing TSEC access, and adding TSECB access (TSECB cannot bypass the SMMU).&lt;br /&gt;
| With access to the TSEC mmio (nvservices ROP) and code execution in TSEC Heavy Secure mode, kernel code execution, probably.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| 2017 (when TrustZone code plaintext was first obtained).&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| deja vu (insufficient system state validation on suspend leads to pre-sleep BPMP code execution)&lt;br /&gt;
| Jamais Vu was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry, since gaining pre-sleep code execution on the BPMP compromises the system.&lt;br /&gt;
&lt;br /&gt;
However, the state validation performed by Nintendo&#039;s Secure Monitor was insufficient to prevent pre-sleep execution from being obtained.&lt;br /&gt;
&lt;br /&gt;
Prior to [[6.0.0]], one could use a DMA controller that had access to IRAM and was not held in reset (there were multiple) to race TrustZone&#039;s writes to the BPMP firmware in IRAM, and thus overwrite Nintendo&#039;s firmware with an attacker&#039;s to gain pre-sleep code execution.&lt;br /&gt;
&lt;br /&gt;
[[6.0.0]] addressed this by performing TrustZone state MAC writes and locking PMC scratch *before* turning on the BPMP, fixing the original Jamais Vu exploit entirely. In addition, the BPMP firmware in TrustZone&#039;s .rodata is now memcmp&#039;d to the actual data after it is written to IRAM. This mitigates race attacks that modify the firmware.&lt;br /&gt;
&lt;br /&gt;
However, Nintendo both forgot to validate the BPMP exception vectors after writing them, and forgot to hold in reset a DMA controller that can write to the BPMP&#039;s exception vectors.&lt;br /&gt;
&lt;br /&gt;
AHB-DMA is not blacklisted by kernel mapping whitelist (Nintendo probably forgot it, because the TX1 TRM does not really document that it&#039;s present, although the MMIO works as documented in older (Tegra 3 and before) TRMs).&lt;br /&gt;
&lt;br /&gt;
Thus, with kernel code execution (or some other way of accessing AHB-DMA, e.g. nspwn on &amp;lt;= 4.1.0, TSEC hax, or other arbitrary mmio access flaws), one can DMA to the BPMP&#039;s exception vectors as they are written, causing TrustZone to start the BPMP executing an attacker&#039;s firmware at a different location than TrustZone intends/validates.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.0.0]] by blocking AHB-DMA arbitration and verifying it is held in reset during suspend, and thus there are no more devices that can write to the relevant MMIO at the right time.&lt;br /&gt;
&lt;br /&gt;
| Arbitrary TrustZone/BootROM code execution, by using either the original Jamais Vu flaw (prior to [[6.0.0]] or a warmboot bootrom exploit (any firmware where pre-sleep execution can be gained).&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| December 2017&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:motezazer|motezazer]] and ktemkin,  [[User:Naehrwert|naehrwert]] (independently), almost certainly others (independently)&lt;br /&gt;
|-&lt;br /&gt;
| TrustZone allows using imported RSA exponents with arbitrary modulus&lt;br /&gt;
| TrustZone supports &amp;quot;importing&amp;quot; RSA private exponents for use by userland -- these are stored encrypted with TrustZone only keydata in NAND, and decrypted only to TZRAM. This prevents a console that has compromised userland from learning the private exponents of these keys and doing calculations with them offline. In practice, this is used for FS (gamecard communications), ES (drm), and SSL (console client cert communications).&lt;br /&gt;
&lt;br /&gt;
However, the actual SMC API only imports the RSA exponent, and not the modulus, which is passed separately by userland in each call. There is no validation done on the modulus passed in -- this means that userland can pass in any message and modulus it chooses, and obtain the result of (message ^ private exponent) % modulus back from the secure monitor.&lt;br /&gt;
&lt;br /&gt;
By choosing a prime number modulus P such that P has &amp;quot;smooth&amp;quot; order (totient(P) == P-1 is divisible only by &amp;quot;small&amp;quot; primes), one can efficiently use the [[wikipedia:Pohlig-Hellman algorithm|Pohlig-Hellman algorithm]] to calculate the discrete logarithm of such a result directly, and thus obtain the private exponent.&lt;br /&gt;
&lt;br /&gt;
This is mostly useless in practice, given the general availability of other exploits to obtain these decrypted exponents.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 10.0.0 by importing the modulus in addition to the exponent for the ES device key and ES client cert key. For backwards compatibility reasons the SSL key and Lotus key still only import the exponent.&lt;br /&gt;
&lt;br /&gt;
StorageExpMod also now validates that the exponentiation of &amp;quot;DDDDD...&amp;quot; about the provided modulus by the imported exponent and then the fixed public exponent returns &amp;quot;DDDDD...&amp;quot;, and returns invalid argument if validation fails.&lt;br /&gt;
| With userland privileges sufficient to use an imported RSA key: obtaining that RSA key&#039;s private exponent.&lt;br /&gt;
| [[10.0.0]]&lt;br /&gt;
| [[10.0.0]]&lt;br /&gt;
| August 14, 2019&lt;br /&gt;
| August 14, 2019&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package2#Section_0|HorizonOS Kernel]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Syscall Infoleaks&lt;br /&gt;
| Many syscalls leaked kernel pointers on sad paths (for example svcSetHeapSize and svcQueryMemory), until they landed a bunch of fixes in 2.0.0.&lt;br /&gt;
| Nothing really.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| svcWaitSynchronization/svcReplyAndReceive bad cleanup on error&lt;br /&gt;
| If there is a page fault when fetching handles from the userspace array, it cleans up by dereferencing all objects despite having only loaded first N. Allows the attacker to make arbitrary decrefs on any kernel synchronization object, and thus can be used to get UAF. Haven&#039;t actually been tried on real HW though, but should work (tm).&lt;br /&gt;
| Kernel code execution&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| April 24, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Bad irq_id check in CreateInterruptEvent&lt;br /&gt;
| CreateInterruptEvent syscall is designed to work only for irq_id &amp;gt;= 32. All irq_ids &amp;lt; 32 are &amp;quot;per-core&amp;quot; and reserved for kernel use (watchdog/scheduling/core communications).&lt;br /&gt;
On 1.0.0 you could supply irq_id &amp;lt; 32 and it would write outside the SharedIrqs table.&lt;br /&gt;
| You can register irq&#039;s in the Core3Irqs table, and thus register per-core irqs for core3, that are normally reserved for kernel. Useless.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| October 2017&lt;br /&gt;
| October 17, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel .text mapped executable in usermode&lt;br /&gt;
| Prior to [[3.0.2]] the kernel .text was [[Memory_layout|mapped]] in usermode as executable. This can be used for usermode ROP for bypassing ASLR, but SVCs/IPC are not usable by running kernel .text in usermode.&lt;br /&gt;
| Executing kernel .text in usermode&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| &lt;br /&gt;
| December 28, 2017 (34c3)&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Memory Controller not properly secured&lt;br /&gt;
| The Switch OS originally had the memory controller not set to be accessible only by the secure-world, which was problematic because insecure access can compromise the kernel.&lt;br /&gt;
&lt;br /&gt;
This was fixed partially in [[2.0.0]] by blacklisting the memory controller from being mapped by user-processes, and was fixed entirely in [[4.0.0]] by making the memory controller TZ-only and making all kernel accesses go through [[SMC|smcReadWriteRegister]].&lt;br /&gt;
| With some way to access the memory controller MMIO, arbitrary kernel code execution.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| January 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Potential [[SVC|svcWaitForAddress]] thread use-after-free&lt;br /&gt;
| Between [[4.0.0]], where svcWaitForAddress was introduced, and [[7.0.0]], there was a second intrusive rbtree node in KThread for the WaitForAddress tree (the key being (address, priority), sorted lexicographically). Unlike the WaitProcessWideKeyAtomic tree, the kernel forgot to reinsert the WaitForAddress node when the thread&#039;s priority changed (priority inheritance and/or SetPriority), breaking the rbtree invariants; and since the kernel walks through the entire tree to remove intrusive nodes, you could cause threads to stay in the tree even after their deletion.&lt;br /&gt;
&lt;br /&gt;
[[7.0.0]] fixed the issue by using the same intrusive node for both trees. The thread/node knows which tree it is in, and the latter is correctly updated when thread priority changes.&lt;br /&gt;
| It unluckily didn&#039;t look exploitable&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| July 2018&lt;br /&gt;
| February 2019&lt;br /&gt;
| [[User:TuxSH|TuxSH]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel RWX identity mapping never unmapped&lt;br /&gt;
| During init, the kernel binary is identity-mapped as RWX at 0x80060000; this is necessary to facilitate the transitionary period while the MMU is being enabled but mappings for e.g. KASLR are not yet determined, and also to enable smooth MMU enable transition during wake-from-sleep.&lt;br /&gt;
&lt;br /&gt;
However, the identity mapping was never unmapped, and thus the whole kernel code bin remained permanently mapped as RWX for all kernel threads (any thread which does not have an owner process and thus uses the KSupervisorPageTable TTBR0).&lt;br /&gt;
&lt;br /&gt;
Thus, any theoretical exploit which would give kernel memory corruption or ROP under a kernel thread would allow making use of this mapping to modify kernel text + bypass KASLR.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[16.0.0]] by unmapping the identity-mapping during init, and re identity-mapping only the very first page of kernel .text as R-X (for use by wake-from-sleep), which fixes the shellcode problem and mostly fixes the ROP problem, since this page mostly lacks interesting gadgets.&lt;br /&gt;
| In theory, with another exploitable kernel memory corruption (or ROP under kernel thread) bug: bypassing KASLR + modifying kernel .text. &lt;br /&gt;
&lt;br /&gt;
However, no such bugs are known.&lt;br /&gt;
| [[16.0.0]]&lt;br /&gt;
| [[16.0.0]]&lt;br /&gt;
| Summer 2018&lt;br /&gt;
| January 2023&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FIRM-package System Modules ==&lt;br /&gt;
Flaws in this category pertain to any of the [[Package2#Section_1|built-in system modules]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Service access control bypass (sm:h, smhax, probably other names)&lt;br /&gt;
| Prior to [[3.0.1]], the &#039;&#039;service manager&#039;&#039; (sm) built-in system module treats a user as though it has full permissions if the user creates a new &amp;quot;sm:&amp;quot; port session but bypasses [[Services_API#Initialize|initialization]]. This is due to the other sm commands skipping the service ACL check for Pids &amp;lt;= 7 (i.e. all kernel bundled modules) and that skipping the initialization command leaves the Pid field uninitialized.&lt;br /&gt;
In [[3.0.1]], sm returns error code 0x415 if [[Services_API#Initialize|Initialize]] has not been called yet.&lt;br /&gt;
| Acquiring, registering, and unregistering arbitrary services&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| May 2017&lt;br /&gt;
| August 17, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Overly permissive SPL service&lt;br /&gt;
| The concept behind the switch&#039;s [[SMC|Secure Monitor]] is that all cryptographic keydata is located in userspace, but stored as &amp;quot;access keys&amp;quot; encrypted with &amp;quot;keks&amp;quot; that never leave TrustZone. The [[SPL services|spl]] (&amp;quot;security processor liaison&amp;quot;?) service serves as an interface between the rest of the system and the secure monitor. Prior to [[4.0.0]], spl exposed only a single service &amp;quot;spl:&amp;quot;, which provided all TrustZone wrapper functions to all sysmodules with access to it. Thus anyone with access to the spl: service (via smhax or by pwning a sysmodule with access) could do crypto with any access keys they knew. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by splitting spl: into spl:, spl:mig, spl:ssl, spl:es, and spl:fs.&lt;br /&gt;
| Arbitrary spl: crypto with any access keys one knows. For example, one could use the SSL module&#039;s access keys to decrypt their console&#039;s SSL certificate private key without having to pwn the SSL sysmodule.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Summer 2017 (after smhax was discovered).&lt;br /&gt;
| December 23, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single session services not really single session&lt;br /&gt;
| Several &amp;quot;critical&amp;quot; services (like fsp-ldr, fsp-pr, sm:m, etc) are meant to only ever hold a single session with a specific sysmodule. However, when a sysmodule dies, all its service session handles are released -- and thus killing the holder of a single session handle would allow one (via sm:hax etc) to get access to that service. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by adding a semaphore to these critical single-session services, so that even if one gets access to them an error code will be returned when attempting to use any of their commands.&lt;br /&gt;
| With some way to access these services and kill their session holders (like expLDR): dumping sysmodule code, arbitrary service access, elevated filesystem permissions, etc.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| May/June 2017 (basically immediately after smhax was discovered)&lt;br /&gt;
| December 30, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nspwn&lt;br /&gt;
| fsp-ldr command 0 &amp;quot;MountCode&amp;quot; takes in a Content Path (retrieved from NCM by Loader), and returns an IFileSystem for the resulting ExeFS. These content paths, are normally NCAs, but MountCode also supports a number of other formats, including &amp;quot;.nsp&amp;quot; -- which is just a PFS0.&lt;br /&gt;
&lt;br /&gt;
When a path ending in &amp;quot;.nsp&amp;quot; is parsed by MountCode, the PFS0 is treated as a raw ExeFS. Because there is no NCA header, the ACID signatures are not validated -- and because there are no other signatures in a PFS0, this results in no signature checking happening at all.&lt;br /&gt;
&lt;br /&gt;
The actual .nsp handling is eventually done by {content mounting function} called by MountCode and other FS commands.&lt;br /&gt;
&lt;br /&gt;
Thus, by placing an ExeFS (NSOs + &amp;quot;main.npdm&amp;quot;) and setting one&#039;s desired title ID to &amp;quot;@Sdcard:/some_title.nsp&amp;quot; or &amp;quot;@User:/some_title.nsp&amp;quot; etc one can launch arbitrary unsigned code, with arbitrary unsigned NPDMs.&lt;br /&gt;
&lt;br /&gt;
This appears to have been fixed by only allowing .nsp when the input fstype==7 for the internal content-mounting function, returning 0x2EE202 otherwise.&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: Arbitrary code execution with full system privileges.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| Late 2017&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single null-byte stack overflow in Loader ContentPath parsing&lt;br /&gt;
| Previously, loader content path parsing looked like this, where path_from_lr was up to 0x300 bytes and not necessarily null-terminated:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300] = {0};&lt;br /&gt;
  strcat(nca_path, path_from_lr);&lt;br /&gt;
  for (int i = 0; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Thus, a content path of the maximum length (0x300 bytes) would result in strcat writing a NULL terminator past the end of the nca_path buffer.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[6.0.0]], the new code looks like this:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300];&lt;br /&gt;
  strncpy(nca_path, path_from_lr, sizeof(nca_path));&lt;br /&gt;
  for (int i = 0; i  &amp;lt; sizeof(nca_path) &amp;amp;&amp;amp; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: single null-byte stack overflow in Loader. Maybe (but probably not) loader code execution.&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 2, 2018&lt;br /&gt;
| September 19, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]]&lt;br /&gt;
|-&lt;br /&gt;
| System modules vulnerable to selective downgrade attacks&lt;br /&gt;
| Horizon has no mechanism for specifying the specific title version to Loader on process creation.&lt;br /&gt;
&lt;br /&gt;
Observing this, one can note that after a system update one could install a downgraded version of a specific system module (e.g. nvservices) while leaving the rest of the OS at the same version.&lt;br /&gt;
&lt;br /&gt;
Unless there was some breaking API change, this allows one to make a console vulnerable once more to an exploit in a sysmodule by downgrading it and nothing else.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.1.0]] by incrementing a version field in NPDM, and checking it against a hardcoded list for certain titles in Loader&#039;s process creation func.&lt;br /&gt;
| With access to content installation commands (or a vulnerable lower version to selectively install newer titles), reintroducing bugs in vulnerable system modules on newer firmware versions.&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| When FIRM was first dumped in 2017.&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[Loader_services|Loader]] ASLR&lt;br /&gt;
| The RNG used for generating the ASLR slide is only seeded with 32bits, with the data from [[SVC|svcGetInfo]]. Hence, one could bruteforce the seed if one has infoleaks from any programs. This can be successfully bruteforced with at least 2 sample codebin addrs from different programs (with only 1 sample a lot of invalid seeds are found), however in some cases more than 1 seed might be found.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] Loader now uses csrng_GenerateRandomBytes for determining the ASLR slide.&lt;br /&gt;
&lt;br /&gt;
See also [https://github.com/switchbrew/loader-aslr-solver loader-aslr-solver].&lt;br /&gt;
| Breaking ASLR for all non-KIP processes, allowing predicting the main-codebin base addr for all non-KIP processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| January 30, 2022 (presumably found much earlier?)&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== System Modules ==&lt;br /&gt;
Flaws in this category pertain to any non-built-in system module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| OOB Read in NS system module (pl:utoohax, pl:utonium, maybe other names)&lt;br /&gt;
| Prior to [[3.0.0]], pl:u (Shared Font services implemented in the NS sysmodule) service commands 1,2,3 took in a signed 32-bit index and returned that index of an array but did not check that index at all. This allowed for an arbitrary read within a 34-bit range (33-bit signed) from NS .bss. In [[3.0.0]], sending out of range indexes causes error code 0x60A to be returned.&lt;br /&gt;
| Dumping full NS .text, .rodata and .data, infoleak, etc&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| June 19, 2017&lt;br /&gt;
| [[User:qlutoo|qlutoo]], ReSwitched Team (independently)&lt;br /&gt;
|-&lt;br /&gt;
| Unchecked domain ID in common IPC code&lt;br /&gt;
| Prior to [[2.0.0]], object IDs in [[IPC_Marshalling#Domain_message|domain messages]] are not bounds checked. This out-of-bounds read could be exploited to brute-force ASLR and get PC control in some services that support domain messages.&lt;br /&gt;
|&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| July 2017&lt;br /&gt;
| July 20, 2017‎&lt;br /&gt;
| [[User:hthh|hthh]]&lt;br /&gt;
|-&lt;br /&gt;
| Out-of-bounds array read for [[BCAT_Content_Container]] secret-data index&lt;br /&gt;
| The [[BCAT_Content_Container]] secret-data index is not validated at all. This is handled before the RSA-signature(?) is ever used. Since the field is an u8, a total of 0x800-bytes relative to the array start can be accessed.&lt;br /&gt;
This is not useful since the string loaded from this array is only involved with key-generation.&lt;br /&gt;
| &lt;br /&gt;
| Unknown&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| August 4, 2017&lt;br /&gt;
| August 6, 2017&lt;br /&gt;
| [[User: shinyquagsire23|Shiny Quagsire]], [[User:Yellows8|yellows8]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| expLDR (sysmodule handle table exhaustion)&lt;br /&gt;
| Most sysmodules share common template code to handle IPC control messages. The command DuplicateSession (type 5 command 2)&#039;s template code will abort() if it fails to duplicate a session&#039;s handle for the requester. Because many sysmodules have limited handle table size (smaller than the browser/other entrypoints), repeatedly requesting to duplicate one&#039;s session will cause the sysmodule to run out of handle table space and abort, causing the service to release all its handles cleanly.&lt;br /&gt;
| Sysmodule crashes.  Most usefully, crashing ldr allows access to fsp-ldr and crashing pm allows access to fsp-pr. Useless after [[4.0.0]], which mitigated a number of single-session service access issues.&lt;br /&gt;
| Unfixed&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| June 24, 2017&lt;br /&gt;
| March 8, 2018&lt;br /&gt;
| [[User:daeken|daeken]]&lt;br /&gt;
|-&lt;br /&gt;
| Transfer Memory leak in nvservices system module&lt;br /&gt;
| The nvservices sysmodule does not clear most of its transfer memory prior to release.&lt;br /&gt;
| The calling process can read key bits of memory, including breaking ASLR (by revealing the image base) and exposing the address of other transfer memory to set up attacks. More details here: [https://daeken.svbtle.com/nintendo-switch-nvservices-info-leak transfermeme (nvservices info leak)] by [[User:daeken|daeken]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| June 2017&lt;br /&gt;
| October 16, 2018&lt;br /&gt;
| [[User:qlutoo|qlutoo]] and [[User:hexkyz|hexkyz]],&lt;br /&gt;
[[User:daeken|daeken]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| OOB write in audio system module&lt;br /&gt;
| Prior to [[2.0.0]], the [[Audio_services#audout:u|AppendAudioOutBuffer]] and [[Audio_services#audin:u|AppendAudioInBuffer]] IPC commands would blindly increment the appended buffers&#039; count while using said count value as an index to where the user data should be copied into. This resulted in an 0x28 bytes, user controlled, out-of-bounds memory write into the [[Audio_services|audio]] sysmodule&#039;s memory space.&lt;br /&gt;
Combined with the [[Audio_services#audout:u|GetReleasedAudioOutBuffer]] or [[Audio_services#audin:u|GetReleasedAudioInBuffer]] commands, this could also be used as an 8 byte infoleak.&lt;br /&gt;
&lt;br /&gt;
In [[2.0.0]], the commands now return error code 0x1099 if the number of unreleased buffers exceeds 0x1F.&lt;br /&gt;
| Code execution under audio sysmodule&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| November 2, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak in nvservices system module&lt;br /&gt;
| The [[NV_services|nvservices]] ioctl [[NV_services#NVMAP_IOC_ALLOC|NVMAP_IOC_ALLOC]] takes an optional argument &amp;quot;addr&amp;quot; which allows the calling process to pass a pointer to user allocated memory for backing a nvmap object. If &amp;quot;addr&amp;quot; is left as 0, nvservices uses the transfer memory region (donated by the user during initialization) instead, when allocating memory for the nvmap object.&lt;br /&gt;
By design, freeing the nvmap object by calling the ioctl [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] returns, in its &amp;quot;refcount&amp;quot; argument, the user address previously supplied if the reference count reaches 0.&lt;br /&gt;
However, prior to [[6.2.0]], the case where the transfer memory region is used to allocate the nvmap object was not taken into account, thus resulting in [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] leaking back an address from within the transfer memory region mapped in nvservices&#039; memory space.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] no longer returns the address when the transfer memory region is used instead of user supplied memory.&lt;br /&gt;
| Combined with other vulnerabilities: Defeating ASLR in nvservices sysmodule.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nvhax (memory corruption in nvservices system module)&lt;br /&gt;
| Prior to [[6.2.0]], the [[NV_services|nvservices]] ioctl [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] would take a single &amp;quot;pwarpstate&amp;quot; argument which would be interpreted by nvservices as a memory pointer for writing 2 &amp;quot;warpstate&amp;quot; structs (one for each Streaming Multiprocessor).&lt;br /&gt;
This resulted in nvservices attempting to blindly memcpy into this user supplied address and trigger a crash. However, if paired with an infoleak, this could be used to arbitrarily write 0x30 bytes anywhere in nvservices&#039; memory space.&lt;br /&gt;
Additionally, the &amp;quot;warpstate&amp;quot; struct itself was never initialized, which means nvservices would leak the 0x30 bytes from the stack. By invoking other ioctls it was also possible to partially control the stack contents and achieve a usable arbitrary memory write primitive.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] now takes 2 inline &amp;quot;warpstate&amp;quot; structs instead of a &amp;quot;pwarpstate&amp;quot; pointer, thus effectively avoiding the bad memcpy.&lt;br /&gt;
| Code execution under nvservices sysmodule&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 5, 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IStorage|AM IStorage]] infoleak&lt;br /&gt;
| Originally the buffer allocated by [[Applet_Manager_services#CreateStorage|CreateStorage]] using the specified input size was not cleared. With [8.0.0+] this was fixed by adding a memset() for the buffer after successful allocation.&lt;br /&gt;
&lt;br /&gt;
Hence, IStorage-&amp;gt;IStorageAccessor-&amp;gt;Read will return uninitialized memory when the Write cmd was not previously used with the specified region.&lt;br /&gt;
| Infoleak from the main [[Applet_Manager_services#IStorage|AM]] heap, allowing defeating ASLR by reading addresses from previously allocated objects.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| December 2018&lt;br /&gt;
| August 9, 2019&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services#hid:sys|hid:sys]] ButtonConfig s32 array-index not validated&lt;br /&gt;
| The input s32 array-index for [[HID_services#hid:sys|hid:sys]] ButtonConfig cmds 1255-1270 was originally not validated. Using a negative or &amp;gt;=5 index results in accessing out-of-bounds data, with an array stored on stack.&lt;br /&gt;
[10.1.0-10.2.0] Each of these cmds will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] Now an unsigned compare is used, with 0 or an error being immediately returned when the value is invalid.&lt;br /&gt;
| hid infoleak, out-of-bounds mem-write anywhere in hid address-space relative to the stack array (with constraints on the data).&lt;br /&gt;
| [[10.1.0]]&lt;br /&gt;
| [[11.0.1]]&lt;br /&gt;
| April 18, 2020&lt;br /&gt;
| July 14, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] sdp_server.cc process_service_search() continuation request p_req validation&lt;br /&gt;
| With [5.0.0+], the following was added to the if-block prior to loading cont_offset from p_req: &amp;lt;code&amp;gt;(p_req + sizeof(cont_offset) &amp;gt; p_req_end)&amp;lt;/code&amp;gt; (which verifies that cont_offset is within message bounds).&lt;br /&gt;
| Bluetooth-sysmodule out-of-bounds read from heap, probably not useful since the read value must match a state field, etc.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] A-63146698&lt;br /&gt;
| [https://android.googlesource.com/platform/system/bt/+/226ea26684d4cd609a5b456d3d2cc762453c2d75 A-63146698] / CVE-2017-0785. See also [https://info.armis.com/rs/645-PDC-047/images/BlueBorne%20Technical%20White%20Paper_20171130.pdf here].&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR (note: not tested on hw).&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] GetAdapterProperty/SetAdapterProperty unchecked memcpy size&lt;br /&gt;
| GetAdapterProperty copies data from stack to the output buffer using the buffer size, without checking the size (when not handling the Name type). SetAdapterProperty copies data to stack from the input buffer using the buffer size, without checking the size.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.0.0]] by replacing the buffer data with a fixed-size-struct.&lt;br /&gt;
| Stack infoleak with GetAdapterProperty, stack buffer overflow (and hence ROP) with SetAdapterProperty.&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| July 17, 2020&lt;br /&gt;
| April 7, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] stack buffer overflow with HID DATA packets&lt;br /&gt;
| The BSA (bt-stack) func bta_hh_co_data copies data from a HID DATA packet to stack without checking the size, then sends it over Uipc. [7.0.0+] The user Uipc callback also copies the input data to stack without checking the size, then sends it to the sharedmem CircularBuffer.&lt;br /&gt;
With [12.0.2+] this was fixed in bta_hh_co_data by clamping the size to a maximum of 0x2BB. The aforementioned buffer overflow in the Uipc callback can&#039;t be triggered since at that point the size was already clamped.&lt;br /&gt;
&lt;br /&gt;
Before this bta_hh_co_data func is reached, there is no validation of the size (such as comparing against the L2CAP MTU) when Basic Mode is being used.&lt;br /&gt;
&lt;br /&gt;
Actually triggering this requires using a data-size larger than the normal L2CAP MTU. This can be done by for example, using raw HCI to send the packet from the remote bluetooth device.&lt;br /&gt;
&lt;br /&gt;
Note that when the remote device is configured as an audio device for [12.0.0+] where [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].TrustedServices was only ever set for audio since system-boot, it is not possible for the remote device to connect to the Switch for HID.&lt;br /&gt;
| ROP under [[Bluetooth_Driver_services|bluetooth]] via HID DATA packet sent by a paired HID bluetooth device. This can be triggered at any time while not in sleep-mode, when not in airplane-mode. The earliest is while the Nintendo Switch logo screen is displayed during system boot.&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| July-August 2020&lt;br /&gt;
| May 11, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] WriteHidData/WriteHidData2/SetHidReport unchecked memcpy size&lt;br /&gt;
| WriteHidData/SetHidReport copies the input struct to stack, then passes it to the funcptr/vfunc call. WriteHidData2 passes the input buffer addr directly to the funcptr/vfunc call. The called func eventually copies the input data to the stack struct using the specified size without validating it.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.1.0]] in WriteHidData/SetHidReport by doing a fixed-size copy into another tmp struct, with the size field being clamped to a maximum of 0x2BB afterwards. This struct is then used when calling the vfunc. The vfuncs called by WriteHidData/WriteHidData2/SetHidReport were also updated to clamp the size to the required maximum value.&lt;br /&gt;
| Stack buffer overflow&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| July 16, 2020&lt;br /&gt;
| July 6, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[HID_services|hid:sys]] SetButtonConfigStorage{name}Deprecated&lt;br /&gt;
| These cmds pass a stack ptr for the StorageName when calling the internal func. Nothing is written to this StorageName. Hence, stack infoleak (data is copied as a NUL-terminated string), which can be later read by the GetButtonConfigStorage{name} cmds.&lt;br /&gt;
&lt;br /&gt;
This was fixed by removing the Deprecated cmds in [[13.0.0]].&lt;br /&gt;
| Infoleak of hid stack from a StorageName readable via GetButtonConfigStorage{name}, up to the NUL-terminator.&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| December 11, 2020&lt;br /&gt;
| September 27, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] EventInfo infoleak&lt;br /&gt;
| The various funcs which send messages to the thread which handles writing to EventInfo, didn&#039;t clear the stack msgbuf. Hence, the various get-EventInfo cmds could return leaked stack data. This likely affected most (?) get-EventInfo cmds, besides CircularBuffer-GetHidReportEventInfo.&lt;br /&gt;
&lt;br /&gt;
This only matters for events where there&#039;s uninitialized regions of the EventInfo, such as events with variable-size data without a memset.&lt;br /&gt;
&lt;br /&gt;
This was fixed by clearing the msgbuf in a number of funcs.&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| &lt;br /&gt;
| During initial [[13.0.0|diff]]. Added to this page on: December 12, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|ssl]] CVE-2021-43527&lt;br /&gt;
| CVE-2021-43527, see also [https://bugs.chromium.org/p/project-zero/issues/detail?id=2237 here] and [https://googleprojectzero.blogspot.com/2021/12/this-shouldnt-have-happened.html here].&lt;br /&gt;
Using BigSig where the server cert sig is RSA-PSS results in the remote server throwing {no shared cipher} error when Switch connects. If however one creates a rootCA using BigSig (RSA-PSS), which then signs a server cert where the server key is RSA (not PSS), the vuln can be triggered (if the rootCA is trusted, via using the import service-cmd). It&#039;s unknown whether there&#039;s other ways to trigger the vuln.&lt;br /&gt;
&lt;br /&gt;
The crash occurs in VFY_Begin when using the previously overwritten data. A bitsize of &amp;lt;code&amp;gt;$((16384 + 32 + 64 + 64 + 64))&amp;lt;/code&amp;gt; is only enough to overwrite cx-&amp;gt;hashcx, to fully overwrite cx-&amp;gt;hashobj an additional 0xC-bytes (additional 96 bits) is needed.&lt;br /&gt;
Note that partial overwrite isn&#039;t an option: this is the func that initializes those fields to begin with, it just does deinit first before initializing hashcx/hashobj (prior to that these fields would be all-zero when not overwritten by the buf-overflow).&lt;br /&gt;
| Heap buffer overflow in [[SSL_services|ssl]], overwriting data including a ptr to an object which is later used to load a funcptr.&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| Switch: December 1-2, 2021&lt;br /&gt;
| Switch: January 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA gatt_process_notification stack buffer overflow&lt;br /&gt;
| gatt_process_notification is the GATT handler for processing notification/indication messages. gatt_process_notification does memcpy to stack from the input bt msg data, without size validation. The input len param isn&#039;t validated in this func either - if the remaining len following op_code is less than 2, a negative value will be used for the data copy to stack.&lt;br /&gt;
These were fixed by adding a bounds check for the size, size==0 is also checked for now.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow, with data received from a bluetooth message&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| January 19, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] TakeScreenShotOfOwnLayer OOB&lt;br /&gt;
| The captureBuf is used as an array index without validation. Data used from this array includes calling a funcptr from the array entry, if set. Eventually this is also used to write bools into this array, one of which is from the command input.&lt;br /&gt;
With [5.0.0+] a func is eventually called to get a ptr determined by the input captureBuf, with nullptr being returned for captureBuf&amp;gt;=0x10. The caller will Abort if nullptr was returned.&lt;br /&gt;
| OOB array access&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] ClearCaptureBuffer OOB&lt;br /&gt;
| The captureBuf is used as an array index without proper validation. There is code validating it, but on failure it just skips over a code-block, with code using captureBuf still being used afterwards. Then this is used to write bools into a global array, one of which is from the command input.&lt;br /&gt;
This was fixed with [9.1.0+] by requiring captureBuf = 0-1.&lt;br /&gt;
| OOB bool writes into an array&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFCONF infoleak&lt;br /&gt;
| Originally bsd ioctl SIOCGIFCONF was handled by setting the data in IPC outbuf0 to the size/addr of IPC outbuf1. These buffers are HipcAutoSelect, so if buf1 is small enough for HipcPointer (otherwise it would be HipcMapAlias) the IPC-buf-ptr leaked into outbuf0 would be located in the codebin-region. Since this is done before the actual ioctl-handling, it doesn&#039;t matter whether the fd is valid.&lt;br /&gt;
This was fixed in [5.0.0+] by using a tmp struct on stack instead of buf0.&lt;br /&gt;
| bsdsockets-sysmodule codebin-region addr infoleak, which allows defeating ASLR.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022 (probably earlier)&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFMEDIA input can contain ptr&lt;br /&gt;
| Originally bsd ioctl SIOCGIFMEDIA used the user-specified ifmediareq structure directly from the input buffer. This includes a ptr. This ptr probably isn&#039;t actually used?&lt;br /&gt;
With [5.0.0+] the structure used as input for the ioctl was changed to using &amp;lt;code&amp;gt;int ifm_ulist[1]&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;int *ifm_ulist&amp;lt;/code&amp;gt; (which is unused). The input structure is copied to a tmp struct which is used as the original ifmediareq structure, with ifm_ulist always NULL. The user can still specify a non-zero ifm_count value, however that&#039;s not useful with ifm_ulist being always NULL.&lt;br /&gt;
| Useless?&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[Joy-Con]] HidCommand PairingIn&lt;br /&gt;
| The joycon protocol handler for PairingIn copies data from stack to the response cmd-buf for sending PairingOut. Only the first byte is set to a type value, the rest is uninitialized stack data.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [15.0.0+] by directly writing to the response data without using stack data.&lt;br /&gt;
| Infoleak of hid stack via a bluetooth/uart message+response with a connected hid controller. This returns addrs for the main-codebin/stack, which allows defeating ASLR.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| September 4, 2020&lt;br /&gt;
| October 10, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[RO_services|ro]] ASLR&lt;br /&gt;
| The RNG used to determine where to randomly map NROs in the target process was TinyMT (nn::os::detail::RngManager output, seeded by 128 bits of entropy). However, TinyMT is not cryptographically secure (and can in fact be analytically solved). &lt;br /&gt;
&lt;br /&gt;
Thus, with a few NRO mapping addresses, one could learn the TinyMT state and derive all previous/future RNG outputs, breaking NRO aslr for all processes. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ro now uses csrng_GenerateRandomBytes to determine the random map address for NROs.&lt;br /&gt;
| Breaking ASLR for all NROs loaded in all processes, allowing predicting all NRO mappings for all processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| Late 2021/Early 2022&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG used by [[NS_Services|ns]]&lt;br /&gt;
| The code generating the sd seed and the data for the [[SD_Filesystem|sd]] private/private1 file, all use nn::os::GenerateRandomBytes, not csrng. The sd-seed is generated first, then private, then private1. This allows deriving sd-seed from private since this uses TinyMT, as long as the system shipped from factory on [2.0.0+]. private1 is only useful if the system shipped with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
There&#039;s various other code in ns using nn::os::GenerateRandomBytes as well. This includes the code generating ns_systemseed when it doesn&#039;t exist. ns_systemseed is generated at some point after the various sd-seed-related code (both are called from the same func). Hence, ns_systemseed can be recovered with the above method as well, if it wasn&#039;t recreated at some point without regenerating the above nand-save used with the above.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ns now uses csrng_GenerateRandomBytes for sd-seed/private and ns_systemseed, etc. This only matters when the file is newly generated, which is usually only for factory-fresh systems which ship with this version. This would also apply after being deleted during {System Settings -&amp;gt; Formatting Options -&amp;gt; Initialize Console}, and also with a refurbished console.&lt;br /&gt;
| Generation of a system&#039;s sd-seed allowing decryption of the NAX0 layer of data on [[SD_Filesystem|SD]], derived using the private file from SD. Applies to systems which factory-shipped with a system-version prior to [[15.0.0]] (that is, [2.0.0-14.1.2]).&lt;br /&gt;
| [[15.0.0]], for newly generated files&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| December ~12, 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA bsa_sv_av_cback stack buffer overflow&lt;br /&gt;
| bsa_sv_av_cback checks for two input type values (0xC/0xD), on match it copies the input data to stack without size validation. Then it sends an internal request with this data (likewise when the type values don&#039;t match, except the input data is passed directly with a small size), then it returns.&lt;br /&gt;
This requires the AV functionality added with [13.0.0+], however this func is only reachable with [14.0.0+] where the required functionality was enabled.&lt;br /&gt;
&lt;br /&gt;
This requires message data that&#039;s larger than the MTU, so fragmentation must be used, or manually send the ACL data to bypass the MTU.&lt;br /&gt;
&lt;br /&gt;
This can be triggered via an AVRC message with opcode=0x0 (vendor). The above type 0xC is reached via AVRC ctype 0..4, while 0xD is reached with ctype&amp;gt;=0x9.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] the size value for the memcpy (which is also written to the request struct) is clamped to a max value.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow on [14.0.0-14.1.2], with data received from an AVRC bluetooth message with a bluetooth-audio device.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[WLAN_services|wlan]] SetMulticastList heap buffer overflow&lt;br /&gt;
| The [[WLAN_services#SetMulticastList|SetMulticastList]] command allocates a 0x31-bytes sized buffer and copies to it as much [[WLAN_services#MacAddress|MacAddress]] values from the input [[WLAN_services#MulticastList|MulticastList]] as specified by the &amp;quot;Count&amp;quot; field, but this field is never validated. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] error code 0x1906B is now returned if &amp;quot;Count&amp;quot; is larger than 8.&lt;br /&gt;
| wlan-sysmodule heap buffer overflow.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| June 6, 2022&lt;br /&gt;
| November 9, 2022&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Internet Browser == &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2016-4657&lt;br /&gt;
| WebKit vuln discovered around August 2016. Most notably used in the iOS 9.3.X exploit. A simple PoC can be found [https://github.com/LiveOverflow/lo_nintendoswitch/blob/master/poc1.html here]. This was later exploited by [https://twitter.com/qwertyoruiopz Qwertyoruiop] using an adjusted version of his iOS 9.3 webkit exploit (others exploited this prior to then).&lt;br /&gt;
|&lt;br /&gt;
| [[2.1.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| Original: August 2016&lt;br /&gt;
Switch: March 3rd-4th 2017&lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2017-7005&lt;br /&gt;
| WebKit type confusion.&lt;br /&gt;
|&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2016-4622&lt;br /&gt;
| WebKit memory corruption bug. This bug was incorrectly re-introduced in [[4.0.0]]. See [http://www.phrack.org/papers/attacking_javascript_engines.html here] for a detailed write-up from the author.&lt;br /&gt;
|&lt;br /&gt;
| [[6.1.0]]&lt;br /&gt;
| [[6.1.0]]&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-4441&lt;br /&gt;
| WebKit memory corruption bug. See [https://bugs.chromium.org/p/project-zero/issues/detail?id=1685&amp;amp;desc=2 here].&lt;br /&gt;
|&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Whitelist ===&lt;br /&gt;
This section documents [[Internet_Browser|WebApplet]] whitelist issues in applications. These can be used to load your own browser content over plain HTTP, which then for example could be used for web-applet exploitation.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Application&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with app version&lt;br /&gt;
!  Newest app version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Sonic Mania&lt;br /&gt;
| Originally this game launched web-applet with a plain-http URL for displaying the manual, this was later changed to https. Originally the whitelist only had 1 entry for a http URL, this was later replaced with various https-only URLs.&lt;br /&gt;
| 1.04, unknown if fixed with an earlier update&lt;br /&gt;
| 1.04&lt;br /&gt;
| January (?) 2022&lt;br /&gt;
| February 23, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NintendoSDK ==&lt;br /&gt;
This section documents vulnerabilities for NSOs in NintendoSDK.&lt;br /&gt;
&lt;br /&gt;
=== nnSdk ===&lt;br /&gt;
This section documents vulnerabilities for nnSdk (sdknso).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in SDK [[System_Versions|version]]&lt;br /&gt;
!  Last SDK version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services|hidbus]] GetJoyPollingReceivedData buffer overflow&lt;br /&gt;
| hidbus GetJoyPollingReceivedData doesn&#039;t validate the u8 size used for memcpy, when copying the data to the output JoyPollingReceivedData. With 11.x, the size is now clamped to a maximum of 0x2C (regardless of polling-mode). Note that 0x2C is the data-size for JoyButtonOnlyPollingDataAccessor, the other polling-modes have a smaller size.&lt;br /&gt;
&lt;br /&gt;
The hid-sysmodule code which writes data here does handle it properly: size is clamped to a max size, and the data-read uses a fixed-size anyway (hence there&#039;s no way to trigger this sdknso vuln with the hid-sysmodule tmem writing code).&lt;br /&gt;
&lt;br /&gt;
This could only be exploited if one directly writes to the tmem when one has previously compromised hid-sysmodule, without using the normal tmem-writing func for this.&lt;br /&gt;
&lt;br /&gt;
There are only a few [[HID_services#ExternalDevices|apps]] which use hidbus.&lt;br /&gt;
| Triggering a buffer overflow in an application which uses hidbus GetJoyPollingReceivedData, from a previously compromised hid-sysmodule.&lt;br /&gt;
| 11.x.0&lt;br /&gt;
| 11.4.0&lt;br /&gt;
| March 2020&lt;br /&gt;
| December 3, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Profile_Selector|Profile Selector]] uninitialized input data&lt;br /&gt;
| Originally unused regions of [[Profile_Selector]] UiSettings/UserSelectionSettings were not cleared prior to being sent to the applet. With 1.x.x these are now properly memset().&lt;br /&gt;
| Stack infoleak from user-process, sent to the applet.&lt;br /&gt;
| 1.x.x&lt;br /&gt;
| 11.4.0&lt;br /&gt;
| November-December 2019&lt;br /&gt;
| December 31, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pia ===&lt;br /&gt;
This section documents vulnerabilities for [https://github.com/Kinnay/NintendoClients/wiki/Pia-Overview Pia].&lt;br /&gt;
&lt;br /&gt;
In v5.11.3 (exact starting version unknown) the fixes aren&#039;t present for the below vulns which were fixed in v5.9.3, while in v5.18.98 these are present (exact starting version unknown). This probably indicates that the vuln fixes were backported from a newer Pia version to v5.9.3.&lt;br /&gt;
&lt;br /&gt;
The Pia packet handlers are only active when the game is using multiplayer. LanProtocol is only active in the games which are actively using the LAN-mode option (not Ldn) - only certain games support LAN-mode. The LanProtocol Pia packet handler can be reached while in a lobby or searching for one.&lt;br /&gt;
&lt;br /&gt;
Most Pia packets require an active StationProtocol connection to be active with {InetAddr which the packet was received from}, otherwise the packet is filtered out. The only protocols which don&#039;t use filtering are the following: NatTraversalProtocol, LanProtocol, StationProtocol, LocalProtocol.&lt;br /&gt;
&lt;br /&gt;
Note that broadcast IP-dest Pia packets are accepted - this can be used to target every device on the network which is using Pia (which is really only useful with {above protocols} due to the filtering mentioned above, unless one also handles StationProtocol).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in Pia version&lt;br /&gt;
!  Last Pia version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::RelayRouteManageJob::UpdateConnectionReport buffer overflow&lt;br /&gt;
| nn::pia::session::RelayRouteManageJob::UpdateConnectionReport() checks that the input size is at least {value}, but there&#039;s no max size check. This is used to memcpy from the input to elsewhere - hence buf-overflow if size is too large. The dst buffer is allocated on the pead heap - this buffer is probably small.&lt;br /&gt;
Note that there&#039;s various requirements before it would actually reach the memcpy, such as &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::Mesh::IsHost() const&amp;gt;&amp;lt;/code&amp;gt; must return true.&lt;br /&gt;
&lt;br /&gt;
In fixed versions immediately after the StationIndex validation it now does: &amp;lt;code&amp;gt;if(statefield+0x10&amp;lt;input_size) return;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is called from nn::pia::session::MeshProtocol::ParseConnectionReport().&lt;br /&gt;
| Heap buffer overflow triggered by a Pia MeshProtocol message sent to a host device.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 11, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::lan::LanProtocol::ParseSessionMessage buffer overflow&lt;br /&gt;
| nn::pia::lan::LanProtocol::ParseSessionMessage() calls nn::pia::lan::LanSessionMessage::Deserialize() to deserialize the message payload data buffer into the LanSessionMessage object on stack. LanSessionMessage::Deserialize (among other things) memcpys data from the input buffer to the object, using an u32 from the input buffer - there is no size validation in Deserialize itself.&lt;br /&gt;
There is a size check immediately after calling Deserialize() to verify &amp;lt;code&amp;gt;payloadsize=={u32val}+{constant}&amp;lt;/code&amp;gt;, returning on fail - but this doesn&#039;t matter for too-large-size.&lt;br /&gt;
&lt;br /&gt;
In fixed versions Deserialize now does bounds checking, both for the minimum message size and clamping the memcpy size to a constant. An error is thrown if the clamped memcpy size is larger than the message size. The caller now checks the ret properly, previously it was ignored.&lt;br /&gt;
&lt;br /&gt;
Following the size check in ParseSessionMessage() it calls &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::Mesh::IsProcessingLeaveMesh() const&amp;gt;&amp;lt;/code&amp;gt;, returning if ret is false.&lt;br /&gt;
&lt;br /&gt;
Then it calls nn::pia::lan::LanProtocol::ReceivedFragmentData::Receive(), with the memcpy&#039;d buffer/size from the above LanSessionMessage, and other fields from LanSessionMessage. This eventually memcpys the input buffer to object+{offset}+{chunksize_field}*inputu8, there is no validation for size or inputu8 (except for the above size check). Hence, if the u8 is large enough, this would result in a heap buffer overflow.&lt;br /&gt;
&lt;br /&gt;
In fixed versions ReceivedFragmentData::Receive added a bunch of validation before the memcpy.&lt;br /&gt;
| Stack/heap buffer overflow triggered by a Pia LanProtocol message.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 14, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::SessionProtocol::ParseLeaveMeshInvitation buffer overflow&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nn::pia::session::SessionProtocol::ParseLeaveMeshInvitation(nn::pia::transport::ReceivedMessageAccessor const&amp;amp;)&amp;gt;&amp;lt;/code&amp;gt; This immediately returns if *(ReceivedMessageAccessor+16) is 0. Then the input data is deserialized. The input u64 array is deserialized to stack, the u8 arraycount field from input is not validated.&lt;br /&gt;
&lt;br /&gt;
Hence, stack buffer overflow. Note that there&#039;s similar loop code in nearby funcs, which do validate the count properly.&lt;br /&gt;
&lt;br /&gt;
In fixed versions the arraycount field is now validated.&lt;br /&gt;
&lt;br /&gt;
SessionProtocol uses ReliableSlidingWindow MessageHeader, with a maximum message size of 0x100. The allocated size used for the above u64 array is also 0x100-bytes. Hence, when triggering a buf overflow the data after the buffer is uncontrolled data from the SessionProtocol object.&lt;br /&gt;
| Stack buffer overflow triggered by a Pia SessionProtocol message.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.1/v5.9.2/v5.9.3&lt;br /&gt;
| November 14, 2022&lt;br /&gt;
| November 15, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Optional Pia packet encryption&lt;br /&gt;
| Pia packet encryption is optional. If the encryption flag is disabled, the packet handler will accept it and skip crypto.&lt;br /&gt;
In fixed versions immediately after grabbing a packet, it now checks the crypto flag. If it&#039;s plaintext the packet is dropped.&lt;br /&gt;
&lt;br /&gt;
This can be used to send a plaintext Pia packet without needing to handle encryption, especially useful if the session-key can&#039;t be obtained (online-play matchmaking). This could be combined with other vulns if wanted.&lt;br /&gt;
| Sending a plaintext Pia packet without needing to handle encryption.&lt;br /&gt;
| v5.9.3, see above.&lt;br /&gt;
| v5.9.3 (and later versions)&lt;br /&gt;
| &lt;br /&gt;
| November 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::session::{JoinMeshJob/ProcessUpdateMeshJob}::SetStationDataList OOB read/write/vfunc-call&lt;br /&gt;
| &amp;lt;code&amp;gt;nn::pia::session::JoinMeshJob::SetStationDataList&amp;lt;/code&amp;gt;is called by &amp;lt;code&amp;gt;nn::pia::session::MeshProtocol::ParseJoinResponse(nn::pia::transport::ReceivedMessageAccessor const&amp;amp;)&amp;gt;&amp;lt;/code&amp;gt; with the ReceivedMessageAccessor buffer.&lt;br /&gt;
SetStationDataList will update state and immediately return if the join was denied. It will also validate the num_mesh_stations field against state. ParseJoinResponse also essentially verifies that the message was received from the host device.&lt;br /&gt;
&lt;br /&gt;
The input buffer size is ignored.&lt;br /&gt;
&lt;br /&gt;
The num_fragments field must be value 1 or &amp;lt;=3 otherwise it will return, there&#039;s two seperate code blocks handling these.&lt;br /&gt;
&lt;br /&gt;
Other than the checks at the start, there&#039;s no validation for the index fields. So large enough values could result in OOB-reads.&lt;br /&gt;
&lt;br /&gt;
When handling multiple fragments, it will loop through the stationinfo list. There is no validation for the u8 count field or the baseindex field. It calls a vfunc from obj baseptr+index*{entrysize} with data from the buffer, where index starts with the above baseindex field. Afterwards, an u8 is copied into an u32 array (with certain versions an u16 is deserialized into an u16 array).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nn::pia::session::ProcessUpdateMeshJob::UpdateStationDataList&amp;lt;/code&amp;gt; is (eventually) called from &amp;lt;code&amp;gt;nn::pia::session::MeshProtocol::ParseUpdateMesh&amp;lt;/code&amp;gt;, which has similar issues to the above.&lt;br /&gt;
&lt;br /&gt;
Note that ParseJoinResponse/ParseUpdateMesh essentially require the message to be received from the host device.&lt;br /&gt;
&lt;br /&gt;
With fixed versions (v5.18.98, exact version unknown) various validation was added. Additional/updated validation was added in a later version (v5.31.0, exact version unknown).&lt;br /&gt;
| OOB read/write / vfunc call where the object is selected by an OOB index, triggered by a Pia MeshProtocol message.&lt;br /&gt;
| v5.18.98 and v5.31.0 (exact versions unknown).&lt;br /&gt;
| v5.31.0&lt;br /&gt;
| November 18, 2022&lt;br /&gt;
| November 21, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Insecure encryption&lt;br /&gt;
| Originally Pia packets used AES-ECB encryption. As documented [https://github.com/Kinnay/NintendoClients/wiki/Pia-Overview here] it was later changed with v5.7.0 to AES-GCM. Each 0x10-byte block would have the same encrypted block output where the plaintext 0x10-byte data is the same.&lt;br /&gt;
The mechanism for generating the Pia SessionKey for LAN has also changed over time.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Kinnay/NintendoClients/wiki/LAN-Protocol LAN] non-Pia-encapsulated packets were also originally sent in plaintext, however at some point it was changed to mostly encrypted.&lt;br /&gt;
| &lt;br /&gt;
| AES-GCM fix: v5.7.0&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nn::pia::transport::UnreliableProtocol::Dispatch buffer overflow&lt;br /&gt;
| &amp;lt;code&amp;gt;nn::pia::transport::UnreliableProtocol::Dispatch&amp;lt;/code&amp;gt; memcpys data from the message into a list entry, without size validation. If the pia packet is the max size, it will only overwrite the 0xC-bytes which were written to immediately before the memcpy: the u32 size and the 8-byte StationAddress (depending on the version there can also be 4-byte padding after the size for alignment).&lt;br /&gt;
However, nn::pia::transport::UnreliableProtocol::Receive will clamp the size from the list entry to the outbuf size when doing the memcpy. So this is probably useless.&lt;br /&gt;
&lt;br /&gt;
It&#039;s unknown whether there&#039;s a version where more data could be overwritten, and whether that would be useful.&lt;br /&gt;
&lt;br /&gt;
This is fixed in v5.31.0, exact version unknown. The message is dropped if too large in Dispatch.&lt;br /&gt;
| Small buffer overflow triggered by a Pia UnreliableProtocol message.&lt;br /&gt;
| v5.31.0, exact version unknown.&lt;br /&gt;
| v5.18.98/v5.31.0&lt;br /&gt;
| November 2022&lt;br /&gt;
| November 29, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Uncleared input structs for [[LDN_services|LDN]]&lt;br /&gt;
| The Pia code using ldn CreateNetwork*/ConnectNetwork*/Scan doesn&#039;t properly memset the input data for SecurityConfig/ScanFilter (when keysize is less than 0x40 for the former). Hence, infoleak from games is sent to ldn (structs are located on stack, so stack data is leaked). This requires ldn compromise/mitm to obtain the leaked data - these are not sent over the network.&lt;br /&gt;
With v6.20.1 (exact version unknown - fix isn&#039;t present in v5.32.0), the code using Scan* now clears the input ScanFilter properly. With v6.25.1 (exact version unknown - fix isn&#039;t present in v6.23.3), the code using CreateNetwork*/ConnectNetwork* now clears the input SecurityConfig properly.&lt;br /&gt;
| Infoleak from games with LDN cmds, requires compromised sysmodule/mitm.&lt;br /&gt;
| v6.20.1 and v6.25.1, exact versions unknown.&lt;br /&gt;
| v5.32.0/v6.20.1/v6.23.3/v6.25.1&lt;br /&gt;
| &lt;br /&gt;
| December 7, 2022&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ENL ===&lt;br /&gt;
This section documents vulnerabilities for [https://github.com/kinnay/NintendoClients/wiki/ENL-Protocol ENL].&lt;br /&gt;
A framework used by Nintendo games including Mario Kart 8 Deluxe, Splatoon 2 / 3, Mario Maker 2, and more.&lt;br /&gt;
&lt;br /&gt;
Fun fact, this library appears to re-use network code and concepts from older Nintendo titles such as Mario Kart 7 and some Wii multiplayer games.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in Enl version&lt;br /&gt;
!  Last Enl version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| enl::TransportManager::updateReceiveBuffer_() nullptr deref&lt;br /&gt;
| enl::TransportManager::updateReceiveBuffer_() is called when the ENL framework receives a PIA packet from a client, it will fully trust the ENL header which includes a &amp;quot;ContentTransporter&amp;quot; type (ID) and a length.&lt;br /&gt;
The function will try to fetch the content transporter by ID using &amp;lt;code&amp;gt;enl::TransportManager::getContentTransporter(unsigned char const &amp;amp;)&amp;lt;/code&amp;gt;, it returns NULL if there&#039;s no content transporter with the same ID&lt;br /&gt;
&lt;br /&gt;
*NOTE: The function may be inlined&lt;br /&gt;
&lt;br /&gt;
Then it will try to call a virtual method: &amp;lt;code&amp;gt;virtual size_t readyReceiveStream(enl::RamReadStream&amp;amp;, enl::Buffer*, size_t)&amp;lt;/code&amp;gt;, dereferencing the pointer to fetch the vtable ptr&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/Rambo6Glaz/c088e2ed7a12db08f6322e9f7a3c4911 Pseudocode of the function before it was fixed]&lt;br /&gt;
&lt;br /&gt;
| nullptr dereference triggered by an invalid content transporter type in the ENL header (it will crash the game/process)&lt;br /&gt;
| Unknown&lt;br /&gt;
| Depends on the game&lt;br /&gt;
| Early April 2022&lt;br /&gt;
| November 16, 2022&lt;br /&gt;
| [[User:Rambo6Glaz|Rambo6Glaz]], Kinnay (massive RE help)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There&#039;s another one more interesting but it will have to wait a bit :)&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12167</id>
		<title>16.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12167"/>
		<updated>2023-02-21T09:40:55Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* IPC Interface Changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 16.0.0 system update was released on February 21, 2023 (UTC). This Switch update was released for the following regions: ALL, CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   User nicknames that cannot be used will be replaced with “???” which can be updated from the profile settings. &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* New sysmodule ngc was added (0100000000000050).&lt;br /&gt;
* All sysmodules were updated (excluding stubbed-lbl).&lt;br /&gt;
* Most SystemData were updated, except for: Chinese and Korean dictionaries, Dictionary, AvatarImage, UrlBlackList, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* Most applets were updated, except for: cabinet, controller, netConnect, swkbd, miiEdit, starter, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* [[Boot2|boot2.ProdBoot]] now has access to [[NCM_services|ncm]].&lt;br /&gt;
* [[Friend_services|friends]] no longer has access to [[SPL_services|csrng]].&lt;br /&gt;
* nifm now has htc:nd access.&lt;br /&gt;
* nifm, ldn, ns: pl:u access was replaced with pl:s.&lt;br /&gt;
* ns now has access to ns:am2 and ns:su (for GetService).&lt;br /&gt;
* nim no longer has access to spl: (on older versions this was unused besides service-init).&lt;br /&gt;
* vi now has pl:u access.&lt;br /&gt;
* glue now has hosted-service pl:u access (moved from sdb) and access to svcCreateSharedMemory.&lt;br /&gt;
* fatal had access for the following removed: nvdrv:s, pl:u, vi:s.&lt;br /&gt;
* sdb had access for pl:u (hosted-service) and svcCreateSharedMemory removed.&lt;br /&gt;
* qlaunch, playerSelect, photoViewer, myPage: access to ngc:u was added.&lt;br /&gt;
&lt;br /&gt;
The SafeMode bootpkgs KIP for PCV had &amp;quot;Default CPU Core&amp;quot; changed from 3 to 63.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated and &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; added.&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/UserCssCore0.dat&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/UserCss.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/&amp;quot; added, which contains &amp;quot;BrowserOffscreenDrawer.bnsh&amp;quot;.&lt;br /&gt;
** &amp;quot;/lyt/Browse/Page.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot; The various NROs located under here were updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; and &amp;quot;/legallines.htdocs/index.html&amp;quot; were updated.&lt;br /&gt;
* NgWord: updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnSupIntro/main_Other.jpg&amp;quot;, &amp;quot;/message/EUnl/localNews.msbt.szs&amp;quot;, &amp;quot;/message/revision.txt&amp;quot; updated.&lt;br /&gt;
* Eula: &amp;quot;/KRko/Eula.msbt.szs&amp;quot; and &amp;quot;/revision.txt&amp;quot; updated.&lt;br /&gt;
* FirmwareDebugSettings: [[System_Settings|updated]]&lt;br /&gt;
* NgWord2: updated. Added &amp;quot;/ac_similar_form_nx&amp;quot; and &amp;quot;/table_similar_form_nx&amp;quot;.&lt;br /&gt;
* NgWordT: &amp;quot;/mars_dirty_words_db&amp;quot; updated&lt;br /&gt;
* applets: various UI/message/gfx data updated.&lt;br /&gt;
* web-applets: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; and &amp;quot;/.nrr/modules.nrr&amp;quot; updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::ngc::detail::IService&lt;br /&gt;
** nn::pl::sharedresource::detail::IPlatformSharedResourceManager&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForNintendoAccountLinkage&lt;br /&gt;
*** Added command 200 - buffers: [9, 9, 9], inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IApplicationFunctions&lt;br /&gt;
*** Removed command 34 - buffers: [5], inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 51 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IHomeMenuFunctions&lt;br /&gt;
*** Added command 50 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 51 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::aocsrv::detail::IAddOnContentManager&lt;br /&gt;
*** Added command 300 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 301 - buffers: [6], inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 302 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 13 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 14 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 15 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::codec::detail::IHardwareOpusDecoderManager&lt;br /&gt;
*** Added command 8 - inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command 9 - buffers: [25], inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 3 - inbytes: 8, outbytes: 16&lt;br /&gt;
*** Added command 13 - inbytes: 16, outbytes: 16&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 7 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 8 - inbytes: 4, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::ec::IContentsServiceManager&lt;br /&gt;
*** Added command 1 - buffers: [5], inbytes: 96, outbytes: 0, outhandles: [1], outinterfaces: [None], pid: True&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Changed command 11 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Changed command 16 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Added command 18 - buffers: [6, 6, 6], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Removed command 3001 - buffers: [22, 22, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Removed command 3002 - buffers: [22], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::fan::detail::IManager&lt;br /&gt;
*** Added command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x7100078D58&#039;] -&amp;gt; [&#039;0x710007990C&#039;] (final state: inbytes: 0, outbytes: 0, outinterfaces: [&#039;0x710007990C&#039;])&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 10 - buffers: [25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Changed command 206 - inbytes: 4 -&amp;gt; 8 (final state: buffers: [25], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IStorage&#039;])&lt;br /&gt;
*** Removed command 609 - buffers: [25], inbytes: 0, outbytes: 16&lt;br /&gt;
*** Changed command 610 - inbytes: 0 -&amp;gt; 1 (final state: buffers: [25], inbytes: 1, outbytes: 24)&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [26, 25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 25 - inbytes: 28, outbytes: 0&lt;br /&gt;
*** Added command 26 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3000 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 26 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Removed command 1130 - inbytes: 16, inhandles: [1], outbytes: 0, pid: True&lt;br /&gt;
** nn::ncm::IContentManager&lt;br /&gt;
*** Added command 15 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Changed command 19 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 20 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 27 - inbytes: 32 -&amp;gt; 33 (final state: inbytes: 33, outbytes: 24)&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Changed command 10 - outbytes: 88 -&amp;gt; 96 (final state: inbytes: 16, outbytes: 96)&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
*** Removed command 604 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 611 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::ns::detail::IDocumentInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
** nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
*** Removed command 14 - buffers: [5], inbytes: 8, outbytes: 1&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Changed command 4 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 16, outbytes: 72)&lt;br /&gt;
*** Changed command 5 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 32, outbytes: 72)&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Removed command 0 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Removed command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 2 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 3 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 4 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 5 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
*** Removed command 6 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslConnection&lt;br /&gt;
*** Added command 28 - buffers: [5], inbytes: 4, outbytes: 4&lt;br /&gt;
*** Added command 29 - buffers: [6], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 30 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 31 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 32 - inbytes: 0, outbytes: 2&lt;br /&gt;
*** Added command 33 - buffers: [6, 5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 34 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 35 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::ssl::sf::ISslContext&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Added command 2060 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2062 - buffers: [5], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2063 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 6014 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 6015 - inbytes: 8, outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerRootService&lt;br /&gt;
*** Added command 100 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 20, outbytes: 0&lt;br /&gt;
*** Added command 103 - buffers: [5], inbytes: 32, outbytes: 4&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler upgrade&lt;br /&gt;
** Version is currently unknown, probably ~LLVM 15?&lt;br /&gt;
** Many NOPs inserted to align branch destinations to 16 bytes, many ADRP + ADD pairs replaced with NOP + ADR&lt;br /&gt;
*** This probably corresponds to this commit? https://github.com/llvm/llvm-project/commit/4450a2a23df0e7081ca7fee3ec641774afedc2bc&lt;br /&gt;
**** Alexander Shaposhnikov, why did you do this, it makes diffing harder :(&lt;br /&gt;
** Compiler now more frequently detecting a reusable computed offset for load/store&lt;br /&gt;
* KThreadStackParameters:&lt;br /&gt;
** Stack parameters are now 0x10 larger.&lt;br /&gt;
** The additional 0x10 bytes appear to be completely unused, at least on prod NX builds of the kernel.&lt;br /&gt;
* KScheduler changes:&lt;br /&gt;
** Idle count tracking has been changed to use two fields (&amp;quot;idle count&amp;quot;, &amp;quot;switch count&amp;quot;).&lt;br /&gt;
*** In UpdateHighestThreads(), switching to the idle thread does idle_count = ++switch_count, and switching to a non-kernel thread does ++switch_count.&lt;br /&gt;
*** KProcess now has an additional array of counts (&amp;quot;running_thread_switch_counts&amp;quot;), UpdateHighestThreads() also sets running_thread_switch_counts[core] = switch_count.&lt;br /&gt;
** KDebug::GetRunningThreadInfo() now only succeeds if running_thread_switch_counts[core] == Scheduler-&amp;gt;switch_count + 1.&lt;br /&gt;
*** Previously, this checked running_thread_idle_counts[core] == Scheduler-&amp;gt;idle_count, which meant the thread had to have not switched to idle between its last execution and the GetRunningThreadInfo() wait finishing.&lt;br /&gt;
*** Now, this requires the core to have switched directly from the target thread to GetRunningThreadInfo(), which is to say the condition is &amp;quot;The thread is actually running at the target time&amp;quot;.&lt;br /&gt;
*** In addition, now ResultNoThread is returned if switch_count == idle_count + 1, otherwise ResultUnknownThread is returned; previously only NoThread was returnable.&lt;br /&gt;
**** switch_count == idle_count + 1 implies that the switch to GetRunningThreadInfo() happened from idle thread, so ResultNoThread is returned exactly when the running thread was the idle thread.&lt;br /&gt;
**** Otherwise, if a thread other than the idle thread was the running thread, UnknownThread is returned.&lt;br /&gt;
** KSchedulerLock::Lock() now always increments count, instead of setting count = 1 when the lock owner is not the current thread.&lt;br /&gt;
** Note: Several KScheduler functions have big assembly changes, but this appears to be pure compiler optimization changes with no semantic differences.&lt;br /&gt;
* KProcess had the creation time member deleted.&lt;br /&gt;
* A new KPageTable::Operate operation was added (&amp;quot;ChangePermsAndRefreshWithFlushDataCache&amp;quot;)&lt;br /&gt;
** Previously, all calls to Operate with ChangePermsAndRefresh would flush data cache; now, calls to ChangePermsAndRefresh do not flush data cache and calls to ChangePermsAndRefreshWithFlushDataCache do.&lt;br /&gt;
*** ChangePermsAndRefreshWithFlushDataCache is otherwise identical to ChangePermsAndRefresh semantically.&lt;br /&gt;
* QueryIoMapping now supports querying memory regions with KMemoryState_Static in addition to KMemoryState_Io.&lt;br /&gt;
* Some changes surrounding KIoRegion:&lt;br /&gt;
** KIoRegion now uses an intrusive red black tree member for the pool list, rather than an intrusive list node.&lt;br /&gt;
** KIoPool::AddIoRegion() uses the intrusive tree to check fewer regions for Contains().&lt;br /&gt;
** KPageTableBase::UnmapIoRegion now takes the MemoryMapping as argument (which was passed to CreateIoRegion).&lt;br /&gt;
*** When mapping is MemoryMapping_Memory, the mapping following is done before unmap:&lt;br /&gt;
**** The region is permission changed to be uncached, using ChangePermsAndRefresh (without FlushDataCache).&lt;br /&gt;
**** The table&#039;s lock is released.&lt;br /&gt;
**** cpu::FlushDataCache() is called to flush the mapping.&lt;br /&gt;
**** The table&#039;s lock is reacquired.&lt;br /&gt;
*** All fallible operations now call KernelPanic() on failure, rather than returning the result code&lt;br /&gt;
* KAddressSpaceInfo::GetAddressSpaceStart()/GetAddressSpaceSize() no longer use complicated switch logic to only examine the indices with the right bit-width, and instead just iterate all indices with an if to check bit width.&lt;br /&gt;
* Big changes to KThread waiting/priority inheritance:&lt;br /&gt;
** m_waiter_list, m_lock_owner fields were deleted.&lt;br /&gt;
** New fields m_held_lock_info_list, m_waiting_lock_info were added.&lt;br /&gt;
*** This is an intrusive list of new type KThreadLockInfo (storing info on all locks held), and a pointer to the lock this thread is waiting on, if any.&lt;br /&gt;
*** There is one lock info for each address key.&lt;br /&gt;
*** KThreadLockInfo is slab allocated, count = # of KThreads&lt;br /&gt;
*** KThreadLockInfo has the following fields:&lt;br /&gt;
**** LockWithPriorityInheritanceThreadTree m_cv_tree; // Tree of threads waiting on the lock, this re-uses the node for condvar/arbiter.&lt;br /&gt;
**** KProcessAddress m_address_key;&lt;br /&gt;
**** KThread *m_owner;&lt;br /&gt;
**** u32 m_waiter_count;&lt;br /&gt;
** This greatly simplifies RemoveWaiterByKey (as there is a single KThreadLockInfo representing all threads waiting on the key).&lt;br /&gt;
*** RemoveWaiterByKey now also has an output bool pointer for whether the lock still has waiters, rather than an output s32 pointer for # of waiters.&lt;br /&gt;
** RestorePriority has been shuffled to ensure the new CV tree inside lock info has its invariants maintained across the priority set.&lt;br /&gt;
** Several calls to RestorePriority are now guarded by if statements, to only invoke RestorePriority if there is a possible change in inherited priority.&lt;br /&gt;
* Big changes to crt0/Initialize0/KInitialPageTable/Sleep Manager:&lt;br /&gt;
** KInitialPageTable::Map (and others) now take a new physical-to-virtual-offset argument, and add this to L1 table etc.&lt;br /&gt;
** Changes to Initial Arguments:&lt;br /&gt;
*** Initial arguments are now size 0x80.&lt;br /&gt;
*** Initial argument pointers are no longer used; Init arguments array addresses are used directly, with presumption that no page boundary is crossed.&lt;br /&gt;
*** Initial arguments no longer use setup function/etc.&lt;br /&gt;
*** Instead of setting ep = HorizonKernelMain, Initial arguments now set ep = InvokeMain (this function was previously &amp;quot;InvokeEntryPoint&amp;quot;)&lt;br /&gt;
*** idle stack is now retrieved from KMemoryLayout inside InvokeMain, instead of being a field inside Initial Arguments.&lt;br /&gt;
** After setting up initial arguments, Initialize0 now returns to crt0, which sets sp = InitArguments[0]-&amp;gt;sp and calls new function (&amp;quot;Initialize1&amp;quot;).&lt;br /&gt;
*** All KInitialPageTable calls from here onward now pass g_LinearPhysToVirtDiff, and thus page table accesses are done using the Linear mapping set up by Initialize0.&lt;br /&gt;
** Initialize1 does the following:&lt;br /&gt;
*** The initial identity mapping is unmapped in its entirety.&lt;br /&gt;
**** The single-page containing crt0 + interrupt vectors is re-identity-mapped as R-X.&lt;br /&gt;
**** PageAllocator for this is an extremely simplified new InitialPageAllocator type, which always has exactly two free pages to be allocated.&lt;br /&gt;
*** All remaining logic which used to be in Initialize0 happens here, with no changes.&lt;br /&gt;
** TurnOnAllCores now calls a helper function (&amp;quot;TurnOnCore&amp;quot;) to turn on the cores.&lt;br /&gt;
*** void TurnOnCore(__int64 core, InitArguments *argument);&lt;br /&gt;
*** TurnOnCore does virt-&amp;gt;phys translation lookup (using at s1e1r) on StartOtherCore (from crt0 page) + argument, and calls smc::CpuOn directly.&lt;br /&gt;
**** TurnOnCore is &amp;quot;probably&amp;quot; a KSystemControl function.&lt;br /&gt;
** Sleep handler thread function now sets resume entry addr = StartOtherCore, and sets up an InitArguments for each core.&lt;br /&gt;
*** ResumeEntry and ResumeEntryVirtual are now merged/simplified.&lt;br /&gt;
* Changes to pool allocations:&lt;br /&gt;
** Minimum non-secure system pool size is now ~2MB larger (0x2C04000 vs 0x2A0C000).&lt;br /&gt;
** Slab heap gaps size is now 0x9000 smaller (0x1A7000 vs 0x1B0000).&lt;br /&gt;
* KSystemControl::Initialize has been restructured (operations reordered), and now calls a helper which sets up the MT, creates system resource limit, etc.&lt;br /&gt;
** This helper also modifies the KAddressSpaceInfo tables, when memory is large (these were previously read-only).&lt;br /&gt;
** In particular, the following modifications are made to the 39-bit address space infos based on the total memory size:&lt;br /&gt;
*** size &amp;lt;= 8 GB: No changes (Heap Region = 8 GB, Alias region = 64 GB)&lt;br /&gt;
*** 8 GB &amp;lt; size &amp;lt;= 16 GB: Heap Region = size, Alias Region = 8 * size&lt;br /&gt;
*** 16 GB &amp;lt; size &amp;lt;= 32 GB: Heap region = size, Alias region = 128 GB&lt;br /&gt;
*** 32 GB &amp;lt;= size: Heap region = 32 GB, Alias region = 128 GB&lt;br /&gt;
* KSystemControl::Init::GenerateRandomRange now supports min=0, max=0xFFFFFFFFFFFFFFFF (previously it was incorrect for this case).&lt;br /&gt;
* New InfoType (0x1B) (&amp;quot;IoRegionHint&amp;quot;)&lt;br /&gt;
** This takes a handle to a KIoRegion, and returns the low bits of the region&#039;s address.&lt;br /&gt;
*** If the region&#039;s size is &amp;lt; 0x10000, this is the low 12 bits, otherwise if size &amp;lt; 0x200000, this is the low 16 bits, otherwise it&#039;s the low 21 bits.&lt;br /&gt;
* UserspaceAccess functions no longer do adr X30, fail in the loop, now do adr X#, fail before the loop and mov X30, X# in the loop.&lt;br /&gt;
* All code which sets ThreadContext&#039;s pstate field now uses the mask 0xF0000000 for aarch64 threads and 0xFE0FFE20 for aarch32 threads.&lt;br /&gt;
** Previously, this used the mask 0xFF0FFE20 for both.&lt;br /&gt;
** This removes the ability to get/set the DIT bit for both aarch64 and aarch32, and removes many other bits for aarch64 only.&lt;br /&gt;
* Interrupt disable logic was removed from a number of functions:&lt;br /&gt;
** KAddressArbiter::SignalAndIncrementIfEqual, KAddressArbiter::SignalAndModifyBasedOnWaitingThreadCount, KAddressArbiter::WaitIfLessThan, KConditionVariable::SignalConditionVariableImpl&lt;br /&gt;
* KConditionVariable::SignalToAddress now does dmb before copying updated value to userspace.&lt;br /&gt;
* KDebugBase functions for DebugEvents were changed to take pointer to params + count, instead of 5 parameter arguments.&lt;br /&gt;
** This propagates up to many/all caller functions.&lt;br /&gt;
** The only variable length parameter counts are DebugEvent_Exception + DebugException_UserBreak/DebugException_DebuggerBreak&lt;br /&gt;
*** This copies the variable-count parameters directly to the result exception info without maximum size check.&lt;br /&gt;
**** This is not exploitable, because there is no way for userspace to control parameter count, and it will always remain in bounds.&lt;br /&gt;
**** Presumably exception info type is larger if compiling for a target with more than 4 CPUs, to prevent out-of-bounds copies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-02-21_00-05-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12166</id>
		<title>16.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12166"/>
		<updated>2023-02-21T08:23:56Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 16.0.0 system update was released on February 21, 2023 (UTC). This Switch update was released for the following regions: ALL, CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   User nicknames that cannot be used will be replaced with “???” which can be updated from the profile settings. &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* New sysmodule ngc was added (0100000000000050).&lt;br /&gt;
* All sysmodules were updated (excluding stubbed-lbl).&lt;br /&gt;
* Most SystemData were updated, except for: Chinese and Korean dictionaries, Dictionary, AvatarImage, UrlBlackList, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* Most applets were updated, except for: cabinet, controller, netConnect, swkbd, miiEdit, starter, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* [[Boot2|boot2.ProdBoot]] now has access to [[NCM_services|ncm]].&lt;br /&gt;
* [[Friend_services|friends]] no longer has access to [[SPL_services|csrng]].&lt;br /&gt;
* nifm now has htc:nd access.&lt;br /&gt;
* nifm, ldn, ns: pl:u access was replaced with pl:s.&lt;br /&gt;
* ns now has access to ns:am2 and ns:su (for GetService).&lt;br /&gt;
* nim no longer has access to spl: (on older versions this was unused besides service-init).&lt;br /&gt;
* vi now has pl:u access.&lt;br /&gt;
* glue now has hosted-service pl:u access (moved from sdb) and access to svcCreateSharedMemory.&lt;br /&gt;
* fatal had access for the following removed: nvdrv:s, pl:u, vi:s.&lt;br /&gt;
* sdb had access for pl:u (hosted-service) and svcCreateSharedMemory removed.&lt;br /&gt;
* qlaunch, playerSelect, photoViewer, myPage: access to ngc:u was added.&lt;br /&gt;
&lt;br /&gt;
The SafeMode bootpkgs KIP for PCV had &amp;quot;Default CPU Core&amp;quot; changed from 3 to 63.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated and &amp;quot;/ssl_TrustedCerts.Ounce.bdf&amp;quot; added.&lt;br /&gt;
* ErrorMessage: updated&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/UserCssCore0.dat&amp;quot; added&lt;br /&gt;
** &amp;quot;/browser/UserCss.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/gfxShader/&amp;quot; added, which contains &amp;quot;BrowserOffscreenDrawer.bnsh&amp;quot;.&lt;br /&gt;
** &amp;quot;/lyt/Browse/Page.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot; The various NROs located under here were updated.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; and &amp;quot;/legallines.htdocs/index.html&amp;quot; were updated.&lt;br /&gt;
* NgWord: updated.&lt;br /&gt;
* LocalNews: &amp;quot;/image/LnSupIntro/main_Other.jpg&amp;quot;, &amp;quot;/message/EUnl/localNews.msbt.szs&amp;quot;, &amp;quot;/message/revision.txt&amp;quot; updated.&lt;br /&gt;
* Eula: &amp;quot;/KRko/Eula.msbt.szs&amp;quot; and &amp;quot;/revision.txt&amp;quot; updated.&lt;br /&gt;
* FirmwareDebugSettings: [[System_Settings|updated]]&lt;br /&gt;
* NgWord2: updated. Added &amp;quot;/ac_similar_form_nx&amp;quot; and &amp;quot;/table_similar_form_nx&amp;quot;.&lt;br /&gt;
* NgWordT: &amp;quot;/mars_dirty_words_db&amp;quot; updated&lt;br /&gt;
* applets: various UI/message/gfx data updated.&lt;br /&gt;
* web-applets: &amp;quot;/buildinfo/buildinfo.dat&amp;quot; and &amp;quot;/.nrr/modules.nrr&amp;quot; updated.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::ngc::detail::IService&lt;br /&gt;
** [ID = 0xb74e5372]&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForNintendoAccountLinkage&lt;br /&gt;
*** Added command 200 - buffers: [9, 9, 9], inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IApplicationFunctions&lt;br /&gt;
*** Removed command 34 - buffers: [5], inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 51 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IHomeMenuFunctions&lt;br /&gt;
*** Added command 50 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 51 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::aocsrv::detail::IAddOnContentManager&lt;br /&gt;
*** Added command 300 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 301 - buffers: [6], inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 302 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 13 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 14 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 15 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::codec::detail::IHardwareOpusDecoderManager&lt;br /&gt;
*** Added command 8 - inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command 9 - buffers: [25], inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 3 - inbytes: 8, outbytes: 16&lt;br /&gt;
*** Added command 13 - inbytes: 16, outbytes: 16&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 7 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 8 - inbytes: 4, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::ec::IContentsServiceManager&lt;br /&gt;
*** Added command 1 - buffers: [5], inbytes: 96, outbytes: 0, outhandles: [1], outinterfaces: [None], pid: True&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Changed command 11 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Changed command 16 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Added command 18 - buffers: [6, 6, 6], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Removed command 3001 - buffers: [22, 22, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Removed command 3002 - buffers: [22], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::fan::detail::IManager&lt;br /&gt;
*** Added command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x7100078D58&#039;] -&amp;gt; [&#039;0x710007990C&#039;] (final state: inbytes: 0, outbytes: 0, outinterfaces: [&#039;0x710007990C&#039;])&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 10 - buffers: [25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Changed command 206 - inbytes: 4 -&amp;gt; 8 (final state: buffers: [25], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IStorage&#039;])&lt;br /&gt;
*** Removed command 609 - buffers: [25], inbytes: 0, outbytes: 16&lt;br /&gt;
*** Changed command 610 - inbytes: 0 -&amp;gt; 1 (final state: buffers: [25], inbytes: 1, outbytes: 24)&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [26, 25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 25 - inbytes: 28, outbytes: 0&lt;br /&gt;
*** Added command 26 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3000 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 26 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Removed command 1130 - inbytes: 16, inhandles: [1], outbytes: 0, pid: True&lt;br /&gt;
** nn::ncm::IContentManager&lt;br /&gt;
*** Added command 15 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Changed command 19 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 20 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 27 - inbytes: 32 -&amp;gt; 33 (final state: inbytes: 33, outbytes: 24)&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Changed command 10 - outbytes: 88 -&amp;gt; 96 (final state: inbytes: 16, outbytes: 96)&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
*** Removed command 604 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 611 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::ns::detail::IDocumentInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
** nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
*** Removed command 14 - buffers: [5], inbytes: 8, outbytes: 1&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Changed command 4 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 16, outbytes: 72)&lt;br /&gt;
*** Changed command 5 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 32, outbytes: 72)&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Removed command 0 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Removed command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 2 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 3 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 4 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 5 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
*** Removed command 6 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslConnection&lt;br /&gt;
*** Added command 28 - buffers: [5], inbytes: 4, outbytes: 4&lt;br /&gt;
*** Added command 29 - buffers: [6], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 30 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 31 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 32 - inbytes: 0, outbytes: 2&lt;br /&gt;
*** Added command 33 - buffers: [6, 5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 34 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 35 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::ssl::sf::ISslContext&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Added command 2060 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2062 - buffers: [5], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2063 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 6014 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 6015 - inbytes: 8, outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerRootService&lt;br /&gt;
*** Added command 100 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 20, outbytes: 0&lt;br /&gt;
*** Added command 103 - buffers: [5], inbytes: 32, outbytes: 4&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler upgrade&lt;br /&gt;
** Version is currently unknown, probably ~LLVM 15?&lt;br /&gt;
** Many NOPs inserted to align branch destinations to 16 bytes, many ADRP + ADD pairs replaced with NOP + ADR&lt;br /&gt;
*** This probably corresponds to this commit? https://github.com/llvm/llvm-project/commit/4450a2a23df0e7081ca7fee3ec641774afedc2bc&lt;br /&gt;
**** Alexander Shaposhnikov, why did you do this, it makes diffing harder :(&lt;br /&gt;
** Compiler now more frequently detecting a reusable computed offset for load/store&lt;br /&gt;
* KThreadStackParameters:&lt;br /&gt;
** Stack parameters are now 0x10 larger.&lt;br /&gt;
** The additional 0x10 bytes appear to be completely unused, at least on prod NX builds of the kernel.&lt;br /&gt;
* KScheduler changes:&lt;br /&gt;
** Idle count tracking has been changed to use two fields (&amp;quot;idle count&amp;quot;, &amp;quot;switch count&amp;quot;).&lt;br /&gt;
*** In UpdateHighestThreads(), switching to the idle thread does idle_count = ++switch_count, and switching to a non-kernel thread does ++switch_count.&lt;br /&gt;
*** KProcess now has an additional array of counts (&amp;quot;running_thread_switch_counts&amp;quot;), UpdateHighestThreads() also sets running_thread_switch_counts[core] = switch_count.&lt;br /&gt;
** KDebug::GetRunningThreadInfo() now only succeeds if running_thread_switch_counts[core] == Scheduler-&amp;gt;switch_count + 1.&lt;br /&gt;
*** Previously, this checked running_thread_idle_counts[core] == Scheduler-&amp;gt;idle_count, which meant the thread had to have not switched to idle between its last execution and the GetRunningThreadInfo() wait finishing.&lt;br /&gt;
*** Now, this requires the core to have switched directly from the target thread to GetRunningThreadInfo(), which is to say the condition is &amp;quot;The thread is actually running at the target time&amp;quot;.&lt;br /&gt;
*** In addition, now ResultNoThread is returned if switch_count == idle_count + 1, otherwise ResultUnknownThread is returned; previously only NoThread was returnable.&lt;br /&gt;
**** switch_count == idle_count + 1 implies that the switch to GetRunningThreadInfo() happened from idle thread, so ResultNoThread is returned exactly when the running thread was the idle thread.&lt;br /&gt;
**** Otherwise, if a thread other than the idle thread was the running thread, UnknownThread is returned.&lt;br /&gt;
** KSchedulerLock::Lock() now always increments count, instead of setting count = 1 when the lock owner is not the current thread.&lt;br /&gt;
** Note: Several KScheduler functions have big assembly changes, but this appears to be pure compiler optimization changes with no semantic differences.&lt;br /&gt;
* KProcess had the creation time member deleted.&lt;br /&gt;
* A new KPageTable::Operate operation was added (&amp;quot;ChangePermsAndRefreshWithFlushDataCache&amp;quot;)&lt;br /&gt;
** Previously, all calls to Operate with ChangePermsAndRefresh would flush data cache; now, calls to ChangePermsAndRefresh do not flush data cache and calls to ChangePermsAndRefreshWithFlushDataCache do.&lt;br /&gt;
*** ChangePermsAndRefreshWithFlushDataCache is otherwise identical to ChangePermsAndRefresh semantically.&lt;br /&gt;
* QueryIoMapping now supports querying memory regions with KMemoryState_Static in addition to KMemoryState_Io.&lt;br /&gt;
* Some changes surrounding KIoRegion:&lt;br /&gt;
** KIoRegion now uses an intrusive red black tree member for the pool list, rather than an intrusive list node.&lt;br /&gt;
** KIoPool::AddIoRegion() uses the intrusive tree to check fewer regions for Contains().&lt;br /&gt;
** KPageTableBase::UnmapIoRegion now takes the MemoryMapping as argument (which was passed to CreateIoRegion).&lt;br /&gt;
*** When mapping is MemoryMapping_Memory, the mapping following is done before unmap:&lt;br /&gt;
**** The region is permission changed to be uncached, using ChangePermsAndRefresh (without FlushDataCache).&lt;br /&gt;
**** The table&#039;s lock is released.&lt;br /&gt;
**** cpu::FlushDataCache() is called to flush the mapping.&lt;br /&gt;
**** The table&#039;s lock is reacquired.&lt;br /&gt;
*** All fallible operations now call KernelPanic() on failure, rather than returning the result code&lt;br /&gt;
* KAddressSpaceInfo::GetAddressSpaceStart()/GetAddressSpaceSize() no longer use complicated switch logic to only examine the indices with the right bit-width, and instead just iterate all indices with an if to check bit width.&lt;br /&gt;
* Big changes to KThread waiting/priority inheritance:&lt;br /&gt;
** m_waiter_list, m_lock_owner fields were deleted.&lt;br /&gt;
** New fields m_held_lock_info_list, m_waiting_lock_info were added.&lt;br /&gt;
*** This is an intrusive list of new type KThreadLockInfo (storing info on all locks held), and a pointer to the lock this thread is waiting on, if any.&lt;br /&gt;
*** There is one lock info for each address key.&lt;br /&gt;
*** KThreadLockInfo is slab allocated, count = # of KThreads&lt;br /&gt;
*** KThreadLockInfo has the following fields:&lt;br /&gt;
**** LockWithPriorityInheritanceThreadTree m_cv_tree; // Tree of threads waiting on the lock, this re-uses the node for condvar/arbiter.&lt;br /&gt;
**** KProcessAddress m_address_key;&lt;br /&gt;
**** KThread *m_owner;&lt;br /&gt;
**** u32 m_waiter_count;&lt;br /&gt;
** This greatly simplifies RemoveWaiterByKey (as there is a single KThreadLockInfo representing all threads waiting on the key).&lt;br /&gt;
*** RemoveWaiterByKey now also has an output bool pointer for whether the lock still has waiters, rather than an output s32 pointer for # of waiters.&lt;br /&gt;
** RestorePriority has been shuffled to ensure the new CV tree inside lock info has its invariants maintained across the priority set.&lt;br /&gt;
** Several calls to RestorePriority are now guarded by if statements, to only invoke RestorePriority if there is a possible change in inherited priority.&lt;br /&gt;
* Big changes to crt0/Initialize0/KInitialPageTable/Sleep Manager:&lt;br /&gt;
** KInitialPageTable::Map (and others) now take a new physical-to-virtual-offset argument, and add this to L1 table etc.&lt;br /&gt;
** Changes to Initial Arguments:&lt;br /&gt;
*** Initial arguments are now size 0x80.&lt;br /&gt;
*** Initial argument pointers are no longer used; Init arguments array addresses are used directly, with presumption that no page boundary is crossed.&lt;br /&gt;
*** Initial arguments no longer use setup function/etc.&lt;br /&gt;
*** Instead of setting ep = HorizonKernelMain, Initial arguments now set ep = InvokeMain (this function was previously &amp;quot;InvokeEntryPoint&amp;quot;)&lt;br /&gt;
*** idle stack is now retrieved from KMemoryLayout inside InvokeMain, instead of being a field inside Initial Arguments.&lt;br /&gt;
** After setting up initial arguments, Initialize0 now returns to crt0, which sets sp = InitArguments[0]-&amp;gt;sp and calls new function (&amp;quot;Initialize1&amp;quot;).&lt;br /&gt;
*** All KInitialPageTable calls from here onward now pass g_LinearPhysToVirtDiff, and thus page table accesses are done using the Linear mapping set up by Initialize0.&lt;br /&gt;
** Initialize1 does the following:&lt;br /&gt;
*** The initial identity mapping is unmapped in its entirety.&lt;br /&gt;
**** The single-page containing crt0 + interrupt vectors is re-identity-mapped as R-X.&lt;br /&gt;
**** PageAllocator for this is an extremely simplified new InitialPageAllocator type, which always has exactly two free pages to be allocated.&lt;br /&gt;
*** All remaining logic which used to be in Initialize0 happens here, with no changes.&lt;br /&gt;
** TurnOnAllCores now calls a helper function (&amp;quot;TurnOnCore&amp;quot;) to turn on the cores.&lt;br /&gt;
*** void TurnOnCore(__int64 core, InitArguments *argument);&lt;br /&gt;
*** TurnOnCore does virt-&amp;gt;phys translation lookup (using at s1e1r) on StartOtherCore (from crt0 page) + argument, and calls smc::CpuOn directly.&lt;br /&gt;
**** TurnOnCore is &amp;quot;probably&amp;quot; a KSystemControl function.&lt;br /&gt;
** Sleep handler thread function now sets resume entry addr = StartOtherCore, and sets up an InitArguments for each core.&lt;br /&gt;
*** ResumeEntry and ResumeEntryVirtual are now merged/simplified.&lt;br /&gt;
* Changes to pool allocations:&lt;br /&gt;
** Minimum non-secure system pool size is now ~2MB larger (0x2C04000 vs 0x2A0C000).&lt;br /&gt;
** Slab heap gaps size is now 0x9000 smaller (0x1A7000 vs 0x1B0000).&lt;br /&gt;
* KSystemControl::Initialize has been restructured (operations reordered), and now calls a helper which sets up the MT, creates system resource limit, etc.&lt;br /&gt;
** This helper also modifies the KAddressSpaceInfo tables, when memory is large (these were previously read-only).&lt;br /&gt;
** In particular, the following modifications are made to the 39-bit address space infos based on the total memory size:&lt;br /&gt;
*** size &amp;lt;= 8 GB: No changes (Heap Region = 8 GB, Alias region = 64 GB)&lt;br /&gt;
*** 8 GB &amp;lt; size &amp;lt;= 16 GB: Heap Region = size, Alias Region = 8 * size&lt;br /&gt;
*** 16 GB &amp;lt; size &amp;lt;= 32 GB: Heap region = size, Alias region = 128 GB&lt;br /&gt;
*** 32 GB &amp;lt;= size: Heap region = 32 GB, Alias region = 128 GB&lt;br /&gt;
* KSystemControl::Init::GenerateRandomRange now supports min=0, max=0xFFFFFFFFFFFFFFFF (previously it was incorrect for this case).&lt;br /&gt;
* New InfoType (0x1B) (&amp;quot;IoRegionHint&amp;quot;)&lt;br /&gt;
** This takes a handle to a KIoRegion, and returns the low bits of the region&#039;s address.&lt;br /&gt;
*** If the region&#039;s size is &amp;lt; 0x10000, this is the low 12 bits, otherwise if size &amp;lt; 0x200000, this is the low 16 bits, otherwise it&#039;s the low 21 bits.&lt;br /&gt;
* UserspaceAccess functions no longer do adr X30, fail in the loop, now do adr X#, fail before the loop and mov X30, X# in the loop.&lt;br /&gt;
* All code which sets ThreadContext&#039;s pstate field now uses the mask 0xF0000000 for aarch64 threads and 0xFE0FFE20 for aarch32 threads.&lt;br /&gt;
** Previously, this used the mask 0xFF0FFE20 for both.&lt;br /&gt;
** This removes the ability to get/set the DIT bit for both aarch64 and aarch32, and removes many other bits for aarch64 only.&lt;br /&gt;
* Interrupt disable logic was removed from a number of functions:&lt;br /&gt;
** KAddressArbiter::SignalAndIncrementIfEqual, KAddressArbiter::SignalAndModifyBasedOnWaitingThreadCount, KAddressArbiter::WaitIfLessThan, KConditionVariable::SignalConditionVariableImpl&lt;br /&gt;
* KConditionVariable::SignalToAddress now does dmb before copying updated value to userspace.&lt;br /&gt;
* KDebugBase functions for DebugEvents were changed to take pointer to params + count, instead of 5 parameter arguments.&lt;br /&gt;
** This propagates up to many/all caller functions.&lt;br /&gt;
** The only variable length parameter counts are DebugEvent_Exception + DebugException_UserBreak/DebugException_DebuggerBreak&lt;br /&gt;
*** This copies the variable-count parameters directly to the result exception info without maximum size check.&lt;br /&gt;
**** This is not exploitable, because there is no way for userspace to control parameter count, and it will always remain in bounds.&lt;br /&gt;
**** Presumably exception info type is larger if compiling for a target with more than 4 CPUs, to prevent out-of-bounds copies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-02-21_00-05-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12151</id>
		<title>16.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=16.0.0&amp;diff=12151"/>
		<updated>2023-02-21T01:08:12Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add 15 -&amp;gt; 16 ipc diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 16.0.0 system update was released on February 21, 2023 (UTC). This Switch update was released for the following regions: ALL, CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   User nicknames that cannot be used will be replaced with “???” which can be updated from the profile settings. &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* New sysmodule ngc was added (0100000000000050).&lt;br /&gt;
* All sysmodules were updated (excluding stubbed-lbl).&lt;br /&gt;
* Most SystemData were updated, except for: Chinese and Korean dictionaries, Dictionary, AvatarImage, UrlBlackList, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* Most applets were updated, except for: cabinet, controller, netConnect, swkbd, miiEdit, starter, maintenance.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes (besides usual version-bump):&lt;br /&gt;
* boot2.ProdBoot now has access to [[NCM_services|ncm]].&lt;br /&gt;
* [[Friend_services|friends]] no longer has access to [[SPL_services|csrng]].&lt;br /&gt;
* nifm now has htc:nd access.&lt;br /&gt;
* nifm, ldn, ns: pl:u access was replaced with pl:s.&lt;br /&gt;
* ns now has access to ns:am2 and ns:su (for GetService).&lt;br /&gt;
* nim no longer has access to spl:.&lt;br /&gt;
* vi now has pl:u access.&lt;br /&gt;
* glue now has hosted-service pl:u access (moved from sdb) and access to svcCreateSharedMemory.&lt;br /&gt;
* fatal had access for the following removed: nvdrv:s, pl:u, vi:s.&lt;br /&gt;
* sdb had access for pl:u (hosted-service) and svcCreateSharedMemory removed.&lt;br /&gt;
* qlaunch, playerSelect, photoViewer, myPage: access to ngc:u was added.&lt;br /&gt;
&lt;br /&gt;
The SafeMode bootpkgs KIP for PCV had &amp;quot;Default CPU Core&amp;quot; changed from 3 to 63.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following interfaces were removed:&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
* The following interfaces were added:&lt;br /&gt;
** nn::ngc::detail::IService&lt;br /&gt;
** [ID = 0xb74e5372]&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::IAccountEntityServiceForAccountPolicy&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::IAccountServiceForAdministrator&lt;br /&gt;
*** Added command 910 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 161 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::nas::IOAuthProcedureForNintendoAccountLinkage&lt;br /&gt;
*** Added command 200 - buffers: [9, 9, 9], inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::account::detail::IAsyncContext&#039;]&lt;br /&gt;
** nn::am::service::IApplicationFunctions&lt;br /&gt;
*** Removed command 34 - buffers: [5], inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 51 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IHomeMenuFunctions&lt;br /&gt;
*** Added command 50 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 51 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::aocsrv::detail::IAddOnContentManager&lt;br /&gt;
*** Added command 300 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 301 - buffers: [6], inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
*** Added command 302 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::bsdsocket::cfg::ServerInterface&lt;br /&gt;
*** Added command 13 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 14 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 15 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::codec::detail::IHardwareOpusDecoderManager&lt;br /&gt;
*** Added command 8 - inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command 9 - buffers: [25], inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 3 - inbytes: 8, outbytes: 16&lt;br /&gt;
*** Added command 13 - inbytes: 16, outbytes: 16&lt;br /&gt;
** nn::dp2hdmi::detail::IDp2hdmiController&lt;br /&gt;
*** Added command 7 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 8 - inbytes: 4, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::ec::IContentsServiceManager&lt;br /&gt;
*** Added command 1 - buffers: [5], inbytes: 96, outbytes: 0, outhandles: [1], outinterfaces: [None], pid: True&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Changed command 11 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Changed command 16 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [6], inbytes: 16, outbytes: 4)&lt;br /&gt;
*** Added command 18 - buffers: [6, 6, 6], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Removed command 3001 - buffers: [22, 22, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Removed command 3002 - buffers: [22], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::fan::detail::IManager&lt;br /&gt;
*** Added command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
** nn::friends::detail::ipc::IServiceCreator&lt;br /&gt;
*** Changed command 2 - outinterfaces: [&#039;0x7100078D58&#039;] -&amp;gt; [&#039;0x710007990C&#039;] (final state: inbytes: 0, outbytes: 0, outinterfaces: [&#039;0x710007990C&#039;])&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 10 - buffers: [25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Changed command 206 - inbytes: 4 -&amp;gt; 8 (final state: buffers: [25], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IStorage&#039;])&lt;br /&gt;
*** Removed command 609 - buffers: [25], inbytes: 0, outbytes: 16&lt;br /&gt;
*** Changed command 610 - inbytes: 0 -&amp;gt; 1 (final state: buffers: [25], inbytes: 1, outbytes: 24)&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxyForLoader&lt;br /&gt;
*** Changed command 0 - inbytes: 8 -&amp;gt; 16 (final state: buffers: [26, 25], inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 25 - inbytes: 28, outbytes: 0&lt;br /&gt;
*** Added command 26 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3000 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 26 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Removed command 1130 - inbytes: 16, inhandles: [1], outbytes: 0, pid: True&lt;br /&gt;
** nn::ncm::IContentManager&lt;br /&gt;
*** Added command 15 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::ncm::IContentStorage&lt;br /&gt;
*** Changed command 19 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 20 - inbytes: 16 -&amp;gt; 17 (final state: inbytes: 17, outbytes: 24)&lt;br /&gt;
*** Changed command 27 - inbytes: 32 -&amp;gt; 33 (final state: inbytes: 33, outbytes: 24)&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Changed command 10 - outbytes: 88 -&amp;gt; 96 (final state: inbytes: 16, outbytes: 96)&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
*** Removed command 604 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 611 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::ns::detail::IDocumentInterface&lt;br /&gt;
*** Changed command 21 - outbytes: 0 -&amp;gt; 1 (final state: buffers: [22], inbytes: 16, outbytes: 1)&lt;br /&gt;
** nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
*** Removed command 14 - buffers: [5], inbytes: 8, outbytes: 1&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Changed command 4 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 16, outbytes: 72)&lt;br /&gt;
*** Changed command 5 - outbytes: 40 -&amp;gt; 72 (final state: inbytes: 32, outbytes: 72)&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManagerForSystem&lt;br /&gt;
*** Removed command 0 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Removed command 1 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 2 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 3 - inbytes: 4, outbytes: 4&lt;br /&gt;
*** Removed command 4 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 5 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
*** Removed command 6 - buffers: [6, 6, 6], inbytes: 8, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslConnection&lt;br /&gt;
*** Added command 28 - buffers: [5], inbytes: 4, outbytes: 4&lt;br /&gt;
*** Added command 29 - buffers: [6], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 30 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 31 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 32 - inbytes: 0, outbytes: 2&lt;br /&gt;
*** Added command 33 - buffers: [6, 5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 34 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 35 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::ssl::sf::ISslContext&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
*** Added command 12 - buffers: [5, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 13 - buffers: [6, 6, 5], inbytes: 4, outbytes: 8&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Added command 2060 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2062 - buffers: [5], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 2063 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 6014 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 6015 - inbytes: 8, outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerRootService&lt;br /&gt;
*** Added command 100 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 20, outbytes: 0&lt;br /&gt;
*** Added command 103 - buffers: [5], inbytes: 32, outbytes: 4&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2023-02-21_00-05-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11985</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11985"/>
		<updated>2022-10-15T18:27:37Z</updated>

		<summary type="html">&lt;p&gt;SciresM: fix added -&amp;gt; removed for some removed commands&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu. Video capture is not supported.&lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
====Loader====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Bluetooth_Driver_services|bluetooth]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[NS_Services|ns]]===&lt;br /&gt;
Besides the various IPC changes, vulnerable RNG usage was [[Switch_System_Flaws|fixed]] to properly use secure RNG where needed.&lt;br /&gt;
&lt;br /&gt;
===[[RO_services|ro]]===&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Removed command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Removed command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Removed command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Removed command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Removed command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Removed command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Removed command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Removed command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=11972</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=11972"/>
		<updated>2022-10-12T14:46:01Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Update SVCs to reflect 15.0.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! ID || Return Type || Name || Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Result || [[#SetHeapSize|SetHeapSize]] || uintptr_t *out_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Result || [[#SetMemoryPermission|SetMemoryPermission]] || uintptr_t address, size_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Result || [[#SetMemoryAttribute|SetMemoryAttribute]] || uintptr_t address, size_t size, uint32_t mask, uint32_t attr&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Result || [[#MapMemory|MapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Result || [[#UnmapMemory|UnmapMemory]] || uintptr_t dst_address, uintptr_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Result || [[#QueryMemory|QueryMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || void || [[#ExitProcess|ExitProcess]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Result || [[#CreateThread|CreateThread]] || Handle *out_handle, ThreadFunc func, uintptr_t arg, uintptr_t stack_bottom, int32_t priority, int32_t core_id&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || Result || [[#StartThread|StartThread]] || Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || void || [[#ExitThread|ExitThread]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || void || [[#SleepThread|SleepThread]] || int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Result || [[#GetThreadPriority|GetThreadPriority]] || int32_t *out_priority, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || Result || [[#SetThreadPriority|SetThreadPriority]] || Handle thread_handle, int32_t priority&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || Result || [[#GetThreadCoreMask|GetThreadCoreMask]] || int32_t *out_core_id, uint64_t *out_affinity_mask, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || Result || [[#SetThreadCoreMask|SetThreadCoreMask]] || Handle thread_handle, int32_t core_id, uint64_t affinity_mask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || int32_t || [[#GetCurrentProcessorNumber|GetCurrentProcessorNumber]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || Result || [[#SignalEvent|SignalEvent]] || Handle event_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || Result || [[#ClearEvent|ClearEvent]] || Handle event_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || Result || [[#MapSharedMemory|MapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size, MemoryPermission map_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || Result || [[#UnmapSharedMemory|UnmapSharedMemory]] || Handle shmem_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || Result || [[#CreateTransferMemory|CreateTransferMemory]] || Handle *out_handle, uintptr_t address, size_t size, MemoryPermission map_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || Result || [[#CloseHandle|CloseHandle]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Result || [[#ResetSignal|ResetSignal]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Result || [[#WaitSynchronization|WaitSynchronization]] || int32_t *out_index, const Handle *handles, int32_t numHandles, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Result || [[#CancelSynchronization|CancelSynchronization]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Result || [[#ArbitrateLock|ArbitrateLock]] || Handle thread_handle, uintptr_t address, uint32_t tag&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || Result || [[#ArbitrateUnlock|ArbitrateUnlock]] || uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || Result || [[#WaitProcessWideKeyAtomic|WaitProcessWideKeyAtomic]] || uintptr_t address, uintptr_t cv_key, uint32_t tag, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || void || [[#SignalProcessWideKey|SignalProcessWideKey]] || uintptr_t cv_key, int32_t count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || int64_t || [[#GetSystemTick|GetSystemTick]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || Result || [[#ConnectToNamedPort|ConnectToNamedPort]] || Handle *out_handle, const char *name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Result || [[#SendSyncRequestLight|SendSyncRequestLight]] || Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || Result || [[#SendSyncRequest|SendSyncRequest]] || Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || Result || [[#SendSyncRequestWithUserBuffer|SendSyncRequestWithUserBuffer]] || uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || Result || [[#SendAsyncRequestWithUserBuffer|SendAsyncRequestWithUserBuffer]] || Handle *out_event_handle, uintptr_t message_buffer, size_t message_buffer_size, Handle session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || Result || [[#GetProcessId|GetProcessId]] || uint64_t *out_process_id, Handle process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || Result || [[#GetThreadId|GetThreadId]] || uint64_t *out_thread_id, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || void || [[#Break|Break]] || BreakReason break_reason, uintptr_t arg, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || Result || [[#OutputDebugString|OutputDebugString]] || const char *debug_str, size_t len&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || void || [[#ReturnFromException|ReturnFromException]] || Result result&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || Result || [[#GetInfo|GetInfo]] || uint64_t *out, InfoType info_type, Handle handle, uint64_t info_subtype&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || void || [[#FlushEntireDataCache|FlushEntireDataCache]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || Result || [[#FlushDataCache|FlushDataCache]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x2C  || Result || [[#MapPhysicalMemory|MapPhysicalMemory]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] 0x2D  || Result || [[#UnmapPhysicalMemory|UnmapPhysicalMemory]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0-5.1.0] 0x2E  || Result || GetFutureThreadInfo || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags, int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x2E  || Result || [[#GetDebugFutureThreadInfo|GetDebugFutureThreadInfo]] || arch::LastThreadContext *out_context, uint64_t *thread_id, Handle debug_handle, int64_t ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || Result || [[#GetLastThreadInfo|GetLastThreadInfo]] || arch::LastThreadContext *out_context, uintptr_t *out_tls_address, uint32_t *out_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || Result || [[#GetResourceLimitLimitValue|GetResourceLimitLimitValue]] || int64_t *out_limit_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || Result || [[#GetResourceLimitCurrentValue|GetResourceLimitCurrentValue]] || int64_t *out_current_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || Result || [[#SetThreadActivity|SetThreadActivity]] || Handle thread_handle, ThreadActivity thread_activity&lt;br /&gt;
|-&lt;br /&gt;
| 0x33  || Result || [[#GetThreadContext3|GetThreadContext3]] || ThreadContext *out_context, Handle thread_handle&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x34 || Result || [[#WaitForAddress|WaitForAddress]] || uintptr_t address, ArbitrationType arb_type, int32_t value, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x35 || Result || [[#SignalToAddress|SignalToAddress]] || uintptr_t address, SignalType signal_type, int32_t value, int32_t count&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0+] 0x36 || void || [[#SynchronizePreemptionState|SynchronizePreemptionState]] || &lt;br /&gt;
|-&lt;br /&gt;
| [11.0.0+] 0x37 || Result || [[#GetResourceLimitPeakValue|GetResourceLimitPeakValue]] || int64_t *out_peak_value, Handle resource_limit_handle, LimitableResource which&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [13.0.0+] 0x39 || Result || CreateIoPool || Handle *out_handle, IoPoolType which_pool&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x3A || Result || CreateIoRegion || Handle *out_handle, Handle io_pool, PhysicalAddress physical_address, size_t size, MemoryMapping mapping, MemoryPermission perm&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [1.0.0-3.0.2] 0x3C || void || [[#DumpInfo|DumpInfo]] || DumpInfoType dump_info_type, uint64_t arg&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x3C || void || [[#KernelDebug|KernelDebug]] || KernelDebugType kern_debug_type, uint64_t arg0, uint64_t arg1, uint64_t arg2&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x3D || void || [[#ChangeKernelTraceState|ChangeKernelTraceState]] || KernelTraceState kern_trace_state&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || Result || [[#CreateSession|CreateSession]] || Handle *out_server_session_handle, Handle *out_client_session_handle, bool is_light, uintptr_t name&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || Result || [[#AcceptSession|AcceptSession]] || Handle *out_handle, Handle port&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || Result || [[#ReplyAndReceiveLight|ReplyAndReceiveLight]] || Handle handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || Result || [[#ReplyAndReceive|ReplyAndReceive]] || int32_t *out_index, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || Result || [[#ReplyAndReceiveWithUserBuffer|ReplyAndReceiveWithUserBuffer]] || int32_t *out_index, uintptr_t message_buffer, size_t message_buffer_size, const Handle *handles, int32_t num_handles, Handle reply_target, int64_t timeout_ns&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || Result || [[#CreateEvent|CreateEvent]] || Handle *out_write_handle, Handle *out_read_handle&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x46 || Result || MapIoRegion || Handle io_region, uintptr_t address, size_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| [13.0.0+] 0x47 || Result || UnmapIoRegion || Handle io_region, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x48 || Result || [[#MapPhysicalMemoryUnsafe|MapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x49 || Result || [[#UnmapPhysicalMemoryUnsafe|UnmapPhysicalMemoryUnsafe]] || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4A || Result || [[#SetUnsafeLimit|SetUnsafeLimit]] || size_t limit&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x4B || Result || [[#CreateCodeMemory|CreateCodeMemory]] || Handle *out_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 0x4C || Result || [[#ControlCodeMemory|ControlCodeMemory]] || Handle code_memory_handle, CodeMemoryOperation operation, uint64_t address, uint64_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || void || [[#SleepSystem|SleepSystem]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || Result || [[#ReadWriteRegister|ReadWriteRegister]] || uint32_t *out_value, PhysicalAddress address, uint32_t mask, uint32_t value&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || Result || [[#SetProcessActivity|SetProcessActivity]] || Handle process_handle, ProcessActivity process_activity&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || Result || [[#CreateSharedMemory|CreateSharedMemory]] || Handle *out_handle, size_t size, MemoryPermission owner_perm, MemoryPermission remote_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || Result || [[#MapTransferMemory|MapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size, MemoryPermission owner_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || Result || [[#UnmapTransferMemory|UnmapTransferMemory]] || Handle trmem_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || Result || [[#CreateInterruptEvent|CreateInterruptEvent]] || Handle *out_read_handle, int32_t interrupt_id, InterruptType interrupt_type&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, [10.0.0+] size_t *out_size, PhysicalAddress physical_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || Result || [[#AttachDeviceAddressSpace|AttachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-12.1.0] 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || Result || [[#UnmapDeviceAddressSpace|UnmapDeviceAddressSpace]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || Result || [[#InvalidateProcessDataCache|InvalidateProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || Result || [[#StoreProcessDataCache|StoreProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || Result || [[#FlushProcessDataCache|FlushProcessDataCache]] || Handle process_handle, uint64_t address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || Result || [[#DebugActiveProcess|DebugActiveProcess]] || Handle *out_handle, uint64_t process_id&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || Result || [[#BreakDebugProcess|BreakDebugProcess]] || Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || Result || [[#TerminateDebugProcess|TerminateDebugProcess]] || Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || Result || [[#GetDebugEvent|GetDebugEvent]] || arch::DebugEventInfo *out_info, Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || Result || [[#ContinueDebugEvent|ContinueDebugEvent]] || Handle debug_handle, uint32_t flags, const uint64_t *thread_ids, int32_t num_thread_ids&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || Result || [[#GetProcessList|GetProcessList]] || int32_t *out_num_processes, uint64_t *out_process_ids, int32_t max_out_count&lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || Result || [[#GetThreadList|GetThreadList]] || int32_t *out_num_threads, uint64_t *out_thread_ids, int32_t max_out_count, Handle debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || Result || [[#GetDebugThreadContext|GetDebugThreadContext]] || ThreadContext *out_context, Handle debug_handle, uint64_t thread_id, uint32_t context_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || Result || [[#SetDebugThreadContext|SetDebugThreadContext]] || Handle debug_handle, uint64_t thread_id, const ThreadContext *context, uint32_t context_flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || Result || [[#QueryDebugProcessMemory|QueryDebugProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uintptr_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || Result || [[#ReadDebugProcessMemory|ReadDebugProcessMemory]] || uintptr_t buffer, Handle debug_handle, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || Result || [[#WriteDebugProcessMemory|WriteDebugProcessMemory]] || Handle debug_handle, uintptr_t buffer, uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || Result || [[#SetHardwareBreakPoint|SetHardwareBreakPoint]] || HardwareBreakPointRegisterName name, uint64_t flags, uint64_t value&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || Result || [[#GetDebugThreadParam|GetDebugThreadParam]] || uint64_t *out_64, uint32_t *out_32, Handle debug_handle, uint64_t thread_id, DebugThreadParam param&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [5.0.0+] 0x6F || Result || [[#GetSystemInfo|GetSystemInfo]] || uint64_t *out, SystemInfoType info_type, Handle handle, uint64_t info_subtype&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || Result || [[#CreatePort|CreatePort]] || Handle *out_server_handle, Handle *out_client_handle, int32_t max_sessions, bool is_light, uintptr_t name&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || Result || [[#ManageNamedPort|ManageNamedPort]] || Handle *out_server_handle, const char *name, int32_t max_sessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || Result || [[#ConnectToPort|ConnectToPort]] || Handle *out_handle, Handle port&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || Result || [[#SetProcessMemoryPermission|SetProcessMemoryPermission]] || Handle process_handle, uint64_t address, uint64_t size, MemoryPermission perm&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || Result || [[#MapProcessMemory|MapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || Result || [[#UnmapProcessMemory|UnmapProcessMemory]] || uintptr_t dst_address, Handle process_handle, uint64_t src_address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || Result || [[#QueryProcessMemory|QueryProcessMemory]] || arch::MemoryInfo *out_memory_info, PageInfo *out_page_info, Handle process_handle, uint64_t address&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || Result || [[#MapProcessCodeMemory|MapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || Result || [[#UnmapProcessCodeMemory|UnmapProcessCodeMemory]] || Handle process_handle, uint64_t dst_address, uint64_t src_address, uint64_t size&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || Result || [[#CreateProcess|CreateProcess]] || Handle *out_handle, const arch::CreateProcessParameter *parameters, const uint32_t *caps, int32_t num_caps&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || Result || [[#StartProcess|StartProcess]] || Handle process_handle, int32_t priority, int32_t core_id, uint64_t main_thread_stack_size&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || Result || [[#TerminateProcess|TerminateProcess]] || Handle process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || Result || [[#GetProcessInfo|GetProcessInfo]] || int64_t *out_info, Handle process_handle, ProcessInfoType info_type&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || Result || [[#CreateResourceLimit|CreateResourceLimit]] || Handle *out_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || Result || [[#SetResourceLimitLimitValue|SetResourceLimitLimitValue]] || Handle resource_limit_handle, LimitableResource which, int64_t limit_value&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| [15.0.0+] 0x90  || Result || MapInsecureMemory || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
| [15.0.0+] 0x91  || Result || UnmapInsecureMemory || uintptr_t address, size_t size&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || HeapAddress&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d, and always in the Heap memory region) is written to HeapAddress.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition. The memory allocated counts towards the caller&#039;s process Memory ResourceLimit.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Invalid size passed. It&#039;s either bigger than 4GB, or misaligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD001:&#039;&#039;&#039; Size is bigger than the Heap Region size.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; KMemoryBlockAllocator slab allocator exhausted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The memory region is in an invalid state. Likely because a mapping was made in the heap region.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x10801:&#039;&#039;&#039; Memory resource limit reached.&lt;br /&gt;
&lt;br /&gt;
== SetMemoryPermission ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The memory region was reprotected.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Unaligned address specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Unaligned or zero size specified.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region does not fall within the userland address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD801:&#039;&#039;&#039; Invalid permission specified. Valid permissions are ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD401:&#039;&#039;&#039; The provided memory region was in an invalid state. The region must have the [[#MemoryState|FlagCanReprotect]] state, and must not have the [[#MemoryAttribute|Locked]] or [[#MemoryAttribute|Uncached]] attributes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; Kernel resource exhausted.&lt;br /&gt;
&lt;br /&gt;
== SetMemoryAttribute ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || uint32_t || Mask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes attribute of page-aligned memory region. The only allowed combination of Value and Mask is 0x8, which means only bit3 in [[#MemoryAttribute]] can be set or cleared.&lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
== MapMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#GetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#GetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== UnmapMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps a region that was previously mapped with [[#MapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== QueryMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queries information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== ExitProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== CreateThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R0 || int32_t || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R4 || int32_t || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
ProcessorId must be 0,1,2,3 or -2, where -2 uses the default CpuId for process.&lt;br /&gt;
&lt;br /&gt;
== StartThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== ExitThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== SleepThread ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0, R1 || uint64_t || Nanoseconds&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sleeps for a specified amount of time, or yields the thread.&lt;br /&gt;
&lt;br /&gt;
Setting nanoseconds to 0, -1, or -2 indicates a yielding type.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Yielding without core migration&lt;br /&gt;
|-&lt;br /&gt;
| -1 || Yielding with core migration&lt;br /&gt;
|-&lt;br /&gt;
| -2 || Yielding to any other thread&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadPriority ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || int32_t || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets the priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== SetThreadPriority ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| int32_t || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== GetThreadCoreMask ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || int32_t || CoreMask0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || R2, R3 || uint64_t || CoreMask1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets the affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== SetThreadCoreMask ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || int32_t || CoreMask0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || uint64_t || CoreMask1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets the affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== GetCurrentProcessorNumber ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || uint32_t || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gets which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
CpuId is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== SignalEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent&amp;gt; || EventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puts the given event in the signaled state.&lt;br /&gt;
&lt;br /&gt;
Will wake up any thread currently waiting on this event. Can potentially trigger a reschedule.&lt;br /&gt;
&lt;br /&gt;
Any calls to [[#WaitSynchronization]] on this handle will return immediately, until the event&#039;s signaled state is reset.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Event is now in signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
== ClearEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;WritableEvent&amp;gt; or Handle&amp;lt;ReadableEvent&amp;gt; || EventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes the given event out of the signaled state.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success, the event is now in the not-signaled state.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; The handle was not in a signaled state.&lt;br /&gt;
&lt;br /&gt;
== MapSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== UnmapSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== CloseHandle ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ResetSignal ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;ReadableEvent&amp;gt; or Handle&amp;lt;Process&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this is equivalent to calling ClearEvent() on the handle.&lt;br /&gt;
&lt;br /&gt;
If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The signal was reset.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The handle is invalid or of the wrong type.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; The handle was not signaled, or the process is in exited state, causing it to be permanently signaled.&lt;br /&gt;
&lt;br /&gt;
== WaitSynchronization ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || int64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint64_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with HandlesNum &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#GetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#GetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via [[#SignalEvent]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#AcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#ReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#CancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== CancelSynchronization ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#WaitSynchronization]], [[#ReplyAndReceive]] or [[#ReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== ArbitrateLock ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || uint32_t || Tag&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;                                  &lt;br /&gt;
&lt;br /&gt;
== ArbitrateUnlock ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WaitProcessWideKeyAtomic ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || KeyAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void* || TagAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Tag&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || int64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SignalProcessWideKey ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || int32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetSystemTick ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0, R1 || uint64_t || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== ConnectToNamedPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || char* || PortName&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequestLight ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequest ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SendSyncRequestWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and Address must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; Address is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== SendAsyncRequestWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || EventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and Address must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
== GetProcessId ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || ProcessId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadId ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || ThreadId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Break ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#BreakReason]] || BreakReason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if [[#ContinueDebugEvent]] didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== OutputDebugString ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || char* || String&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReturnFromException ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#InfoType]] || InfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || uint64_t || InfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || Info&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushEntireDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MapPhysicalMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acts like [[#SetHeapSize]] except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Invalid size passed. It&#039;s either zero or not 4k-aligned&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Invalid address. (not 4k-aligned)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xDC01:&#039;&#039;&#039; Invalid memory range. It&#039;s either causes overflow, or does not fall into &amp;quot;reserved&amp;quot; address range (aka Alias). See AliasRegionAddress at [[#InfoType]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xFA01:&#039;&#039;&#039; Invalid state. (not enough SystemResource (see [[NPDM#SystemResourceSize]]))&lt;br /&gt;
&lt;br /&gt;
== UnmapPhysicalMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugFutureThreadInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R1 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || LastThreadContextParam0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || LastThreadContextParam1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || LastThreadContextParam2&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X4 || uint64_t || LastThreadContextParam3&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X5 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W6 || uint32_t ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetLastThreadInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || LastThreadContextParam0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || LastThreadContextParam1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || LastThreadContextParam2&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X4 || uint64_t || LastThreadContextParam3&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X5 || uint64_t ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W6 || uint32_t ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitLimitValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || LimitValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitCurrentValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || CurrentValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetThreadActivity ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || [[#ThreadActivity]] || ThreadActivity&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetThreadContext3 ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Thread&amp;gt; || ThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WaitForAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#ArbitrationType]] || ArbitrationType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SignalToAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#SignalType]] || SignalType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || uint32_t || NumToSignal&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0  || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SynchronizePreemptionState ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  || &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetResourceLimitPeakValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || int64_t || PeakValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DumpInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#DumpInfoType]] || DumpInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || DumpInfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This function was removed and replaced by [[#KernelDebug]].&lt;br /&gt;
&lt;br /&gt;
== KernelDebug ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#KernelDebugType]] || KernelDebugType&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
== ChangeKernelTraceState ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#KernelTraceState]] || KernelTraceState&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stubbed in retail kernel.&lt;br /&gt;
&lt;br /&gt;
== CreateSession ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || bool || IsLight&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || ServerSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || Handle&amp;lt;ClientSession&amp;gt; || ClientSessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AcceptSession ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || PortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || ServerSessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceiveLight ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Port&amp;gt; or Handle&amp;lt;ServerSession&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceive ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle&amp;lt;Port&amp;gt;* or Handle&amp;lt;ServerSession&amp;gt;* || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTargetSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R0, R4 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTargetSessionHandle is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTargetSessionHandle is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTargetSessionHandle is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== ReplyAndReceiveWithUserBuffer ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || Handle&amp;lt;Port&amp;gt;* or Handle&amp;lt;ServerSession&amp;gt;* || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R0 || uint32_t || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R4 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTargetSessionHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X6 || R5, R6 || uint64_t || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;WritableEvent&amp;gt; || WritableEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MapPhysicalMemoryUnsafe ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Same as [[#MapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== UnmapPhysicalMemoryUnsafe ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetUnsafeLimit ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || uint64_t || Limit&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;CodeMemory&amp;gt; || CodeMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== ControlCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;CodeMemory&amp;gt; || CodeMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#CodeMemoryOperation]] || CodeMemoryOperation&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4, R5 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R6 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the backing memory for a CodeMemory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|UnmapOwner/UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== SleepSystem ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || || &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReadWriteRegister ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || RegisterAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R0 || uint32_t || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R1 || uint32_t || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC#ReadWriteRegister|ReadWriteRegister]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by the SMC [[SMC#ReadWriteRegister|ReadWriteRegister]] (checked in addition to the whitelist in the ReadWriteRegister SVC), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== SetProcessActivity ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || [[#ProcessActivity]] || ProcessActivity&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreateSharedMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#MemoryPermission]] || LocalMemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || RemoteMemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || SharedMemoryHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== MapTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in [[#CreateTransferMemory]], otherwise error.&lt;br /&gt;
&lt;br /&gt;
== UnmapTransferMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || TransferMemoryHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
== CreateInterruptEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#Interrupt]] || Interrupt&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#InterruptType]] || InterruptType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ReadableEvent&amp;gt; || ReadableEventHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates an event handle for the given IRQ number. Waiting on this handle will wait until the IRQ is triggered. The InterruptType argument configures the triggering. If it is 0, the IRQ is active HIGH level sensitive, if it is 1 it is rising-edge sensitive.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Flags was &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF201:&#039;&#039;&#039; IRQ above 0x3FF or outside the [[NPDM#Kernel_Access_Control|IRQ access mask]] was given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCE01:&#039;&#039;&#039; A SlabHeap was exhausted (too many interrupts created).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF401:&#039;&#039;&#039; IRQ already has an event registered.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xD201:&#039;&#039;&#039; The handle table is full. Try closing some handles.&lt;br /&gt;
&lt;br /&gt;
== QueryPhysicalAddress ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || VirtualAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || PhysicalMemoryInfoAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || uint64_t || PhysicalMemoryInfoBaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || uint64_t || PhysicalMemoryInfoSize&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Queries the physical address of a virtual address. Will always fetch the lowest page-aligned mapping that contains the provided physical address.&lt;br /&gt;
&lt;br /&gt;
The returned PhysicalMemoryInfoBaseAddress is the virtual address of that page-aligned mapping, while PhysicalMemoryInfoAddress is the physical address of that page. PhysicalMemoryInfoSize is the amount of continuous physical memory in that mapping.&lt;br /&gt;
&lt;br /&gt;
== QueryIoMapping ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || IoAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1 || void* || VirtualAddress&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== CreateDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || DeviceAddressSpaceStartAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R0, R1 || uint64_t || DeviceAddressSpaceEndAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
StartAddr is normally set to 0 and EndAddr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== AttachDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceName&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== DetachDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceName&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpaceByForce ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || uint32_t || Option&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Address is the userspace destination address, while DeviceAddressSpaceAddress is the source address between DeviceAddressSpaceStartAddress and DeviceAddressSpaceEndAddress (passed to [[#CreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|FlagCanDeviceMap]] bit set. Bit [[SVC#MemoryAttribute|DeviceShared]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits.&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpaceAligned ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || R7 || uint32_t  || Option&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|FlagCanAlignedDeviceMap]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits.&lt;br /&gt;
&lt;br /&gt;
== MapDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X5 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W6 || R7 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1 || uint64_t || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UnmapDeviceAddressSpace ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAddressSpaceHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || DeviceAddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== InvalidateProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== StoreProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FlushProcessDataCache ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DebugActiveProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== BreakDebugProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TerminateDebugProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#DebugEventInfo]]* || DebugEventInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugEvent ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || uint32_t || [[#ContinueDebugFlags]] ([1.0.0-2.3.0] [[#ContinueDebugFlagsOld]])&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 ([1.0.0-2.3.0] R2, R3) || uint64_t* ([1.0.0-2.3.0] uint64_t)|| ThreadIdList ([1.0.0-2.3.0] ThreadId)&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3 || uint64_t || [3.0.0+] NumThreadIds&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maximum NumThreadIds is 64. 0 means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The process has been resumed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid debug handle.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf401:&#039;&#039;&#039; Process has debug events queued or is already running.&lt;br /&gt;
&lt;br /&gt;
== GetProcessList ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || uint64_t* || ProcessIdBuffer&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || ProcessIdBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || NumProcesses&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fills the provided array with the pids of currently living processes. A process &amp;quot;lives&amp;quot; so long as it is currently running or a handle to it still exists.&lt;br /&gt;
&lt;br /&gt;
It returns the total number of processes currently alive. If this number is bigger than the size of ProcessIdBuffer, the user won&#039;t have all the pids.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xd401:&#039;&#039;&#039; The provided buffer is outside the process address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; copyToUser failed. The provided buffer is not user-accessible.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; The provided buffer size is too big. Max value is 0xFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== GetThreadList ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || uint64_t* || ThreadIdBuffer&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || uint32_t || ThreadIdBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || uint32_t || NumThreads&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetDebugThreadContext ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R4 || uint32_t || [[#ThreadContextFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetDebugThreadContext ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1 || [[#ThreadContext]]* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R4 || uint32_t || [[#ThreadContextFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== QueryDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ReadDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || MemoryBufferAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WriteDebugProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || MemoryBufferAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetHardwareBreakPoint ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || [[#HardwareBreakPointRegisterName]] || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || uint64_t || Flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of HardwareBreakPointRegisterName:&lt;br /&gt;
&lt;br /&gt;
If HardwareBreakPointRegisterName &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given DebugHandle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
If HardwareBreakPointRegisterName is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that HardwareBreakPointRegisterName 0 to 4 match only to Virtual Address, while HardwareBreakPointRegisterName 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
== GetDebugThreadParam ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2 || Handle&amp;lt;Debug&amp;gt; || DebugHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R0, R1 || uint64_t || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || R3 || [[#DebugThreadParam]] || DebugThreadParam&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || R3 || uint32_t || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetSystemInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#SystemInfoType]] || SystemInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || uint64_t || SystemInfoSubType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || uint64_t || SystemInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CreatePort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R3 || bool || IsLight&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || R0 || uint64_t || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || Handle&amp;lt;Port&amp;gt; || ServerPortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W2 || R2 || Handle&amp;lt;Port&amp;gt; || ClientPortHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ManageNamedPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || char* || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || int32_t || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Port&amp;gt; || ServerPortHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ConnectToPort ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || ClientPortHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Session&amp;gt; || SessionHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetProcessMemoryPermission ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || R5 || [[#MemoryPermission]] || MemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== MapProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== UnmapProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R4 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#MapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== QueryProcessMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || [[#MemoryInfo]]* || MemoryInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R1, R3 || void* || Address&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || R1 || [[#PageInfo]] || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#QueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== MapProcessCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== UnmapProcessCodeMemory ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || R2, R3 || void* || DstAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R1, R4 || void* || SrcAddress&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R5, R6 || uint64_t || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#MapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== CreateProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessParameter]]* || CreateProcessParameter&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || uint32_t* || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || int32_t || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessParameter]] as input.&lt;br /&gt;
Capabilities points to an array of [[NPDM#Kernel_Access_Control|kernel capabilities]].&lt;br /&gt;
CapabilitiesNum is a number of capabilities in the Capabilities array (number of element, not number of bytes).&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCA01:&#039;&#039;&#039; Attempted to map more code pages than available in address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xCC01:&#039;&#039;&#039; Provided CodeAddr is invalid (make sure it&#039;s in range?)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE401:&#039;&#039;&#039; The resource handle passed is invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE601:&#039;&#039;&#039; Attempt to copy procinfo from user-supplied pointer failed. Attempt to copy capabilities_num from user-supplied pointer failed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xE801:&#039;&#039;&#039; Attempted to create a 32-bit process with a 36-bit address space.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xF001:&#039;&#039;&#039; Unused bits are set in mmuflags. Unknown address space type used.&lt;br /&gt;
&lt;br /&gt;
== StartProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || int32_t || MainThreadPriority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || R2 || int32_t || DefaultCpuId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || R3, R4 || uint64_t || MainThreadStackSize&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== TerminateProcess ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GetProcessInfo ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R2 || [[#ProcessInfoType]] || ProcessInfoType&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || R1, R2 || uint64_t || [[#ProcessState]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== CreateResourceLimit ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || ||&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SetResourceLimitLimitValue ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || R0 || Handle&amp;lt;ResourceLimit&amp;gt; || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || R1 || [[#LimitableResource]] || LimitableResource&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || R2, R3 || int64_t || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || R0 || [[#Result]] || Result&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CallSecureMonitor ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument64 || Argument32 || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || R0 || uint64_t || [[SMC#Secure_Monitor_calls|FunctionId]]&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1-X7 || R1-R7 || uint64_t || SMC arguments&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || R0 || [[SMC#Result|Result]] || SMC result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1-X7 || R1-R7 || uint64_t || SMC output&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes in a SMC function ID in X0, and arguments for that SMC function in X1-X7.&lt;br /&gt;
&lt;br /&gt;
Passing an invalid SMC function ID or calling from a core other than core 3 will result in a secure monitor panic.&lt;br /&gt;
&lt;br /&gt;
The kernel parses bits 9-15 in the passed SMC function ID (per the ARM SMC calling convention), and when set uses as an indicator to translate a pointer in the associated register (X1-X7) to a physical address. The kernel will translate any address mapped as R-W, other addresses (R--, R-X, or invalid pointers) will be translated as 0/NULL.&lt;br /&gt;
&lt;br /&gt;
Output is returned raw from the Secure Monitor; X0 will be the untranslated SMC result and X1-X7 will contain other SMC output (or be unchanged, depending on the SMC).&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* BreakDebugProcess&lt;br /&gt;
* ContinueDebugEvent&lt;br /&gt;
* WriteDebugProcessMemory&lt;br /&gt;
* SetDebugThreadContext&lt;br /&gt;
* TerminateDebugProcess&lt;br /&gt;
* SetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
DebugActiveProcess stops execution of the target process, the normal method for resuming it requires ContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== InfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || InfoType || InfoSubType || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || PriorityMask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemorySize. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || UsedMemorySize. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AslrRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AslrRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] SystemResourceSizeTotal&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] SystemResourceSizeUsed&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] InitialProcessIdRange_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] InitialProcessIdRange_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddress&lt;br /&gt;
|-&lt;br /&gt;
| Process || 21 || 0 || [6.0.0+] TotalNonSystemMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 22 || 0 || [6.0.0+] UsedNonSystemMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 23 || 0 || [9.0.0+] IsApplication&lt;br /&gt;
|-&lt;br /&gt;
| Process || 24 || 0 || [11.0.0+] FreeThreadCount&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 25 ([1.0.0-12.1.0] 0xF0000002) || 0-3, -1 || ThreadTickCount. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 26 || 0 || [14.0.0+] IsSvcPermitted&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemInfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || SystemInfoType || SystemInfoSubType || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalPhysicalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalPhysicalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalPhysicalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalPhysicalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || UsedPhysicalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || UsedPhysicalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || UsedPhysicalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || UsedPhysicalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || InitialProcessIdRange_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || InitialProcessIdRange_UpperBound&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ThreadContextFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || General-purpose registers || If in 64-bit mode, GPRs 0–28 will be read/written. If in 32-bit mode, GPRs 0–12 will be read/written.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || Control registers || Reads/writes the FP, LR, PC, SP, PSTATE, and TPIDR registers.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Floating-point registers || Reads/writes the floating-point vector registers.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || Floating-point control registers || Reads/writes the FPCR and FPSR registers.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || PhysicalMemoryMax || Bytes of memory a process may allocate.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ThreadCountMax || Amount of threads a process can create.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || EventCountMax || Amount of events a process can create through [[#CreateEvent]] or [[#SendAsyncRequestWithUserBuffer]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || TransferMemoryCountMax || Amount of TransferMemory a process can create through [[#CreateTransferMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SessionCountMax || Amount of session a process can create through [[#CreateSession]], [[#ConnectToPort]] or [[#ConnectToNamedPort]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ThreadActivity =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Runnable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessActivity ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Runnable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Crashed || Processes will not enter this state unless they were created with [[#CreateProcessParameter|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended ([[#SetThreadActivity]] 1 or [[#SetProcessActivity]] 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessParameter ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || Flags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || IsApplication&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] UseSecureMemory&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit11 || [7.0.0+] OptimizeMemoryAllocation (only allowed in combination with IsApplication)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle (can be zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] SystemResourceNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one MemoryRegion.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] MemoryRegion is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] MemoryRegion is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
The PersonalMmHeap are allocated as follows:&lt;br /&gt;
* For the application, normal insecure pool is used. Carveout 5 is used to provide protection.&lt;br /&gt;
* For the applet, a pre-allocated secure pool segment of size 0x400000 is used.&lt;br /&gt;
* For sysmodules, secure pool is allocated.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AddressSpace32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AddressSpace64BitOld || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || AddressSpace32BitNoReserved || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] AddressSpace64Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || [[#MemoryType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || [[#MemoryPermission]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryPermission ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Read || Can be set by [[#SetMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Write || Can be set by [[#SetMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Execute || Can be set by [[#SetProcessMemoryPermission]] and [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DontCare ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Locked || Used by MapMemory, as an async IPC user buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IpcLocked || True when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceShared || True when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Uncached || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || [[#MemoryType]] || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetMemoryPermission|FlagCanReprotect]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || FlagCanDebug || Allows using [[#WriteDebugProcessMemory]] on segments mapped read-only.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || FlagCanUseIpc || Allows sending this region as an IPC A/B/W buffer with flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || FlagCanUseNonDeviceIpc || Allows sending this region as an IPC A/B/W buffer with flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || FlagCanUseNonSecureIpc || Allows sending this region as an IPC A/B/W buffer with flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || FlagMapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#SetProcessMemoryPermission|FlagCode]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#MapMemory|FlagCanAlias]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#MapProcessCodeMemory|FlagCanCodeAlias]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#CreateTransferMemory|FlagCanTransfer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#QueryPhysicalAddress|FlagCanQueryPhysical]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#MapDeviceAddressSpace|FlagCanDeviceMap]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#MapDeviceAddressSpaceAligned|FlagCanAlignedDeviceMap]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#SendSyncRequestWithUserBuffer|FlagCanIpcUserBuffer]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || FlagReferenceCounted || The physical memory blocks backing this region are refcounted.&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#MapProcessMemory|FlagCanMapProcess]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#SetMemoryAttribute|FlagCanChangeAttribute]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MemoryType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || Free ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || Io || Mapped by kernel capability parsing in [[#CreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || Static || Mapped by kernel capability parsing in [[#CreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || Code || Mapped during [[#CreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| CodeData || Transition from 0xDC7E03 performed by [[#SetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| Normal || Mapped using [[#SetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || Shared || Mapped using [[#MapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] Alias || Mapped using [[#MapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || AliasCode || Mapped using [[#MapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| AliasCodeData || Transition from 0xDD7E08 performed by [[#SetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|Ipc]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || Stack || Mapped using [[#MapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|ThreadLocal]] || Mapped during [[#CreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || Transfered || Mapped using [[#MapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || SharedTransfered || Mapped using [[#MapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || SharedCode || Mapped using [[#MapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || Inaccessible ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|NonSecureIpc]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|NonDeviceIpc]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || Kernel || Mapped in kernel during [[#CreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] GeneratedCode || Mapped in kernel during [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002016 || [13.0.0+] Coverage || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [2.0.0+] SError&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and [[#ReturnFromException]]:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || [2.0.0+] SError&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call [[#ReturnFromException]] (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
[[#ReturnFromException]] updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls [[#ReturnFromException]], it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=11971</id>
		<title>Switch System Flaws</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=11971"/>
		<updated>2022-10-12T02:17:27Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Move ro aslr flaw to non-firm sysmodules section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo Switch. This page is a list of publicly known Switch system flaws.&lt;br /&gt;
&lt;br /&gt;
For userland applications/applets flaws see [[Switch_Userland_Flaws|here]]. &lt;br /&gt;
&lt;br /&gt;
= System flaws =&lt;br /&gt;
== Hardware == &lt;br /&gt;
Flaws in this category pertain to the underlying hardware that powers the Switch.&lt;br /&gt;
&lt;br /&gt;
This includes components shared across Tegra based devices such as the [[TSEC]], the [[Security_Engine|Security Engine]], the [[GPU]] and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-6242 (leveraged by the ShofEL2 and Fusée Gelée exploits)&lt;br /&gt;
| The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) &amp;quot;application processors&amp;quot; at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01) (also fixed independently on Tegra186).&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| [[User:Shuffle2|shuffle2]] and fail0verflow (originally),&amp;lt;br&amp;gt; [[User:Ktemkin|ktemkin]] and ReSwitched Team (independently),&amp;lt;br&amp;gt; [[User:Naehrwert|naehrwert]] (independently),&amp;lt;br&amp;gt; [[User:Hexkyz|hexkyz]] (independently),&amp;lt;br&amp;gt; st4rk with [[User:Shinyquagsire23|Shiny Quagsire]] and Dazzozo (independently),&amp;lt;br&amp;gt; and many others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| GMMU DMA attack&lt;br /&gt;
| The Switch&#039;s GPU includes a separate MMU (GMMU) that is allowed to bypass the system&#039;s IOMMU (SMMU). By accessing the GPU&#039;s MMIO region and manipulating the page table entries in the GMMU, an attacker can read/write any portion of the DRAM (except memory carveouts).&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Works around this hardware flaw by using memory pool partitioning. You can no longer escalate into sysmodules with GPU DMA because all their memory is allocated using heap that&#039;s carved out.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by adding a new register which restricts what memory untranslated DMA requests may access. Untranslated GPU DMA may now only access the GPU carveout (physmem 0x80002000-0x80006000), which the GPU already has legitimate and exclusive access to.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Summer 2017&lt;br /&gt;
| December 28, 2017&lt;br /&gt;
| [[User:hexkyz|hexkyz]], [[User:SciresM|SciresM]] and [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Weak Security Engine context validation&lt;br /&gt;
| The Tegra X1 supports a &amp;quot;deep sleep&amp;quot; feature, where everything but DRAM and the PMC registers lose their content (and the SoC loses power). Upon awaking, the bootrom re-executes, restoring system state. Among these stored states is the Security Engine&#039;s saved state, which uses AES-128-CBC with a random key and all-zeroes IV. However, the bootrom doesn&#039;t perform a MAC on this data, and only validates the last block. This allows one to control most of security engine&#039;s state upon wakeup, if one has a way to modify the encrypted state buffer.&lt;br /&gt;
&lt;br /&gt;
With a way to modify the encrypted state buffer, one can thus dump keys from &amp;quot;write-only&amp;quot; keyslots, etc.&lt;br /&gt;
&lt;br /&gt;
This also bypasses the SBK protection of the bootROM: indeed, at warmboot, bootROM will always clear keyslot 0xE to prevent malicious code from saving the SBK. Moving the SBK to another keyslot in the saved context renders this protection moot.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by streamlining the context save process; security engine contexts are now saved to protected memory which the CPU cannot access or modify.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| December 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Security Engine keyslots vulnerable to partial overwrite attack&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 security engine supports writing keyslot data to the engine with syntax as follows: &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_ADDR = (keyslot &amp;lt;&amp;lt; 4) | (dword_index_in_keyslot); &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_DATA = readle32(key, dword_index_in_keyslot * 4); &lt;br /&gt;
&lt;br /&gt;
However, the Security Engine flushes writes to the internal key tables immediately when AES_KEYTABLE_DATA is written -- this allows one to overwrite a single dword of a key at a time, and thus brute force the contents of keyslots in time (2^32 * 8) = 2^35 instead of 2^256.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Theorized Summer 2017 due to suggestive syntax, confirmed April 9, 2018&lt;br /&gt;
| April 9, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], almost surely others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Poor validation of bootrom SDRAM configuration parameters leads to arbitrary writes in bootrom&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 bootrom supports saving SDRAM parameters to scratch registers, and using the saved configuration to enable DRAM during warmboot.&lt;br /&gt;
&lt;br /&gt;
The code that parses these parameters does if (params-&amp;gt;EmcBctSpareN) *params-&amp;gt;EmcBctSpareN = params-&amp;gt;EmcBctSpareNPlusOne for most N, without validating either the address or value written to it.&lt;br /&gt;
There are other arbitrary writes in this code, as well (e.g. BootromPatch parameters intended for patching MISC registers do not check a relative offset to 0x7000000, etc).&lt;br /&gt;
&lt;br /&gt;
This allows a user with access to the PMC registers (via pre-sleep bpmp execution, or otherwise) to gain arbitrary bootrom code execution.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by validating that the spare writes/bootrom patch before performing them.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| 2017&lt;br /&gt;
| December 16, 2018&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC ROM does not clear crypto registers after signature verification&lt;br /&gt;
|&lt;br /&gt;
TSEC supports executing signed-microcode at a greater privilege level than normal payloads.&lt;br /&gt;
&lt;br /&gt;
When jumping to signed microcode, the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
TSEC ROM then calculates the expected signature and compares it to the user-supplied one in $c6. On match, the secure payload is executed, and on failure an exception is raised.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM fails to clear the crypto registers used to calculate the expected signature in either of the success/failure cases.&lt;br /&gt;
&lt;br /&gt;
Thus, with some way of obtaining the contents of crypto registers (e.g. ROP under some secure payload), an attacker can dump intermediary values from signature calculation.&lt;br /&gt;
&lt;br /&gt;
With enough data/trial/error, this is enough to reconstruct the signature algorithm:&lt;br /&gt;
* mac = &amp;lt;davies meyer hash of (page || address of page) for each 0x100 page in the payload&amp;gt;&lt;br /&gt;
* key = AES-ENCRYPT(hardware csecret 0x1, seed)&lt;br /&gt;
* signature = AES-ENCRYPT(key, mac)&lt;br /&gt;
&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC signature validation design flaw leads to fake-signing&lt;br /&gt;
|&lt;br /&gt;
As mentioned above, when jumping to signed microcode the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM performs no validation on the input seed used to generate the signing key.&lt;br /&gt;
&lt;br /&gt;
This leads to the following attack:&lt;br /&gt;
* Attacker gains rop under any secure microcode payload with signature = S.&lt;br /&gt;
* Attacker uses the &amp;quot;csigenc&amp;quot; instruction to obtain K = AES-ENCRYPT(hardware csecret 0x1, S).&lt;br /&gt;
* Attacker jumps to their own microcode with $c6 = &amp;lt;signature calculated on pc using K&amp;gt;, $c7 = S&lt;br /&gt;
* TSEC ROM calculates key = AES-ENCRYPT(hardware csecret 0x1, S) = K, and the signature check passes.&lt;br /&gt;
* Attackers microcode is executed in secure mode as though it were signed by NVidia.&lt;br /&gt;
&lt;br /&gt;
Thus an attacker who has exploited *any* secure payload may use this to obtain a &amp;quot;fake signature key&amp;quot;, which can be used to sign and execute arbitrary microcode in secure mode.&lt;br /&gt;
&lt;br /&gt;
Note: this does not break the TSEC cryptosystem, as the csigenc mechanism relies on the signature of the executing microcode, and fakesigning produces different signatures from NVidia that cannot be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| ROP under TSEC secure bootrom via DMA engine stack overwrite (--xploit)&lt;br /&gt;
| TSEC DMA engine does not stop when entering TSEC secure bootrom. By pointing TSEC DMA to current stack before secure bootrom entry, stack can be controlled. &lt;br /&gt;
&lt;br /&gt;
One can then use blind ROP against the TSEC secure bootrom (which is execute only, and cannot be dumped).&lt;br /&gt;
&lt;br /&gt;
With sufficient effort, an attacker can construct a ROP chain that leads to csigcmp being executed with fully controlled arguments.&lt;br /&gt;
&lt;br /&gt;
This allows for arbitrary heavy secure mode code execution with the current signature set to an arbitrary value.&lt;br /&gt;
&lt;br /&gt;
This completely breaks the TSEC cryptosystem, by allowing one to obtain the result of csigenc with signature = &amp;lt;any desired value&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This has many uses/results, notably including dumping the &amp;quot;true&amp;quot; signature key (set signature = zeroes, perform csigenc using csecret 0x1).&lt;br /&gt;
| None&lt;br /&gt;
| TSEC for all Tegra devices&lt;br /&gt;
| Late 2018&lt;br /&gt;
| Jan 2021&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]/[[User:SciresM|SciresM]], [[User:Vale|Vale]]/[[User:Thog|Thog]] (independently), [[User:Tatsuko|Tatsuko]] (independently), possibly others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Boot straps are not relatched on watchdog resets (strapwn)&lt;br /&gt;
| On boot, the BOOTSELECT, RCM and RAM_CODE straps are latched from external GPIO to determine which boot medium to use and verify from in bootrom. However, APB_MISC_PP_STRAPPING_OPT_A can be overwritten with arbitrary values following bootrom. Write access to PP_STRAPPING_OPT_A would otherwise be mundane, however these straps are not relatched during a watchdog reset (despite being latched during other software resets), allowing for arbitrary straps to be selected and executed in bootrom.&lt;br /&gt;
&lt;br /&gt;
This allows setting NVPROD_UART on some hardware configurations where it would normally be unavailable (ie on Jetson Nano boards), but is otherwise mostly useless and/or useful for testing unintended boot options (such as USB Mass Storage boot) without having to move boot strap resistors.&lt;br /&gt;
| Unknown&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| May 2020&lt;br /&gt;
| April 30, 2021&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Flaws in this category pertain to the firmware running on hardware devices, such as wifi/bluetooth, etc. Firmware is generally uploaded by sysmodules.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Broadpwn (CVE-2017-9417)&lt;br /&gt;
| See [https://blog.exodusintel.com/2017/07/26/broadpwn/ here] and [https://www.blackhat.com/docs/us-17/thursday/us-17-Artenstein-Broadpwn-Remotely-Compromising-Android-And-iOS-Via-A-Bug-In-Broadcoms-Wifi-Chipsets.pdf here].&lt;br /&gt;
| Code execution on the wifi controller (untested on Switch).&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Switch: July 2022&lt;br /&gt;
| Switch: July 30, 2022&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
Flaws in this category pertain to any bootloader component such as the [[Package1#Package1ldr|package1ldr]], the [[Package1#Section_1|NX bootloader]] or the [[Package1#Section_0|warmboot binary]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Null-dereference in panic()&lt;br /&gt;
|  The Switch&#039;s stage 1 bootloader, on panic(), clears the stack and then attempts to clear the Security Engine. However, it does so by dereferencing a pointer to the SE in .bss (initially NULL), and this pointer doesn&#039;t get initialized until partway into the bootloader&#039;s main() after several functions that might panic() are called. Thus, a panic() caused prior to SE initialization would result in the SE pointer still being NULL when dereferenced. &lt;br /&gt;
The BPMP doesn&#039;t have an active MPU and the bus won&#039;t data abort on an invalid address, so no exception will be entered: it&#039;ll end up overwriting some exception vectors with NULL before halting.&lt;br /&gt;
&lt;br /&gt;
In 3.0.0, this was fixed by moving the security engine initialization earlier in main(), before the first function that could potentially panic().&lt;br /&gt;
|  Some exception vectors overwritten with NULL, before SBK/other keyslots are cleared. Probably useless for anything more interesting.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Early July, 2017&lt;br /&gt;
|  July 30, 2017&lt;br /&gt;
|  Everyone who diff&#039;d 2.3.0 and 3.0.0 Package1&lt;br /&gt;
|-&lt;br /&gt;
|  FUSE_DIS_PGM not written by package1 &lt;br /&gt;
|  The switch&#039;s hardware fuse driver contains a write-once bit in a register called &amp;quot;FUSE_DIS_PGM&amp;quot;, which disables burning fuses until the next reboot. While Nintendo&#039;s bootloader code for waking up from sleep writes this on all firmware, the actual package1 initial bootloader forgets to write to it on cold reboot. &lt;br /&gt;
&lt;br /&gt;
This isn&#039;t too big of a problem because another fuse is burnt on retail devices (production mode), which prevents burning *all* fuses other than ODM_RESERVED ones in hardware.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 3.0.0 by writing to the register on cold boot (although the write happens in TZ instead of package1 where it should take place, possibly to obfuscate the fact that they made this mistake).&lt;br /&gt;
|  Burning arbitrary ODM reserved fuses with TZ code execution, which should never be possible for non-bootloader code.&lt;br /&gt;
&lt;br /&gt;
Warning: one could irreparably brick one&#039;s console by playing with this.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Late summer/early fall 2017&lt;br /&gt;
|  December 31, 2017&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  maconstack (TSEC firmware leaves MAC on the stack)&lt;br /&gt;
|  Package1ldr loads a firmware blob into TSEC early on boot. This piece of code runs on the TSEC in Authenticated Mode and has the sole purpose of generating the per-console TSEC key (see [[Cryptosystem]]).&lt;br /&gt;
&lt;br /&gt;
As a way to mitigate attacks, the TSEC firmware blob is split into 3 stages: [[TSEC_Firmware#Boot|Boot]] which is unencrypted and unsigned, [[TSEC_Firmware#KeygenLdr|KeygenLdr]] which is unencrypted but signed and [[TSEC_Firmware#Keygen|Keygen]] which is encrypted and signed.&lt;br /&gt;
Boot loads a static pre-generated signature into the Falcon&#039;s CPU crypto registers, loads KeygenLdr into the Falcon&#039;s CODE region and jumps to it. Execution will proceed into KeygenLdr in Heavy Secure Mode if, and only if, the loaded signature matches the one Falcon calculates internally for KeygenLdr.&lt;br /&gt;
&lt;br /&gt;
Among various things, KeygenLdr will attempt to do a &amp;quot;backwards&amp;quot; security check by calculating a CMAC over Boot and comparing it with a known hash stored in the TSEC firmware&#039;s key data (a small buffer stored after Boot&#039;s code). If the hashes don&#039;t match, execution aborts.&lt;br /&gt;
&lt;br /&gt;
KeygenLdr stores the calculated Boot&#039;s CMAC in the stack, but forgets to clear it. Since the stack is located in Falcon&#039;s DATA region, loading the TSEC firmware blob and dumping the DATA region afterwards (via MMIO) will reveal the calculated hash.&lt;br /&gt;
This allows using KeygenLdr as an oracle to generate a valid CMAC for arbitrary Boot code. Replacing the CMAC in the TSEC firmware&#039;s key data region results in KeygenLdr accepting any Boot code, thus rendering this security measure useless.&lt;br /&gt;
&lt;br /&gt;
Additionally, since signed Falcon code can&#039;t be revoked without an hardware revision, an attacker can always reuse the flawed KeygenLdr code even if a fix is issued.&lt;br /&gt;
|  Running TSEC firmware&#039;s KeygenLdr in a user controlled environment.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[5.0.2]]&lt;br /&gt;
|  January 2018&lt;br /&gt;
|  April 29, 2018&lt;br /&gt;
|  [[User:Hexkyz|hexkyz]], [[User:Rei|Reisyukaku]] (independently), probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  Stack smash in TSEC firmware&#039;s KeygenLdr&lt;br /&gt;
|  Given that we can control the [[TSEC_Firmware#Key_data|key data]] (which is not authenticated) and the [[TSEC_Firmware#Boot|Boot]] blob (see &amp;quot;maconstack&amp;quot;), as well as the fact Non-secure and Heavy Secure code share the same stack, we can use this to attack KeygenLdr. KeygenLdr uses memcpy to copy over a payload to DMEM to verify it, which can be abused to smash the stack (in DMEM) and write over the return address of said function.&lt;br /&gt;
|  ROP under KeygenLdr in Heavy Secure mode.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[8.0.1]]&lt;br /&gt;
|  Early 2018&lt;br /&gt;
|  May 21, 2019&lt;br /&gt;
|  Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  pk1ldrhax&lt;br /&gt;
|  Package1ldr decrypts and verifies the keyblob inside of the current BCT in order to get the package1 key, and then uses the package1 key to decrypt package1. It then validates package1 before jumping to it by checking the PK11 magic number, and that the section sizes sum to the expected size (and are individually less than the expected size). &lt;br /&gt;
&lt;br /&gt;
However, package1ldr does not actually validate the package1 key against a fixed vector (much like kernel9loader forgot to do so on the 3ds). This would normally not matter, as keyblobs are validated -- however, with bootrom code execution one can dump SBK and forge keyblobs, and thus control the package1 key. &lt;br /&gt;
&lt;br /&gt;
Thus (&#039;&#039;&#039;in theory, but not in practice due to the size of the brute force required&#039;&#039;&#039;) one can replace the package1 key with garbage, causing package1 to decrypt into garbage, and hope that this garbage passes validation checks and that package1ldr jumping into the garbage will do something useful.&lt;br /&gt;
&lt;br /&gt;
This was fixed incidentally in [[6.2.0]], as pk1ldr does not use keyblob data to decrypt package1 any more.&lt;br /&gt;
&lt;br /&gt;
|  With a large enough brute force: arbitrary package1 code execution from coldboot.&lt;br /&gt;
&lt;br /&gt;
However, a usable brute force is on the order of &amp;gt;= ~2^80, so &#039;&#039;&#039;this is almost certainly not actually usable in any meaningful context&#039;&#039;&#039;.&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  Early 2017 (as soon as plaintext package1ldr was first dumped)&lt;br /&gt;
|  November 20, 2018&lt;br /&gt;
|  Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TrustZone ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package1#Section_2|Secure Monitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Non-atomic mutexes&lt;br /&gt;
|  When an [[SMC]] is called, TrustZone sets a global variable to mark that an SMC is in progress, so that two SMCs using shared resources (like the security engine) do not trample on one another. On 1.0.0, this global variable was written using non-atomic writes, and thus a race condition is possible.&lt;br /&gt;
&lt;br /&gt;
However, the SMC handler enforces that all SMCs must be called from core #3, unless the top-level handler ID is 1 (SMCs internal to the kernel). Thus, the only SMCs that can be run side-by-side are [any userland smc] and smcGetRandomBytesForKernel, and this turns out to not really be abusable.&lt;br /&gt;
| Mostly useless. Maybe some oob-write into unused (and thus useless) memory if running smcGetRandomBytesForKernel and smcGetRandomBytesForUser at the same time.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December 2017 (Probably earlier by others)&lt;br /&gt;
| January 18, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  jamais vu (non-secure world access to PMC MMIO and pre-deep sleep firmware)&lt;br /&gt;
|  On [[1.0.0]], one could map in the PMC registers in userland. In addition, [[AM_services|am]] ran a little-kernel based firmware on the BPMP at runtime. With code execution under am, one could modify the BPMP&#039;s little-kernel firmware to hook deep sleep entry, and modify TrustZone/Security engine state. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry.&lt;br /&gt;
|  Arbitrary TrustZone code execution.&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  December, 2017&lt;br /&gt;
|  January 20, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  Missed BPMP Exception Vector Writes&lt;br /&gt;
|  Starting in [[2.0.0]], the BPMP is asleep at runtime, and is turned on by TrustZone during [[SMC|smcCpuSuspend]] in order to initiate the deep sleep process. When it does so, it is held in RESET, and TrustZone attempts to write to the BPMP exception vectors at 0x6000F200 to register EVP_RESET = lp0_entry_fw_crt0, and all other EVPs to a function that simply reboots. However, while they successfully write EVP_RESET, they miss all the other vectors, accidentally writing to the 0x6000F004-0x6000F020 region instead of the 0x6000F204-0x6000F220 region they want to write to. This results in all the exception vectors for the BPMP other than RESET being &amp;quot;undefined&amp;quot; (attacker controlled).&lt;br /&gt;
&lt;br /&gt;
With some way of causing an exception vector to be taken at the right time, this would give pre-sleep code execution (and thus arbitrary TrustZone code execution, via the security engine flaw). However, none of the abort vectors are really triggerable, and interrupts are disabled for the BPMP when it is taken out of reset. Thus, this is useless in practice.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by writing to the correct registers.&lt;br /&gt;
|  Theoretically: Arbitrary TrustZone code execution. In practice: Useless.&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  January, 2018&lt;br /&gt;
|  February 23, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]], [[User:Naehrwert|naehrwert]], [[User:Hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  TSEC has access to the secure kernel carveout &lt;br /&gt;
|  TrustZone is responsible for managing security carveouts to prevent DMA controllers from accessing the carveout which contains the kernel, sysmodules, and other critical operating system data.&lt;br /&gt;
&lt;br /&gt;
Until [[8.0.0]], the list of devices that could access the carveout included the TSEC. However, the TSEC can bypass the SMMU when in authenticated mode by writing to a certain register. Thus, pwning nvservices would allow one to take over the TSEC, and use it to write to normally protected mmio/memory.&lt;br /&gt;
&lt;br /&gt;
In [[8.0.0]], this was fixed by removing TSEC access, and adding TSECB access (TSECB cannot bypass the SMMU).&lt;br /&gt;
| With access to the TSEC mmio (nvservices ROP) and code execution in TSEC Heavy Secure mode, kernel code execution, probably.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| 2017 (when TrustZone code plaintext was first obtained).&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|  deja vu (insufficient system state validation on suspend leads to pre-sleep BPMP code execution)&lt;br /&gt;
|  Jamais Vu was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry, since gaining pre-sleep code execution on the BPMP compromises the system.&lt;br /&gt;
&lt;br /&gt;
However, the state validation performed by Nintendo&#039;s Secure Monitor was insufficient to prevent pre-sleep execution from being obtained.&lt;br /&gt;
&lt;br /&gt;
Prior to [[6.0.0]], one could use a DMA controller that had access to IRAM and was not held in reset (there were multiple) to race TrustZone&#039;s writes to the BPMP firmware in IRAM, and thus overwrite Nintendo&#039;s firmware with an attacker&#039;s to gain pre-sleep code execution.&lt;br /&gt;
&lt;br /&gt;
[[6.0.0]] addressed this by performing TrustZone state MAC writes and locking PMC scratch *before* turning on the BPMP, fixing the original Jamais Vu exploit entirely. In addition, the BPMP firmware in TrustZone&#039;s .rodata is now memcmp&#039;d to the actual data after it is written to IRAM. This mitigates race attacks that modify the firmware.&lt;br /&gt;
&lt;br /&gt;
However, Nintendo both forgot to validate the BPMP exception vectors after writing them, and forgot to hold in reset a DMA controller that can write to the BPMP&#039;s exception vectors.&lt;br /&gt;
&lt;br /&gt;
AHB-DMA is not blacklisted by kernel mapping whitelist (Nintendo probably forgot it, because the TX1 TRM does not really document that it&#039;s present, although the MMIO works as documented in older (Tegra 3 and before) TRMs).&lt;br /&gt;
&lt;br /&gt;
Thus, with kernel code execution (or some other way of accessing AHB-DMA, e.g. nspwn on &amp;lt;= 4.1.0, TSEC hax, or other arbitrary mmio access flaws), one can DMA to the BPMP&#039;s exception vectors as they are written, causing TrustZone to start the BPMP executing an attacker&#039;s firmware at a different location than TrustZone intends/validates.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.0.0]] by blocking AHB-DMA arbitration and verifying it is held in reset during suspend, and thus there are no more devices that can write to the relevant MMIO at the right time.&lt;br /&gt;
&lt;br /&gt;
|  Arbitrary TrustZone/BootROM code execution, by using either the original Jamais Vu flaw (prior to [[6.0.0]] or a warmboot bootrom exploit (any firmware where pre-sleep execution can be gained).&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  December 2017&lt;br /&gt;
|  April 15, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]] and ktemkin,  [[User:Naehrwert|naehrwert]] (independently), almost certainly others (independently)&lt;br /&gt;
|-&lt;br /&gt;
| TrustZone allows using imported RSA exponents with arbitrary modulus&lt;br /&gt;
| TrustZone supports &amp;quot;importing&amp;quot; RSA private exponents for use by userland -- these are stored encrypted with TrustZone only keydata in NAND, and decrypted only to TZRAM. This prevents a console that has compromised userland from learning the private exponents of these keys and doing calculations with them offline. In practice, this is used for FS (gamecard communications), ES (drm), and SSL (console client cert communications).&lt;br /&gt;
&lt;br /&gt;
However, the actual SMC API only imports the RSA exponent, and not the modulus, which is passed separately by userland in each call. There is no validation done on the modulus passed in -- this means that userland can pass in any message and modulus it chooses, and obtain the result of (message ^ private exponent) % modulus back from the secure monitor.&lt;br /&gt;
&lt;br /&gt;
By choosing a prime number modulus P such that P has &amp;quot;smooth&amp;quot; order (totient(P) == P-1 is divisible only by &amp;quot;small&amp;quot; primes), one can efficiently use the [[wikipedia:Pohlig-Hellman algorithm|Pohlig-Hellman algorithm]] to calculate the discrete logarithm of such a result directly, and thus obtain the private exponent.&lt;br /&gt;
&lt;br /&gt;
This is mostly useless in practice, given the general availability of other exploits to obtain these decrypted exponents.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 10.0.0 by importing the modulus in addition to the exponent for the ES device key and ES client cert key. For backwards compatibility reasons the SSL key and Lotus key still only import the exponent.&lt;br /&gt;
&lt;br /&gt;
StorageExpMod also now validates that the exponentiation of &amp;quot;DDDDD...&amp;quot; about the provided modulus by the imported exponent and then the fixed public exponent returns &amp;quot;DDDDD...&amp;quot;, and returns invalid argument if validation fails.&lt;br /&gt;
| With userland privileges sufficient to use an imported RSA key: obtaining that RSA key&#039;s private exponent.&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package2#Section_0|HorizonOS Kernel]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Syscall Infoleaks&lt;br /&gt;
| Many syscalls leaked kernel pointers on sad paths (for example svcSetHeapSize and svcQueryMemory), until they landed a bunch of fixes in 2.0.0.&lt;br /&gt;
| Nothing really.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| svcWaitSynchronization/svcReplyAndReceive bad cleanup on error&lt;br /&gt;
| If there is a page fault when fetching handles from the userspace array, it cleans up by dereferencing all objects despite having only loaded first N. Allows the attacker to make arbitrary decrefs on any kernel synchronization object, and thus can be used to get UAF. Haven&#039;t actually been tried on real HW though, but should work (tm).&lt;br /&gt;
| Kernel code execution&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| 24 April&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Bad irq_id check in CreateInterruptEvent&lt;br /&gt;
| CreateInterruptEvent syscall is designed to work only for irq_id &amp;gt;= 32. All irq_ids &amp;lt; 32 are &amp;quot;per-core&amp;quot; and reserved for kernel use (watchdog/scheduling/core communications).&lt;br /&gt;
On 1.0.0 you could supply irq_id &amp;lt; 32 and it would write outside the SharedIrqs table.&lt;br /&gt;
| You can register irq&#039;s in the Core3Irqs table, and thus register per-core irqs for core3, that are normally reserved for kernel. Useless.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~October&lt;br /&gt;
| 17 October&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel .text mapped executable in usermode&lt;br /&gt;
| Prior to [[3.0.2]] the kernel .text was [[Memory_layout|mapped]] in usermode as executable. This can be used for usermode ROP for bypassing ASLR, but SVCs/IPC are not usable by running kernel .text in usermode.&lt;br /&gt;
| Executing kernel .text in usermode&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| &lt;br /&gt;
| 34c3 (December 28, 2017)&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Memory Controller not properly secured&lt;br /&gt;
| The Switch OS originally had the memory controller not set to be accessible only by the secure-world, which was problematic because insecure access can compromise the kernel.&lt;br /&gt;
&lt;br /&gt;
This was fixed partially in [[2.0.0]] by blacklisting the memory controller from being mapped by user-processes, and was fixed entirely in [[4.0.0]] by making the memory controller TZ-only and making all kernel accesses go through [[SMC|smcReadWriteRegister]].&lt;br /&gt;
| With some way to access the memory controller MMIO, arbitrary kernel code execution.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| January 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Potential [[SVC|svcWaitForAddress]] thread use-after-free&lt;br /&gt;
| Between [[4.0.0]], where svcWaitForAddress was introduced, and [[7.0.0]], there was a second intrusive rbtree node in KThread for the WaitForAddress tree (the key being (address, priority), sorted lexicographically). Unlike the WaitProcessWideKeyAtomic tree, the kernel forgot to reinsert the WaitForAddress node when the thread&#039;s priority changed (priority inheritance and/or SetPriority), breaking the rbtree invariants; and since the kernel walks through the entire tree to remove intrusive nodes, you could cause threads to stay in the tree even after their deletion.&lt;br /&gt;
&lt;br /&gt;
[[7.0.0]] fixed the issue by using the same intrusive node for both trees. The thread/node knows which tree it is in, and the latter is correctly updated when thread priority changes.&lt;br /&gt;
| It unluckily didn&#039;t look exploitable&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| July 2018&lt;br /&gt;
| February 2019&lt;br /&gt;
| [[User:TuxSH|TuxSH]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FIRM-package System Modules ===&lt;br /&gt;
Flaws in this category pertain to any of the [[Package2#Section_1|built-in system modules]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Service access control bypass (sm:h, smhax, probably other names)&lt;br /&gt;
| Prior to [[3.0.1]], the &#039;&#039;service manager&#039;&#039; (sm) built-in system module treats a user as though it has full permissions if the user creates a new &amp;quot;sm:&amp;quot; port session but bypasses [[Services_API#Initialize|initialization]]. This is due to the other sm commands skipping the service ACL check for Pids &amp;lt;= 7 (i.e. all kernel bundled modules) and that skipping the initialization command leaves the Pid field uninitialized.&lt;br /&gt;
In [[3.0.1]], sm returns error code 0x415 if [[Services_API#Initialize|Initialize]] has not been called yet.&lt;br /&gt;
| Acquiring, registering, and unregistering arbitrary services&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| May 2017&lt;br /&gt;
| August 17, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Overly permissive SPL service&lt;br /&gt;
| The concept behind the switch&#039;s [[SMC|Secure Monitor]] is that all cryptographic keydata is located in userspace, but stored as &amp;quot;access keys&amp;quot; encrypted with &amp;quot;keks&amp;quot; that never leave TrustZone. The [[SPL services|spl]] (&amp;quot;security processor liaison&amp;quot;?) service serves as an interface between the rest of the system and the secure monitor. Prior to [[4.0.0]], spl exposed only a single service &amp;quot;spl:&amp;quot;, which provided all TrustZone wrapper functions to all sysmodules with access to it. Thus anyone with access to the spl: service (via smhax or by pwning a sysmodule with access) could do crypto with any access keys they knew. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by splitting spl: into spl:, spl:mig, spl:ssl, spl:es, and spl:fs.&lt;br /&gt;
| Arbitrary spl: crypto with any access keys one knows. For example, one could use the SSL module&#039;s access keys to decrypt their console&#039;s SSL certificate private key without having to pwn the SSL sysmodule.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Summer 2017 (after smhax was discovered).&lt;br /&gt;
| December 23, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single session services not really single session&lt;br /&gt;
| Several &amp;quot;critical&amp;quot; services (like fsp-ldr, fsp-pr, sm:m, etc) are meant to only ever hold a single session with a specific sysmodule. However, when a sysmodule dies, all its service session handles are released -- and thus killing the holder of a single session handle would allow one (via sm:hax etc) to get access to that service. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by adding a semaphore to these critical single-session services, so that even if one gets access to them an error code will be returned when attempting to use any of their commands.&lt;br /&gt;
| With some way to access these services and kill their session holders (like expLDR): dumping sysmodule code, arbitrary service access, elevated filesystem permissions, etc.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| May/June 2017 (basically immediately after smhax was discovered)&lt;br /&gt;
| December 30, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nspwn&lt;br /&gt;
| fsp-ldr command 0 &amp;quot;MountCode&amp;quot; takes in a Content Path (retrieved from NCM by Loader), and returns an IFileSystem for the resulting ExeFS. These content paths, are normally NCAs, but MountCode also supports a number of other formats, including &amp;quot;.nsp&amp;quot; -- which is just a PFS0.&lt;br /&gt;
&lt;br /&gt;
When a path ending in &amp;quot;.nsp&amp;quot; is parsed by MountCode, the PFS0 is treated as a raw ExeFS. Because there is no NCA header, the ACID signatures are not validated -- and because there are no other signatures in a PFS0, this results in no signature checking happening at all.&lt;br /&gt;
&lt;br /&gt;
The actual .nsp handling is eventually done by {content mounting function} called by MountCode and other FS commands.&lt;br /&gt;
&lt;br /&gt;
Thus, by placing an ExeFS (NSOs + &amp;quot;main.npdm&amp;quot;) and setting one&#039;s desired title ID to &amp;quot;@Sdcard:/some_title.nsp&amp;quot; or &amp;quot;@User:/some_title.nsp&amp;quot; etc one can launch arbitrary unsigned code, with arbitrary unsigned NPDMs.&lt;br /&gt;
&lt;br /&gt;
This appears to have been fixed by only allowing .nsp when the input fstype==7 for the internal content-mounting function, returning 0x2EE202 otherwise.&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: Arbitrary code execution with full system privileges.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| Late 2017&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single null-byte stack overflow in Loader ContentPath parsing&lt;br /&gt;
| Previously, loader content path parsing looked like this, where path_from_lr was up to 0x300 bytes and not necessarily null-terminated:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300] = {0};&lt;br /&gt;
  strcat(nca_path, path_from_lr);&lt;br /&gt;
  for (int i = 0; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Thus, a content path of the maximum length (0x300 bytes) would result in strcat writing a NULL terminator past the end of the nca_path buffer.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[6.0.0]], the new code looks like this:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300];&lt;br /&gt;
  strncpy(nca_path, path_from_lr, sizeof(nca_path));&lt;br /&gt;
  for (int i = 0; i  &amp;lt; sizeof(nca_path) &amp;amp;&amp;amp; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: single null-byte stack overflow in Loader. Maybe (but probably not) loader code execution.&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 2, 2018&lt;br /&gt;
| September 19, 2018&lt;br /&gt;
| SciresM&lt;br /&gt;
|-&lt;br /&gt;
| System modules vulnerable to selective downgrade attacks&lt;br /&gt;
| Horizon has no mechanism for specifying the specific title version to Loader on process creation.&lt;br /&gt;
&lt;br /&gt;
Observing this, one can note that after a system update one could install a downgraded version of a specific system module (e.g. nvservices) while leaving the rest of the OS at the same version.&lt;br /&gt;
&lt;br /&gt;
Unless there was some breaking API change, this allows one to make a console vulnerable once more to an exploit in a sysmodule by downgrading it and nothing else.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.1.0]] by incrementing a version field in NPDM, and checking it against a hardcoded list for certain titles in Loader&#039;s process creation func.&lt;br /&gt;
| With access to content installation commands (or a vulnerable lower version to selectively install newer titles), reintroducing bugs in vulnerable system modules on newer firmware versions.&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| When FIRM was first dumped in 2017.&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[Loader_services|Loader]] ASLR&lt;br /&gt;
| The RNG used for generating the ASLR slide is only seeded with 32bits, with the data from [[SVC|svcGetInfo]]. Hence, one could bruteforce the seed if one has infoleaks from any programs. This can be successfully bruteforced with at least 2 sample codebin addrs from different programs (with only 1 sample a lot of invalid seeds are found), however in some cases more than 1 seed might be found.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] Loader now uses csrng_GenerateRandomBytes for determining the ASLR slide.&lt;br /&gt;
&lt;br /&gt;
See also [https://github.com/switchbrew/loader-aslr-solver loader-aslr-solver].&lt;br /&gt;
| Breaking ASLR for all non-KIP processes, allowing predicting the main-codebin base addr for all non-KIP processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| January 30, 2022 (presumably found much earlier?)&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== System Modules ===&lt;br /&gt;
Flaws in this category pertain to any non-built-in system module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA bsa_sv_av_cback stack buffer overflow&lt;br /&gt;
| bsa_sv_av_cback checks for two input type values (0xC/0xD), on match it copies the input data to stack without size validation. Then it sends an internal request with this data (likewise when the type values don&#039;t match, except the input data is passed directly with a small size), then it returns.&lt;br /&gt;
This requires the AV functionality added with [13.0.0+], however this func is only reachable with [14.0.0+] where the required functionality was enabled.&lt;br /&gt;
&lt;br /&gt;
This requires message data that&#039;s larger than the MTU, so fragmentation must be used, or manually send the ACL data to bypass the MTU.&lt;br /&gt;
&lt;br /&gt;
This can be triggered via an AVRC message with opcode=0x0 (vendor). The above type 0xC is reached via AVRC ctype 0..4, while 0xD is reached with ctype&amp;gt;=0x9.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] the size value for the memcpy (which is also written to the request struct) is clamped to a max value.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow on [14.0.0-14.1.2], with data received from an AVRC bluetooth message with a bluetooth-audio device.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG used by [[NS_Services|ns]]&lt;br /&gt;
| The code generating the sd seed and the data for the [[SD_Filesystem|sd]] private/private1 file, all use nn::os::GenerateRandomBytes, not csrng. The sd-seed is generated first, then private, then private1. This allows deriving sd-seed from private since this uses TinyMT, as long as the system shipped from factory on [2.0.0+]. private1 is only useful if the system shipped with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
There&#039;s various other code in ns using nn::os::GenerateRandomBytes as well. This includes the code generating ns_systemseed when it doesn&#039;t exist. ns_systemseed is generated at some point after the various sd-seed-related code (both are called from the same func). Hence, ns_systemseed can be recovered with the above method as well, if it wasn&#039;t recreated at some point without regenerating the above nand-save used with the above.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ns now uses csrng_GenerateRandomBytes for sd-seed/private and ns_systemseed, etc. This only matters when the file is newly generated, which is usually only for factory-fresh systems which ship with this version.&lt;br /&gt;
| Generation of a system&#039;s sd-seed allowing decryption of the NAX0 layer of data on [[SD_Filesystem|SD]], derived using the private file from SD. Applies to systems which factory-shipped with a system-version prior to [[15.0.0]] (that is, [2.0.0-14.1.2]).&lt;br /&gt;
| [[15.0.0]], for newly generated files&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| December ~12, 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[Joy-Con]] HidCommand PairingIn&lt;br /&gt;
| The joycon protocol handler for PairingIn copies data from stack to the response cmd-buf for sending PairingOut. Only the first byte is set to a type value, the rest is uninitialized stack data.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [15.0.0+] by directly writing to the response data without using stack data.&lt;br /&gt;
| Infoleak of hid stack via a bluetooth/uart message+response with a connected hid controller. This returns addrs for the main-codebin/stack, which allows defeating ASLR.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| September 4, 2020&lt;br /&gt;
| October 10, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFMEDIA input can contain ptr&lt;br /&gt;
| Originally bsd ioctl SIOCGIFMEDIA used the user-specified ifmediareq structure directly from the input buffer. This includes a ptr. This ptr probably isn&#039;t actually used?&lt;br /&gt;
With [5.0.0+] the structure used as input for the ioctl was changed to using &amp;lt;code&amp;gt;int ifm_ulist[1]&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;int *ifm_ulist&amp;lt;/code&amp;gt; (which is unused). The input structure is copied to a tmp struct which is used as the original ifmediareq structure, with ifm_ulist always NULL. The user can still specify a non-zero ifm_count value, however that&#039;s not useful with ifm_ulist being always NULL.&lt;br /&gt;
| Useless?&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFCONF infoleak&lt;br /&gt;
| Originally bsd ioctl SIOCGIFCONF was handled by setting the data in IPC outbuf0 to the size/addr of IPC outbuf1. These buffers are HipcAutoSelect, so if buf1 is small enough for HipcPointer (otherwise it would be HipcMapAlias) the IPC-buf-ptr leaked into outbuf0 would be located in the codebin-region. Since this is done before the actual ioctl-handling, it doesn&#039;t matter whether the fd is valid.&lt;br /&gt;
This was fixed in [5.0.0+] by using a tmp struct on stack instead of buf0.&lt;br /&gt;
| bsdsockets-sysmodule codebin-region addr infoleak, which allows defeating ASLR.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022 (probably earlier)&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA gatt_process_notification stack buffer overflow&lt;br /&gt;
| gatt_process_notification is the GATT handler for processing notification/indication messages. gatt_process_notification does memcpy to stack from the input bt msg data, without size validation. The input len param isn&#039;t validated in this func either - if the remaining len following op_code is less than 2, a negative value will be used for the data copy to stack.&lt;br /&gt;
These were fixed by adding a bounds check for the size, size==0 is also checked for now.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow, with data received from a bluetooth message&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| January 19, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|ssl]] CVE-2021-43527&lt;br /&gt;
| CVE-2021-43527, see also [https://bugs.chromium.org/p/project-zero/issues/detail?id=2237 here] and [https://googleprojectzero.blogspot.com/2021/12/this-shouldnt-have-happened.html here].&lt;br /&gt;
Using BigSig where the server cert sig is RSA-PSS results in the remote server throwing {no shared cipher} error when Switch connects. If however one creates a rootCA using BigSig (RSA-PSS), which then signs a server cert where the server key is RSA (not PSS), the vuln can be triggered (if the rootCA is trusted, via using the import service-cmd). It&#039;s unknown whether there&#039;s other ways to trigger the vuln.&lt;br /&gt;
&lt;br /&gt;
The crash occurs in VFY_Begin when using the previously overwritten data. A bitsize of &amp;lt;code&amp;gt;$((16384 + 32 + 64 + 64 + 64))&amp;lt;/code&amp;gt; is only enough to overwrite cx-&amp;gt;hashcx, to fully overwrite cx-&amp;gt;hashobj an additional 0xC-bytes (additional 96 bits) is needed.&lt;br /&gt;
Note that partial overwrite isn&#039;t an option: this is the func that initializes those fields to begin with, it just does deinit first before initializing hashcx/hashobj (prior to that these fields would be all-zero when not overwritten by the buf-overflow).&lt;br /&gt;
| Heap buffer overflow in [[SSL_services|ssl]], overwriting data including a ptr to an object which is later used to load a funcptr.&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| Switch: December 1-2, 2021&lt;br /&gt;
| Switch: January 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] EventInfo infoleak&lt;br /&gt;
| The various funcs which send messages to the thread which handles writing to EventInfo, didn&#039;t clear the stack msgbuf. Hence, the various get-EventInfo cmds could return leaked stack data. This likely affected most (?) get-EventInfo cmds, besides CircularBuffer-GetHidReportEventInfo.&lt;br /&gt;
&lt;br /&gt;
This only matters for events where there&#039;s uninitialized regions of the EventInfo, such as events with variable-size data without a memset.&lt;br /&gt;
&lt;br /&gt;
This was fixed by clearing the msgbuf in a number of funcs.&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| &lt;br /&gt;
| During initial [[13.0.0|diff]]. Added to this page on: December 12, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[HID_services|hid:sys]] SetButtonConfigStorage{name}Deprecated&lt;br /&gt;
| These cmds pass a stack ptr for the StorageName when calling the internal func. Nothing is written to this StorageName. Hence, stack infoleak (data is copied as a NUL-terminated string), which can be later read by the GetButtonConfigStorage{name} cmds.&lt;br /&gt;
&lt;br /&gt;
This was fixed by removing the Deprecated cmds in [[13.0.0]].&lt;br /&gt;
| Infoleak of hid stack from a StorageName readable via GetButtonConfigStorage{name}, up to the NUL-terminator.&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| December 11, 2020&lt;br /&gt;
| September 27, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] WriteHidData/WriteHidData2/SetHidReport unchecked memcpy size&lt;br /&gt;
| WriteHidData/SetHidReport copies the input struct to stack, then passes it to the funcptr/vfunc call. WriteHidData2 passes the input buffer addr directly to the funcptr/vfunc call. The called func eventually copies the input data to the stack struct using the specified size without validating it.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.1.0]] in WriteHidData/SetHidReport by doing a fixed-size copy into another tmp struct, with the size field being clamped to a maximum of 0x2BB afterwards. This struct is then used when calling the vfunc. The vfuncs called by WriteHidData/WriteHidData2/SetHidReport were also updated to clamp the size to the required maximum value.&lt;br /&gt;
| Stack buffer overflow&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| July 16, 2020&lt;br /&gt;
| July 6, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] stack buffer overflow with HID DATA packets&lt;br /&gt;
| The BSA (bt-stack) func bta_hh_co_data copies data from a HID DATA packet to stack without checking the size, then sends it over Uipc. [7.0.0+] The user Uipc callback also copies the input data to stack without checking the size, then sends it to the sharedmem CircularBuffer.&lt;br /&gt;
With [12.0.2+] this was fixed in bta_hh_co_data by clamping the size to a maximum of 0x2BB. The aforementioned buffer overflow in the Uipc callback can&#039;t be triggered since at that point the size was already clamped.&lt;br /&gt;
&lt;br /&gt;
Before this bta_hh_co_data func is reached, there is no validation of the size (such as comparing against the L2CAP MTU) when Basic Mode is being used.&lt;br /&gt;
&lt;br /&gt;
Actually triggering this requires using a data-size larger than the normal L2CAP MTU. This can be done by for example, using raw HCI to send the packet from the remote bluetooth device.&lt;br /&gt;
&lt;br /&gt;
Note that when the remote device is configured as an audio device for [12.0.0+] where [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].TrustedServices was only ever set for audio since system-boot, it is not possible for the remote device to connect to the Switch for HID.&lt;br /&gt;
| ROP under [[Bluetooth_Driver_services|bluetooth]] via HID DATA packet sent by a paired HID bluetooth device. This can be triggered at any time while not in sleep-mode, when not in airplane-mode. The earliest is while the Nintendo Switch logo screen is displayed during system boot.&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| July-August 2020&lt;br /&gt;
| May 11, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] GetAdapterProperty/SetAdapterProperty unchecked memcpy size&lt;br /&gt;
| GetAdapterProperty copies data from stack to the output buffer using the buffer size, without checking the size (when not handling the Name type). SetAdapterProperty copies data to stack from the input buffer using the buffer size, without checking the size.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.0.0]] by replacing the buffer data with a fixed-size-struct.&lt;br /&gt;
| Stack infoleak with GetAdapterProperty, stack buffer overflow (and hence ROP) with SetAdapterProperty.&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| July 17, 2020&lt;br /&gt;
| April 7, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] A-63146698&lt;br /&gt;
| [https://android.googlesource.com/platform/system/bt/+/226ea26684d4cd609a5b456d3d2cc762453c2d75 A-63146698] / CVE-2017-0785. See also [https://info.armis.com/rs/645-PDC-047/images/BlueBorne%20Technical%20White%20Paper_20171130.pdf here].&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR (note: not tested on hw).&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] sdp_server.cc process_service_search() continuation request p_req validation&lt;br /&gt;
| With [5.0.0+], the following was added to the if-block prior to loading cont_offset from p_req: &amp;lt;code&amp;gt;(p_req + sizeof(cont_offset) &amp;gt; p_req_end)&amp;lt;/code&amp;gt; (which verifies that cont_offset is within message bounds).&lt;br /&gt;
| Bluetooth-sysmodule out-of-bounds read from heap, probably not useful since the read value must match a state field, etc.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services#hid:sys|hid:sys]] ButtonConfig s32 array-index not validated&lt;br /&gt;
| The input s32 array-index for [[HID_services#hid:sys|hid:sys]] ButtonConfig cmds 1255-1270 was originally not validated. Using a negative or &amp;gt;=5 index results in accessing out-of-bounds data, with an array stored on stack.&lt;br /&gt;
[10.1.0-10.2.0] Each of these cmds will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] Now an unsigned compare is used, with 0 or an error being immediately returned when the value is invalid.&lt;br /&gt;
| hid infoleak, out-of-bounds mem-write anywhere in hid address-space relative to the stack array (with constraints on the data).&lt;br /&gt;
| [[10.1.0]]&lt;br /&gt;
| [[11.0.1]]&lt;br /&gt;
| April 18, 2020&lt;br /&gt;
| July 14, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] ClearCaptureBuffer OOB&lt;br /&gt;
| The captureBuf is used as an array index without proper validation. There is code validating it, but on failure it just skips over a code-block, with code using captureBuf still being used afterwards. Then this is used to write bools into a global array, one of which is from the command input.&lt;br /&gt;
This was fixed with [9.1.0+] by requiring captureBuf = 0-1.&lt;br /&gt;
| OOB bool writes into an array&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] TakeScreenShotOfOwnLayer OOB&lt;br /&gt;
| The captureBuf is used as an array index without validation. Data used from this array includes calling a funcptr from the array entry, if set. Eventually this is also used to write bools into this array, one of which is from the command input.&lt;br /&gt;
With [5.0.0+] a func is eventually called to get a ptr determined by the input captureBuf, with nullptr being returned for captureBuf&amp;gt;=0x10. The caller will Abort if nullptr was returned.&lt;br /&gt;
| OOB array access&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IStorage|AM IStorage]] infoleak&lt;br /&gt;
| Originally the buffer allocated by [[Applet_Manager_services#CreateStorage|CreateStorage]] using the specified input size was not cleared. With [8.0.0+] this was fixed by adding a memset() for the buffer after successful allocation.&lt;br /&gt;
&lt;br /&gt;
Hence, IStorage-&amp;gt;IStorageAccessor-&amp;gt;Read will return uninitialized memory when the Write cmd was not previously used with the specified region.&lt;br /&gt;
| Infoleak from the main [[Applet_Manager_services#IStorage|AM]] heap, allowing defeating ASLR by reading addresses from previously allocated objects.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| December 2018&lt;br /&gt;
| August 9, 2019&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Out-of-bounds array read for [[BCAT_Content_Container]] secret-data index&lt;br /&gt;
| The [[BCAT_Content_Container]] secret-data index is not validated at all. This is handled before the RSA-signature(?) is ever used. Since the field is an u8, a total of 0x800-bytes relative to the array start can be accessed.&lt;br /&gt;
This is not useful since the string loaded from this array is only involved with key-generation.&lt;br /&gt;
| &lt;br /&gt;
| Unknown&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| August 4, 2017&lt;br /&gt;
| August 6, 2017&lt;br /&gt;
| [[User: shinyquagsire23|Shiny Quagsire]], [[User:Yellows8|yellows8]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
|  OOB Read in NS system module (pl:utoohax, pl:utonium, maybe other names)&lt;br /&gt;
|  Prior to [[3.0.0]], pl:u (Shared Font services implemented in the NS sysmodule) service commands 1,2,3 took in a signed 32-bit index and returned that index of an array but did not check that index at all. This allowed for an arbitrary read within a 34-bit range (33-bit signed) from NS .bss. In [[3.0.0]], sending out of range indexes causes error code 0x60A to be returned.&lt;br /&gt;
|  Dumping full NS .text, .rodata and .data, infoleak, etc&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  April 2017&lt;br /&gt;
|  On exploit&#039;s fix in [[3.0.0]]&lt;br /&gt;
|  [[User:qlutoo|qlutoo]], ReSwitched Team (independently)&lt;br /&gt;
|-&lt;br /&gt;
| Unchecked domain ID in common IPC code&lt;br /&gt;
| Prior to [[2.0.0]], object IDs in [[IPC_Marshalling#Domain_message|domain messages]] are not bounds checked. This out-of-bounds read could be exploited to brute-force ASLR and get PC control in some services that support domain messages.&lt;br /&gt;
|&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~July 2017&lt;br /&gt;
| 20 July 2017‎&lt;br /&gt;
| [[User:hthh|hthh]]&lt;br /&gt;
|-&lt;br /&gt;
| expLDR (sysmodule handle table exhaustion)&lt;br /&gt;
| Most sysmodules share common template code to handle IPC control messages. The command DuplicateSession (type 5 command 2)&#039;s template code will abort() if it fails to duplicate a session&#039;s handle for the requester. Because many sysmodules have limited handle table size (smaller than the browser/other entrypoints), repeatedly requesting to duplicate one&#039;s session will cause the sysmodule to run out of handle table space and abort, causing the service to release all its handles cleanly.&lt;br /&gt;
| Sysmodule crashes.  Most usefully, crashing ldr allows access to fsp-ldr and crashing pm allows access to fsp-pr. Useless after [[4.0.0]], which mitigated a number of single-session service access issues.&lt;br /&gt;
| Unfixed&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| 24 June 2017&lt;br /&gt;
| 8 March 2018&lt;br /&gt;
| [[User:daeken|daeken]]&lt;br /&gt;
|-&lt;br /&gt;
| Transfer Memory leak in nvservices system module&lt;br /&gt;
| The nvservices sysmodule does not clear most of its transfer memory prior to release.&lt;br /&gt;
| The calling process can read key bits of memory, including breaking ASLR (by revealing the image base) and exposing the address of other transfer memory to set up attacks. More details here: [https://daeken.svbtle.com/nintendo-switch-nvservices-info-leak transfermeme (nvservices info leak)] by [[User:daeken|daeken]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| June 2017&lt;br /&gt;
| 16 October 2018&lt;br /&gt;
| [[User:qlutoo|qlutoo]] and [[User:hexkyz|hexkyz]],&lt;br /&gt;
[[User:daeken|daeken]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| OOB write in audio system module&lt;br /&gt;
| Prior to [[2.0.0]], the [[Audio_services#audout:u|AppendAudioOutBuffer]] and [[Audio_services#audin:u|AppendAudioInBuffer]] IPC commands would blindly increment the appended buffers&#039; count while using said count value as an index to where the user data should be copied into. This resulted in an 0x28 bytes, user controlled, out-of-bounds memory write into the [[Audio_services|audio]] sysmodule&#039;s memory space.&lt;br /&gt;
Combined with the [[Audio_services#audout:u|GetReleasedAudioOutBuffer]] or [[Audio_services#audin:u|GetReleasedAudioInBuffer]] commands, this could also be used as an 8 byte infoleak.&lt;br /&gt;
&lt;br /&gt;
In [[2.0.0]], the commands now return error code 0x1099 if the number of unreleased buffers exceeds 0x1F.&lt;br /&gt;
| Code execution under audio sysmodule&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| November 2, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| nvhax (memory corruption in nvservices system module)&lt;br /&gt;
| Prior to [[6.2.0]], the [[NV_services|nvservices]] ioctl [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] would take a single &amp;quot;pwarpstate&amp;quot; argument which would be interpreted by nvservices as a memory pointer for writing 2 &amp;quot;warpstate&amp;quot; structs (one for each Streaming Multiprocessor).&lt;br /&gt;
This resulted in nvservices attempting to blindly memcpy into this user supplied address and trigger a crash. However, if paired with an infoleak, this could be used to arbitrarily write 0x30 bytes anywhere in nvservices&#039; memory space.&lt;br /&gt;
Additionally, the &amp;quot;warpstate&amp;quot; struct itself was never initialized, which means nvservices would leak the 0x30 bytes from the stack. By invoking other ioctls it was also possible to partially control the stack contents and achieve a usable arbitrary memory write primitive.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] now takes 2 inline &amp;quot;warpstate&amp;quot; structs instead of a &amp;quot;pwarpstate&amp;quot; pointer, thus effectively avoiding the bad memcpy.&lt;br /&gt;
| Code execution under nvservices sysmodule&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 5, 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak in nvservices system module&lt;br /&gt;
| The [[NV_services|nvservices]] ioctl [[NV_services#NVMAP_IOC_ALLOC|NVMAP_IOC_ALLOC]] takes an optional argument &amp;quot;addr&amp;quot; which allows the calling process to pass a pointer to user allocated memory for backing a nvmap object. If &amp;quot;addr&amp;quot; is left as 0, nvservices uses the transfer memory region (donated by the user during initialization) instead, when allocating memory for the nvmap object.&lt;br /&gt;
By design, freeing the nvmap object by calling the ioctl [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] returns, in its &amp;quot;refcount&amp;quot; argument, the user address previously supplied if the reference count reaches 0.&lt;br /&gt;
However, prior to [[6.2.0]], the case where the transfer memory region is used to allocate the nvmap object was not taken into account, thus resulting in [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] leaking back an address from within the transfer memory region mapped in nvservices&#039; memory space.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] no longer returns the address when the transfer memory region is used instead of user supplied memory.&lt;br /&gt;
| Combined with other vulnerabilities: Defeating ASLR in nvservices sysmodule.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[RO_services|ro]] ASLR&lt;br /&gt;
| The RNG used to determine where to randomly map NROs in the target process was TinyMT (nn::os::detail::RngManager output, seeded by 128 bits of entropy). However, TinyMT is not cryptographically secure (and can in fact be analytically solved). &lt;br /&gt;
&lt;br /&gt;
Thus, with a few NRO mapping addresses, one could learn the TinyMT state and derive all previous/future RNG outputs, breaking NRO aslr for all processes. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ro now uses csrng_GenerateRandomBytes to determine the random map address for NROs.&lt;br /&gt;
| Breaking ASLR for all NROs loaded in all processes, allowing predicting all NRO mappings for all processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| Late 2021/Early 2022&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=11970</id>
		<title>Switch System Flaws</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=11970"/>
		<updated>2022-10-12T02:11:46Z</updated>

		<summary type="html">&lt;p&gt;SciresM: same conceptual aslr issue was fixed in ro, not just loader&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo Switch. This page is a list of publicly known Switch system flaws.&lt;br /&gt;
&lt;br /&gt;
For userland applications/applets flaws see [[Switch_Userland_Flaws|here]]. &lt;br /&gt;
&lt;br /&gt;
= System flaws =&lt;br /&gt;
== Hardware == &lt;br /&gt;
Flaws in this category pertain to the underlying hardware that powers the Switch.&lt;br /&gt;
&lt;br /&gt;
This includes components shared across Tegra based devices such as the [[TSEC]], the [[Security_Engine|Security Engine]], the [[GPU]] and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-6242 (leveraged by the ShofEL2 and Fusée Gelée exploits)&lt;br /&gt;
| The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) &amp;quot;application processors&amp;quot; at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01) (also fixed independently on Tegra186).&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| [[User:Shuffle2|shuffle2]] and fail0verflow (originally),&amp;lt;br&amp;gt; [[User:Ktemkin|ktemkin]] and ReSwitched Team (independently),&amp;lt;br&amp;gt; [[User:Naehrwert|naehrwert]] (independently),&amp;lt;br&amp;gt; [[User:Hexkyz|hexkyz]] (independently),&amp;lt;br&amp;gt; st4rk with [[User:Shinyquagsire23|Shiny Quagsire]] and Dazzozo (independently),&amp;lt;br&amp;gt; and many others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| GMMU DMA attack&lt;br /&gt;
| The Switch&#039;s GPU includes a separate MMU (GMMU) that is allowed to bypass the system&#039;s IOMMU (SMMU). By accessing the GPU&#039;s MMIO region and manipulating the page table entries in the GMMU, an attacker can read/write any portion of the DRAM (except memory carveouts).&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Works around this hardware flaw by using memory pool partitioning. You can no longer escalate into sysmodules with GPU DMA because all their memory is allocated using heap that&#039;s carved out.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by adding a new register which restricts what memory untranslated DMA requests may access. Untranslated GPU DMA may now only access the GPU carveout (physmem 0x80002000-0x80006000), which the GPU already has legitimate and exclusive access to.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Summer 2017&lt;br /&gt;
| December 28, 2017&lt;br /&gt;
| [[User:hexkyz|hexkyz]], [[User:SciresM|SciresM]] and [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Weak Security Engine context validation&lt;br /&gt;
| The Tegra X1 supports a &amp;quot;deep sleep&amp;quot; feature, where everything but DRAM and the PMC registers lose their content (and the SoC loses power). Upon awaking, the bootrom re-executes, restoring system state. Among these stored states is the Security Engine&#039;s saved state, which uses AES-128-CBC with a random key and all-zeroes IV. However, the bootrom doesn&#039;t perform a MAC on this data, and only validates the last block. This allows one to control most of security engine&#039;s state upon wakeup, if one has a way to modify the encrypted state buffer.&lt;br /&gt;
&lt;br /&gt;
With a way to modify the encrypted state buffer, one can thus dump keys from &amp;quot;write-only&amp;quot; keyslots, etc.&lt;br /&gt;
&lt;br /&gt;
This also bypasses the SBK protection of the bootROM: indeed, at warmboot, bootROM will always clear keyslot 0xE to prevent malicious code from saving the SBK. Moving the SBK to another keyslot in the saved context renders this protection moot.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by streamlining the context save process; security engine contexts are now saved to protected memory which the CPU cannot access or modify.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| December 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Security Engine keyslots vulnerable to partial overwrite attack&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 security engine supports writing keyslot data to the engine with syntax as follows: &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_ADDR = (keyslot &amp;lt;&amp;lt; 4) | (dword_index_in_keyslot); &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_DATA = readle32(key, dword_index_in_keyslot * 4); &lt;br /&gt;
&lt;br /&gt;
However, the Security Engine flushes writes to the internal key tables immediately when AES_KEYTABLE_DATA is written -- this allows one to overwrite a single dword of a key at a time, and thus brute force the contents of keyslots in time (2^32 * 8) = 2^35 instead of 2^256.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Theorized Summer 2017 due to suggestive syntax, confirmed April 9, 2018&lt;br /&gt;
| April 9, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], almost surely others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Poor validation of bootrom SDRAM configuration parameters leads to arbitrary writes in bootrom&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 bootrom supports saving SDRAM parameters to scratch registers, and using the saved configuration to enable DRAM during warmboot.&lt;br /&gt;
&lt;br /&gt;
The code that parses these parameters does if (params-&amp;gt;EmcBctSpareN) *params-&amp;gt;EmcBctSpareN = params-&amp;gt;EmcBctSpareNPlusOne for most N, without validating either the address or value written to it.&lt;br /&gt;
There are other arbitrary writes in this code, as well (e.g. BootromPatch parameters intended for patching MISC registers do not check a relative offset to 0x7000000, etc).&lt;br /&gt;
&lt;br /&gt;
This allows a user with access to the PMC registers (via pre-sleep bpmp execution, or otherwise) to gain arbitrary bootrom code execution.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by validating that the spare writes/bootrom patch before performing them.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| 2017&lt;br /&gt;
| December 16, 2018&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC ROM does not clear crypto registers after signature verification&lt;br /&gt;
|&lt;br /&gt;
TSEC supports executing signed-microcode at a greater privilege level than normal payloads.&lt;br /&gt;
&lt;br /&gt;
When jumping to signed microcode, the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
TSEC ROM then calculates the expected signature and compares it to the user-supplied one in $c6. On match, the secure payload is executed, and on failure an exception is raised.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM fails to clear the crypto registers used to calculate the expected signature in either of the success/failure cases.&lt;br /&gt;
&lt;br /&gt;
Thus, with some way of obtaining the contents of crypto registers (e.g. ROP under some secure payload), an attacker can dump intermediary values from signature calculation.&lt;br /&gt;
&lt;br /&gt;
With enough data/trial/error, this is enough to reconstruct the signature algorithm:&lt;br /&gt;
* mac = &amp;lt;davies meyer hash of (page || address of page) for each 0x100 page in the payload&amp;gt;&lt;br /&gt;
* key = AES-ENCRYPT(hardware csecret 0x1, seed)&lt;br /&gt;
* signature = AES-ENCRYPT(key, mac)&lt;br /&gt;
&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC signature validation design flaw leads to fake-signing&lt;br /&gt;
|&lt;br /&gt;
As mentioned above, when jumping to signed microcode the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM performs no validation on the input seed used to generate the signing key.&lt;br /&gt;
&lt;br /&gt;
This leads to the following attack:&lt;br /&gt;
* Attacker gains rop under any secure microcode payload with signature = S.&lt;br /&gt;
* Attacker uses the &amp;quot;csigenc&amp;quot; instruction to obtain K = AES-ENCRYPT(hardware csecret 0x1, S).&lt;br /&gt;
* Attacker jumps to their own microcode with $c6 = &amp;lt;signature calculated on pc using K&amp;gt;, $c7 = S&lt;br /&gt;
* TSEC ROM calculates key = AES-ENCRYPT(hardware csecret 0x1, S) = K, and the signature check passes.&lt;br /&gt;
* Attackers microcode is executed in secure mode as though it were signed by NVidia.&lt;br /&gt;
&lt;br /&gt;
Thus an attacker who has exploited *any* secure payload may use this to obtain a &amp;quot;fake signature key&amp;quot;, which can be used to sign and execute arbitrary microcode in secure mode.&lt;br /&gt;
&lt;br /&gt;
Note: this does not break the TSEC cryptosystem, as the csigenc mechanism relies on the signature of the executing microcode, and fakesigning produces different signatures from NVidia that cannot be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| ROP under TSEC secure bootrom via DMA engine stack overwrite (--xploit)&lt;br /&gt;
| TSEC DMA engine does not stop when entering TSEC secure bootrom. By pointing TSEC DMA to current stack before secure bootrom entry, stack can be controlled. &lt;br /&gt;
&lt;br /&gt;
One can then use blind ROP against the TSEC secure bootrom (which is execute only, and cannot be dumped).&lt;br /&gt;
&lt;br /&gt;
With sufficient effort, an attacker can construct a ROP chain that leads to csigcmp being executed with fully controlled arguments.&lt;br /&gt;
&lt;br /&gt;
This allows for arbitrary heavy secure mode code execution with the current signature set to an arbitrary value.&lt;br /&gt;
&lt;br /&gt;
This completely breaks the TSEC cryptosystem, by allowing one to obtain the result of csigenc with signature = &amp;lt;any desired value&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This has many uses/results, notably including dumping the &amp;quot;true&amp;quot; signature key (set signature = zeroes, perform csigenc using csecret 0x1).&lt;br /&gt;
| None&lt;br /&gt;
| TSEC for all Tegra devices&lt;br /&gt;
| Late 2018&lt;br /&gt;
| Jan 2021&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]/[[User:SciresM|SciresM]], [[User:Vale|Vale]]/[[User:Thog|Thog]] (independently), [[User:Tatsuko|Tatsuko]] (independently), possibly others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Boot straps are not relatched on watchdog resets (strapwn)&lt;br /&gt;
| On boot, the BOOTSELECT, RCM and RAM_CODE straps are latched from external GPIO to determine which boot medium to use and verify from in bootrom. However, APB_MISC_PP_STRAPPING_OPT_A can be overwritten with arbitrary values following bootrom. Write access to PP_STRAPPING_OPT_A would otherwise be mundane, however these straps are not relatched during a watchdog reset (despite being latched during other software resets), allowing for arbitrary straps to be selected and executed in bootrom.&lt;br /&gt;
&lt;br /&gt;
This allows setting NVPROD_UART on some hardware configurations where it would normally be unavailable (ie on Jetson Nano boards), but is otherwise mostly useless and/or useful for testing unintended boot options (such as USB Mass Storage boot) without having to move boot strap resistors.&lt;br /&gt;
| Unknown&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| May 2020&lt;br /&gt;
| April 30, 2021&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Flaws in this category pertain to the firmware running on hardware devices, such as wifi/bluetooth, etc. Firmware is generally uploaded by sysmodules.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Broadpwn (CVE-2017-9417)&lt;br /&gt;
| See [https://blog.exodusintel.com/2017/07/26/broadpwn/ here] and [https://www.blackhat.com/docs/us-17/thursday/us-17-Artenstein-Broadpwn-Remotely-Compromising-Android-And-iOS-Via-A-Bug-In-Broadcoms-Wifi-Chipsets.pdf here].&lt;br /&gt;
| Code execution on the wifi controller (untested on Switch).&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Switch: July 2022&lt;br /&gt;
| Switch: July 30, 2022&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
Flaws in this category pertain to any bootloader component such as the [[Package1#Package1ldr|package1ldr]], the [[Package1#Section_1|NX bootloader]] or the [[Package1#Section_0|warmboot binary]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Null-dereference in panic()&lt;br /&gt;
|  The Switch&#039;s stage 1 bootloader, on panic(), clears the stack and then attempts to clear the Security Engine. However, it does so by dereferencing a pointer to the SE in .bss (initially NULL), and this pointer doesn&#039;t get initialized until partway into the bootloader&#039;s main() after several functions that might panic() are called. Thus, a panic() caused prior to SE initialization would result in the SE pointer still being NULL when dereferenced. &lt;br /&gt;
The BPMP doesn&#039;t have an active MPU and the bus won&#039;t data abort on an invalid address, so no exception will be entered: it&#039;ll end up overwriting some exception vectors with NULL before halting.&lt;br /&gt;
&lt;br /&gt;
In 3.0.0, this was fixed by moving the security engine initialization earlier in main(), before the first function that could potentially panic().&lt;br /&gt;
|  Some exception vectors overwritten with NULL, before SBK/other keyslots are cleared. Probably useless for anything more interesting.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Early July, 2017&lt;br /&gt;
|  July 30, 2017&lt;br /&gt;
|  Everyone who diff&#039;d 2.3.0 and 3.0.0 Package1&lt;br /&gt;
|-&lt;br /&gt;
|  FUSE_DIS_PGM not written by package1 &lt;br /&gt;
|  The switch&#039;s hardware fuse driver contains a write-once bit in a register called &amp;quot;FUSE_DIS_PGM&amp;quot;, which disables burning fuses until the next reboot. While Nintendo&#039;s bootloader code for waking up from sleep writes this on all firmware, the actual package1 initial bootloader forgets to write to it on cold reboot. &lt;br /&gt;
&lt;br /&gt;
This isn&#039;t too big of a problem because another fuse is burnt on retail devices (production mode), which prevents burning *all* fuses other than ODM_RESERVED ones in hardware.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 3.0.0 by writing to the register on cold boot (although the write happens in TZ instead of package1 where it should take place, possibly to obfuscate the fact that they made this mistake).&lt;br /&gt;
|  Burning arbitrary ODM reserved fuses with TZ code execution, which should never be possible for non-bootloader code.&lt;br /&gt;
&lt;br /&gt;
Warning: one could irreparably brick one&#039;s console by playing with this.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Late summer/early fall 2017&lt;br /&gt;
|  December 31, 2017&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  maconstack (TSEC firmware leaves MAC on the stack)&lt;br /&gt;
|  Package1ldr loads a firmware blob into TSEC early on boot. This piece of code runs on the TSEC in Authenticated Mode and has the sole purpose of generating the per-console TSEC key (see [[Cryptosystem]]).&lt;br /&gt;
&lt;br /&gt;
As a way to mitigate attacks, the TSEC firmware blob is split into 3 stages: [[TSEC_Firmware#Boot|Boot]] which is unencrypted and unsigned, [[TSEC_Firmware#KeygenLdr|KeygenLdr]] which is unencrypted but signed and [[TSEC_Firmware#Keygen|Keygen]] which is encrypted and signed.&lt;br /&gt;
Boot loads a static pre-generated signature into the Falcon&#039;s CPU crypto registers, loads KeygenLdr into the Falcon&#039;s CODE region and jumps to it. Execution will proceed into KeygenLdr in Heavy Secure Mode if, and only if, the loaded signature matches the one Falcon calculates internally for KeygenLdr.&lt;br /&gt;
&lt;br /&gt;
Among various things, KeygenLdr will attempt to do a &amp;quot;backwards&amp;quot; security check by calculating a CMAC over Boot and comparing it with a known hash stored in the TSEC firmware&#039;s key data (a small buffer stored after Boot&#039;s code). If the hashes don&#039;t match, execution aborts.&lt;br /&gt;
&lt;br /&gt;
KeygenLdr stores the calculated Boot&#039;s CMAC in the stack, but forgets to clear it. Since the stack is located in Falcon&#039;s DATA region, loading the TSEC firmware blob and dumping the DATA region afterwards (via MMIO) will reveal the calculated hash.&lt;br /&gt;
This allows using KeygenLdr as an oracle to generate a valid CMAC for arbitrary Boot code. Replacing the CMAC in the TSEC firmware&#039;s key data region results in KeygenLdr accepting any Boot code, thus rendering this security measure useless.&lt;br /&gt;
&lt;br /&gt;
Additionally, since signed Falcon code can&#039;t be revoked without an hardware revision, an attacker can always reuse the flawed KeygenLdr code even if a fix is issued.&lt;br /&gt;
|  Running TSEC firmware&#039;s KeygenLdr in a user controlled environment.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[5.0.2]]&lt;br /&gt;
|  January 2018&lt;br /&gt;
|  April 29, 2018&lt;br /&gt;
|  [[User:Hexkyz|hexkyz]], [[User:Rei|Reisyukaku]] (independently), probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  Stack smash in TSEC firmware&#039;s KeygenLdr&lt;br /&gt;
|  Given that we can control the [[TSEC_Firmware#Key_data|key data]] (which is not authenticated) and the [[TSEC_Firmware#Boot|Boot]] blob (see &amp;quot;maconstack&amp;quot;), as well as the fact Non-secure and Heavy Secure code share the same stack, we can use this to attack KeygenLdr. KeygenLdr uses memcpy to copy over a payload to DMEM to verify it, which can be abused to smash the stack (in DMEM) and write over the return address of said function.&lt;br /&gt;
|  ROP under KeygenLdr in Heavy Secure mode.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[8.0.1]]&lt;br /&gt;
|  Early 2018&lt;br /&gt;
|  May 21, 2019&lt;br /&gt;
|  Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  pk1ldrhax&lt;br /&gt;
|  Package1ldr decrypts and verifies the keyblob inside of the current BCT in order to get the package1 key, and then uses the package1 key to decrypt package1. It then validates package1 before jumping to it by checking the PK11 magic number, and that the section sizes sum to the expected size (and are individually less than the expected size). &lt;br /&gt;
&lt;br /&gt;
However, package1ldr does not actually validate the package1 key against a fixed vector (much like kernel9loader forgot to do so on the 3ds). This would normally not matter, as keyblobs are validated -- however, with bootrom code execution one can dump SBK and forge keyblobs, and thus control the package1 key. &lt;br /&gt;
&lt;br /&gt;
Thus (&#039;&#039;&#039;in theory, but not in practice due to the size of the brute force required&#039;&#039;&#039;) one can replace the package1 key with garbage, causing package1 to decrypt into garbage, and hope that this garbage passes validation checks and that package1ldr jumping into the garbage will do something useful.&lt;br /&gt;
&lt;br /&gt;
This was fixed incidentally in [[6.2.0]], as pk1ldr does not use keyblob data to decrypt package1 any more.&lt;br /&gt;
&lt;br /&gt;
|  With a large enough brute force: arbitrary package1 code execution from coldboot.&lt;br /&gt;
&lt;br /&gt;
However, a usable brute force is on the order of &amp;gt;= ~2^80, so &#039;&#039;&#039;this is almost certainly not actually usable in any meaningful context&#039;&#039;&#039;.&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  Early 2017 (as soon as plaintext package1ldr was first dumped)&lt;br /&gt;
|  November 20, 2018&lt;br /&gt;
|  Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TrustZone ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package1#Section_2|Secure Monitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Non-atomic mutexes&lt;br /&gt;
|  When an [[SMC]] is called, TrustZone sets a global variable to mark that an SMC is in progress, so that two SMCs using shared resources (like the security engine) do not trample on one another. On 1.0.0, this global variable was written using non-atomic writes, and thus a race condition is possible.&lt;br /&gt;
&lt;br /&gt;
However, the SMC handler enforces that all SMCs must be called from core #3, unless the top-level handler ID is 1 (SMCs internal to the kernel). Thus, the only SMCs that can be run side-by-side are [any userland smc] and smcGetRandomBytesForKernel, and this turns out to not really be abusable.&lt;br /&gt;
| Mostly useless. Maybe some oob-write into unused (and thus useless) memory if running smcGetRandomBytesForKernel and smcGetRandomBytesForUser at the same time.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December 2017 (Probably earlier by others)&lt;br /&gt;
| January 18, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  jamais vu (non-secure world access to PMC MMIO and pre-deep sleep firmware)&lt;br /&gt;
|  On [[1.0.0]], one could map in the PMC registers in userland. In addition, [[AM_services|am]] ran a little-kernel based firmware on the BPMP at runtime. With code execution under am, one could modify the BPMP&#039;s little-kernel firmware to hook deep sleep entry, and modify TrustZone/Security engine state. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry.&lt;br /&gt;
|  Arbitrary TrustZone code execution.&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  December, 2017&lt;br /&gt;
|  January 20, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  Missed BPMP Exception Vector Writes&lt;br /&gt;
|  Starting in [[2.0.0]], the BPMP is asleep at runtime, and is turned on by TrustZone during [[SMC|smcCpuSuspend]] in order to initiate the deep sleep process. When it does so, it is held in RESET, and TrustZone attempts to write to the BPMP exception vectors at 0x6000F200 to register EVP_RESET = lp0_entry_fw_crt0, and all other EVPs to a function that simply reboots. However, while they successfully write EVP_RESET, they miss all the other vectors, accidentally writing to the 0x6000F004-0x6000F020 region instead of the 0x6000F204-0x6000F220 region they want to write to. This results in all the exception vectors for the BPMP other than RESET being &amp;quot;undefined&amp;quot; (attacker controlled).&lt;br /&gt;
&lt;br /&gt;
With some way of causing an exception vector to be taken at the right time, this would give pre-sleep code execution (and thus arbitrary TrustZone code execution, via the security engine flaw). However, none of the abort vectors are really triggerable, and interrupts are disabled for the BPMP when it is taken out of reset. Thus, this is useless in practice.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by writing to the correct registers.&lt;br /&gt;
|  Theoretically: Arbitrary TrustZone code execution. In practice: Useless.&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  January, 2018&lt;br /&gt;
|  February 23, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]], [[User:Naehrwert|naehrwert]], [[User:Hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  TSEC has access to the secure kernel carveout &lt;br /&gt;
|  TrustZone is responsible for managing security carveouts to prevent DMA controllers from accessing the carveout which contains the kernel, sysmodules, and other critical operating system data.&lt;br /&gt;
&lt;br /&gt;
Until [[8.0.0]], the list of devices that could access the carveout included the TSEC. However, the TSEC can bypass the SMMU when in authenticated mode by writing to a certain register. Thus, pwning nvservices would allow one to take over the TSEC, and use it to write to normally protected mmio/memory.&lt;br /&gt;
&lt;br /&gt;
In [[8.0.0]], this was fixed by removing TSEC access, and adding TSECB access (TSECB cannot bypass the SMMU).&lt;br /&gt;
| With access to the TSEC mmio (nvservices ROP) and code execution in TSEC Heavy Secure mode, kernel code execution, probably.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| 2017 (when TrustZone code plaintext was first obtained).&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|  deja vu (insufficient system state validation on suspend leads to pre-sleep BPMP code execution)&lt;br /&gt;
|  Jamais Vu was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry, since gaining pre-sleep code execution on the BPMP compromises the system.&lt;br /&gt;
&lt;br /&gt;
However, the state validation performed by Nintendo&#039;s Secure Monitor was insufficient to prevent pre-sleep execution from being obtained.&lt;br /&gt;
&lt;br /&gt;
Prior to [[6.0.0]], one could use a DMA controller that had access to IRAM and was not held in reset (there were multiple) to race TrustZone&#039;s writes to the BPMP firmware in IRAM, and thus overwrite Nintendo&#039;s firmware with an attacker&#039;s to gain pre-sleep code execution.&lt;br /&gt;
&lt;br /&gt;
[[6.0.0]] addressed this by performing TrustZone state MAC writes and locking PMC scratch *before* turning on the BPMP, fixing the original Jamais Vu exploit entirely. In addition, the BPMP firmware in TrustZone&#039;s .rodata is now memcmp&#039;d to the actual data after it is written to IRAM. This mitigates race attacks that modify the firmware.&lt;br /&gt;
&lt;br /&gt;
However, Nintendo both forgot to validate the BPMP exception vectors after writing them, and forgot to hold in reset a DMA controller that can write to the BPMP&#039;s exception vectors.&lt;br /&gt;
&lt;br /&gt;
AHB-DMA is not blacklisted by kernel mapping whitelist (Nintendo probably forgot it, because the TX1 TRM does not really document that it&#039;s present, although the MMIO works as documented in older (Tegra 3 and before) TRMs).&lt;br /&gt;
&lt;br /&gt;
Thus, with kernel code execution (or some other way of accessing AHB-DMA, e.g. nspwn on &amp;lt;= 4.1.0, TSEC hax, or other arbitrary mmio access flaws), one can DMA to the BPMP&#039;s exception vectors as they are written, causing TrustZone to start the BPMP executing an attacker&#039;s firmware at a different location than TrustZone intends/validates.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.0.0]] by blocking AHB-DMA arbitration and verifying it is held in reset during suspend, and thus there are no more devices that can write to the relevant MMIO at the right time.&lt;br /&gt;
&lt;br /&gt;
|  Arbitrary TrustZone/BootROM code execution, by using either the original Jamais Vu flaw (prior to [[6.0.0]] or a warmboot bootrom exploit (any firmware where pre-sleep execution can be gained).&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  December 2017&lt;br /&gt;
|  April 15, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]] and ktemkin,  [[User:Naehrwert|naehrwert]] (independently), almost certainly others (independently)&lt;br /&gt;
|-&lt;br /&gt;
| TrustZone allows using imported RSA exponents with arbitrary modulus&lt;br /&gt;
| TrustZone supports &amp;quot;importing&amp;quot; RSA private exponents for use by userland -- these are stored encrypted with TrustZone only keydata in NAND, and decrypted only to TZRAM. This prevents a console that has compromised userland from learning the private exponents of these keys and doing calculations with them offline. In practice, this is used for FS (gamecard communications), ES (drm), and SSL (console client cert communications).&lt;br /&gt;
&lt;br /&gt;
However, the actual SMC API only imports the RSA exponent, and not the modulus, which is passed separately by userland in each call. There is no validation done on the modulus passed in -- this means that userland can pass in any message and modulus it chooses, and obtain the result of (message ^ private exponent) % modulus back from the secure monitor.&lt;br /&gt;
&lt;br /&gt;
By choosing a prime number modulus P such that P has &amp;quot;smooth&amp;quot; order (totient(P) == P-1 is divisible only by &amp;quot;small&amp;quot; primes), one can efficiently use the [[wikipedia:Pohlig-Hellman algorithm|Pohlig-Hellman algorithm]] to calculate the discrete logarithm of such a result directly, and thus obtain the private exponent.&lt;br /&gt;
&lt;br /&gt;
This is mostly useless in practice, given the general availability of other exploits to obtain these decrypted exponents.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 10.0.0 by importing the modulus in addition to the exponent for the ES device key and ES client cert key. For backwards compatibility reasons the SSL key and Lotus key still only import the exponent.&lt;br /&gt;
&lt;br /&gt;
StorageExpMod also now validates that the exponentiation of &amp;quot;DDDDD...&amp;quot; about the provided modulus by the imported exponent and then the fixed public exponent returns &amp;quot;DDDDD...&amp;quot;, and returns invalid argument if validation fails.&lt;br /&gt;
| With userland privileges sufficient to use an imported RSA key: obtaining that RSA key&#039;s private exponent.&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package2#Section_0|HorizonOS Kernel]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Syscall Infoleaks&lt;br /&gt;
| Many syscalls leaked kernel pointers on sad paths (for example svcSetHeapSize and svcQueryMemory), until they landed a bunch of fixes in 2.0.0.&lt;br /&gt;
| Nothing really.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| svcWaitSynchronization/svcReplyAndReceive bad cleanup on error&lt;br /&gt;
| If there is a page fault when fetching handles from the userspace array, it cleans up by dereferencing all objects despite having only loaded first N. Allows the attacker to make arbitrary decrefs on any kernel synchronization object, and thus can be used to get UAF. Haven&#039;t actually been tried on real HW though, but should work (tm).&lt;br /&gt;
| Kernel code execution&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| 24 April&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Bad irq_id check in CreateInterruptEvent&lt;br /&gt;
| CreateInterruptEvent syscall is designed to work only for irq_id &amp;gt;= 32. All irq_ids &amp;lt; 32 are &amp;quot;per-core&amp;quot; and reserved for kernel use (watchdog/scheduling/core communications).&lt;br /&gt;
On 1.0.0 you could supply irq_id &amp;lt; 32 and it would write outside the SharedIrqs table.&lt;br /&gt;
| You can register irq&#039;s in the Core3Irqs table, and thus register per-core irqs for core3, that are normally reserved for kernel. Useless.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~October&lt;br /&gt;
| 17 October&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel .text mapped executable in usermode&lt;br /&gt;
| Prior to [[3.0.2]] the kernel .text was [[Memory_layout|mapped]] in usermode as executable. This can be used for usermode ROP for bypassing ASLR, but SVCs/IPC are not usable by running kernel .text in usermode.&lt;br /&gt;
| Executing kernel .text in usermode&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| &lt;br /&gt;
| 34c3 (December 28, 2017)&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Memory Controller not properly secured&lt;br /&gt;
| The Switch OS originally had the memory controller not set to be accessible only by the secure-world, which was problematic because insecure access can compromise the kernel.&lt;br /&gt;
&lt;br /&gt;
This was fixed partially in [[2.0.0]] by blacklisting the memory controller from being mapped by user-processes, and was fixed entirely in [[4.0.0]] by making the memory controller TZ-only and making all kernel accesses go through [[SMC|smcReadWriteRegister]].&lt;br /&gt;
| With some way to access the memory controller MMIO, arbitrary kernel code execution.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| January 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Potential [[SVC|svcWaitForAddress]] thread use-after-free&lt;br /&gt;
| Between [[4.0.0]], where svcWaitForAddress was introduced, and [[7.0.0]], there was a second intrusive rbtree node in KThread for the WaitForAddress tree (the key being (address, priority), sorted lexicographically). Unlike the WaitProcessWideKeyAtomic tree, the kernel forgot to reinsert the WaitForAddress node when the thread&#039;s priority changed (priority inheritance and/or SetPriority), breaking the rbtree invariants; and since the kernel walks through the entire tree to remove intrusive nodes, you could cause threads to stay in the tree even after their deletion.&lt;br /&gt;
&lt;br /&gt;
[[7.0.0]] fixed the issue by using the same intrusive node for both trees. The thread/node knows which tree it is in, and the latter is correctly updated when thread priority changes.&lt;br /&gt;
| It unluckily didn&#039;t look exploitable&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| July 2018&lt;br /&gt;
| February 2019&lt;br /&gt;
| [[User:TuxSH|TuxSH]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FIRM-package System Modules ===&lt;br /&gt;
Flaws in this category pertain to any of the [[Package2#Section_1|built-in system modules]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Service access control bypass (sm:h, smhax, probably other names)&lt;br /&gt;
| Prior to [[3.0.1]], the &#039;&#039;service manager&#039;&#039; (sm) built-in system module treats a user as though it has full permissions if the user creates a new &amp;quot;sm:&amp;quot; port session but bypasses [[Services_API#Initialize|initialization]]. This is due to the other sm commands skipping the service ACL check for Pids &amp;lt;= 7 (i.e. all kernel bundled modules) and that skipping the initialization command leaves the Pid field uninitialized.&lt;br /&gt;
In [[3.0.1]], sm returns error code 0x415 if [[Services_API#Initialize|Initialize]] has not been called yet.&lt;br /&gt;
| Acquiring, registering, and unregistering arbitrary services&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| May 2017&lt;br /&gt;
| August 17, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Overly permissive SPL service&lt;br /&gt;
| The concept behind the switch&#039;s [[SMC|Secure Monitor]] is that all cryptographic keydata is located in userspace, but stored as &amp;quot;access keys&amp;quot; encrypted with &amp;quot;keks&amp;quot; that never leave TrustZone. The [[SPL services|spl]] (&amp;quot;security processor liaison&amp;quot;?) service serves as an interface between the rest of the system and the secure monitor. Prior to [[4.0.0]], spl exposed only a single service &amp;quot;spl:&amp;quot;, which provided all TrustZone wrapper functions to all sysmodules with access to it. Thus anyone with access to the spl: service (via smhax or by pwning a sysmodule with access) could do crypto with any access keys they knew. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by splitting spl: into spl:, spl:mig, spl:ssl, spl:es, and spl:fs.&lt;br /&gt;
| Arbitrary spl: crypto with any access keys one knows. For example, one could use the SSL module&#039;s access keys to decrypt their console&#039;s SSL certificate private key without having to pwn the SSL sysmodule.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Summer 2017 (after smhax was discovered).&lt;br /&gt;
| December 23, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single session services not really single session&lt;br /&gt;
| Several &amp;quot;critical&amp;quot; services (like fsp-ldr, fsp-pr, sm:m, etc) are meant to only ever hold a single session with a specific sysmodule. However, when a sysmodule dies, all its service session handles are released -- and thus killing the holder of a single session handle would allow one (via sm:hax etc) to get access to that service. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by adding a semaphore to these critical single-session services, so that even if one gets access to them an error code will be returned when attempting to use any of their commands.&lt;br /&gt;
| With some way to access these services and kill their session holders (like expLDR): dumping sysmodule code, arbitrary service access, elevated filesystem permissions, etc.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| May/June 2017 (basically immediately after smhax was discovered)&lt;br /&gt;
| December 30, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nspwn&lt;br /&gt;
| fsp-ldr command 0 &amp;quot;MountCode&amp;quot; takes in a Content Path (retrieved from NCM by Loader), and returns an IFileSystem for the resulting ExeFS. These content paths, are normally NCAs, but MountCode also supports a number of other formats, including &amp;quot;.nsp&amp;quot; -- which is just a PFS0.&lt;br /&gt;
&lt;br /&gt;
When a path ending in &amp;quot;.nsp&amp;quot; is parsed by MountCode, the PFS0 is treated as a raw ExeFS. Because there is no NCA header, the ACID signatures are not validated -- and because there are no other signatures in a PFS0, this results in no signature checking happening at all.&lt;br /&gt;
&lt;br /&gt;
The actual .nsp handling is eventually done by {content mounting function} called by MountCode and other FS commands.&lt;br /&gt;
&lt;br /&gt;
Thus, by placing an ExeFS (NSOs + &amp;quot;main.npdm&amp;quot;) and setting one&#039;s desired title ID to &amp;quot;@Sdcard:/some_title.nsp&amp;quot; or &amp;quot;@User:/some_title.nsp&amp;quot; etc one can launch arbitrary unsigned code, with arbitrary unsigned NPDMs.&lt;br /&gt;
&lt;br /&gt;
This appears to have been fixed by only allowing .nsp when the input fstype==7 for the internal content-mounting function, returning 0x2EE202 otherwise.&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: Arbitrary code execution with full system privileges.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| Late 2017&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single null-byte stack overflow in Loader ContentPath parsing&lt;br /&gt;
| Previously, loader content path parsing looked like this, where path_from_lr was up to 0x300 bytes and not necessarily null-terminated:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300] = {0};&lt;br /&gt;
  strcat(nca_path, path_from_lr);&lt;br /&gt;
  for (int i = 0; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Thus, a content path of the maximum length (0x300 bytes) would result in strcat writing a NULL terminator past the end of the nca_path buffer.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[6.0.0]], the new code looks like this:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300];&lt;br /&gt;
  strncpy(nca_path, path_from_lr, sizeof(nca_path));&lt;br /&gt;
  for (int i = 0; i  &amp;lt; sizeof(nca_path) &amp;amp;&amp;amp; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: single null-byte stack overflow in Loader. Maybe (but probably not) loader code execution.&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 2, 2018&lt;br /&gt;
| September 19, 2018&lt;br /&gt;
| SciresM&lt;br /&gt;
|-&lt;br /&gt;
| System modules vulnerable to selective downgrade attacks&lt;br /&gt;
| Horizon has no mechanism for specifying the specific title version to Loader on process creation.&lt;br /&gt;
&lt;br /&gt;
Observing this, one can note that after a system update one could install a downgraded version of a specific system module (e.g. nvservices) while leaving the rest of the OS at the same version.&lt;br /&gt;
&lt;br /&gt;
Unless there was some breaking API change, this allows one to make a console vulnerable once more to an exploit in a sysmodule by downgrading it and nothing else.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.1.0]] by incrementing a version field in NPDM, and checking it against a hardcoded list for certain titles in Loader&#039;s process creation func.&lt;br /&gt;
| With access to content installation commands (or a vulnerable lower version to selectively install newer titles), reintroducing bugs in vulnerable system modules on newer firmware versions.&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| When FIRM was first dumped in 2017.&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[Loader_services|Loader]] ASLR&lt;br /&gt;
| The RNG used for generating the ASLR slide is only seeded with 32bits, with the data from [[SVC|svcGetInfo]]. Hence, one could bruteforce the seed if one has infoleaks from any programs. This can be successfully bruteforced with at least 2 sample codebin addrs from different programs (with only 1 sample a lot of invalid seeds are found), however in some cases more than 1 seed might be found.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] Loader now uses csrng_GenerateRandomBytes for determining the ASLR slide.&lt;br /&gt;
&lt;br /&gt;
See also [https://github.com/switchbrew/loader-aslr-solver loader-aslr-solver].&lt;br /&gt;
| Breaking ASLR for all non-KIP processes, allowing predicting the main-codebin base addr for all non-KIP processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| January 30, 2022 (presumably found much earlier?)&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG for [[RO_services|ro]] ASLR&lt;br /&gt;
| The RNG used to determine where to randomly map NROs in the target process was TinyMT (nn::os::detail::RngManager output, seeded by 128 bits of entropy). However, TinyMT is not cryptographically secure (and can in fact be analytically solved). &lt;br /&gt;
&lt;br /&gt;
Thus, with a few NRO mapping addresses, one could learn the TinyMT state and derive all previous/future RNG outputs, breaking NRO aslr for all processes. &lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ro now uses csrng_GenerateRandomBytes to determine the random map address for NROs.&lt;br /&gt;
| Breaking ASLR for all NROs loaded in all processes, allowing predicting all NRO mappings for all processes until the next reboot.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| Late 2021/Early 2022&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== System Modules ===&lt;br /&gt;
Flaws in this category pertain to any non-built-in system module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA bsa_sv_av_cback stack buffer overflow&lt;br /&gt;
| bsa_sv_av_cback checks for two input type values (0xC/0xD), on match it copies the input data to stack without size validation. Then it sends an internal request with this data (likewise when the type values don&#039;t match, except the input data is passed directly with a small size), then it returns.&lt;br /&gt;
This requires the AV functionality added with [13.0.0+], however this func is only reachable with [14.0.0+] where the required functionality was enabled.&lt;br /&gt;
&lt;br /&gt;
This requires message data that&#039;s larger than the MTU, so fragmentation must be used, or manually send the ACL data to bypass the MTU.&lt;br /&gt;
&lt;br /&gt;
This can be triggered via an AVRC message with opcode=0x0 (vendor). The above type 0xC is reached via AVRC ctype 0..4, while 0xD is reached with ctype&amp;gt;=0x9.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] the size value for the memcpy (which is also written to the request struct) is clamped to a max value.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow on [14.0.0-14.1.2], with data received from an AVRC bluetooth message with a bluetooth-audio device.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Broken RNG used by [[NS_Services|ns]]&lt;br /&gt;
| The code generating the sd seed and the data for the [[SD_Filesystem|sd]] private/private1 file, all use nn::os::GenerateRandomBytes, not csrng. The sd-seed is generated first, then private, then private1. This allows deriving sd-seed from private since this uses TinyMT, as long as the system shipped from factory on [2.0.0+]. private1 is only useful if the system shipped with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
There&#039;s various other code in ns using nn::os::GenerateRandomBytes as well. This includes the code generating ns_systemseed when it doesn&#039;t exist. ns_systemseed is generated at some point after the various sd-seed-related code (both are called from the same func). Hence, ns_systemseed can be recovered with the above method as well, if it wasn&#039;t recreated at some point without regenerating the above nand-save used with the above.&lt;br /&gt;
&lt;br /&gt;
With [15.0.0+] ns now uses csrng_GenerateRandomBytes for sd-seed/private and ns_systemseed, etc. This only matters when the file is newly generated, which is usually only for factory-fresh systems which ship with this version.&lt;br /&gt;
| Generation of a system&#039;s sd-seed allowing decryption of the NAX0 layer of data on [[SD_Filesystem|SD]], derived using the private file from SD. Applies to systems which factory-shipped with a system-version prior to [[15.0.0]] (that is, [2.0.0-14.1.2]).&lt;br /&gt;
| [[15.0.0]], for newly generated files&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| December ~12, 2021&lt;br /&gt;
| October 11, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[Joy-Con]] HidCommand PairingIn&lt;br /&gt;
| The joycon protocol handler for PairingIn copies data from stack to the response cmd-buf for sending PairingOut. Only the first byte is set to a type value, the rest is uninitialized stack data.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [15.0.0+] by directly writing to the response data without using stack data.&lt;br /&gt;
| Infoleak of hid stack via a bluetooth/uart message+response with a connected hid controller. This returns addrs for the main-codebin/stack, which allows defeating ASLR.&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| [[15.0.0]]&lt;br /&gt;
| September 4, 2020&lt;br /&gt;
| October 10, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFMEDIA input can contain ptr&lt;br /&gt;
| Originally bsd ioctl SIOCGIFMEDIA used the user-specified ifmediareq structure directly from the input buffer. This includes a ptr. This ptr probably isn&#039;t actually used?&lt;br /&gt;
With [5.0.0+] the structure used as input for the ioctl was changed to using &amp;lt;code&amp;gt;int ifm_ulist[1]&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;int *ifm_ulist&amp;lt;/code&amp;gt; (which is unused). The input structure is copied to a tmp struct which is used as the original ifmediareq structure, with ifm_ulist always NULL. The user can still specify a non-zero ifm_count value, however that&#039;s not useful with ifm_ulist being always NULL.&lt;br /&gt;
| Useless?&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Sockets_services|bsdsockets]] ioctl SIOCGIFCONF infoleak&lt;br /&gt;
| Originally bsd ioctl SIOCGIFCONF was handled by setting the data in IPC outbuf0 to the size/addr of IPC outbuf1. These buffers are HipcAutoSelect, so if buf1 is small enough for HipcPointer (otherwise it would be HipcMapAlias) the IPC-buf-ptr leaked into outbuf0 would be located in the codebin-region. Since this is done before the actual ioctl-handling, it doesn&#039;t matter whether the fd is valid.&lt;br /&gt;
This was fixed in [5.0.0+] by using a tmp struct on stack instead of buf0.&lt;br /&gt;
| bsdsockets-sysmodule codebin-region addr infoleak, which allows defeating ASLR.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| February 14, 2022 (probably earlier)&lt;br /&gt;
| February 14, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]], probably others&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] BSA gatt_process_notification stack buffer overflow&lt;br /&gt;
| gatt_process_notification is the GATT handler for processing notification/indication messages. gatt_process_notification does memcpy to stack from the input bt msg data, without size validation. The input len param isn&#039;t validated in this func either - if the remaining len following op_code is less than 2, a negative value will be used for the data copy to stack.&lt;br /&gt;
These were fixed by adding a bounds check for the size, size==0 is also checked for now.&lt;br /&gt;
| Bluetooth-sysmodule stack buffer overflow, with data received from a bluetooth message&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| November 2021&lt;br /&gt;
| January 19, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|ssl]] CVE-2021-43527&lt;br /&gt;
| CVE-2021-43527, see also [https://bugs.chromium.org/p/project-zero/issues/detail?id=2237 here] and [https://googleprojectzero.blogspot.com/2021/12/this-shouldnt-have-happened.html here].&lt;br /&gt;
Using BigSig where the server cert sig is RSA-PSS results in the remote server throwing {no shared cipher} error when Switch connects. If however one creates a rootCA using BigSig (RSA-PSS), which then signs a server cert where the server key is RSA (not PSS), the vuln can be triggered (if the rootCA is trusted, via using the import service-cmd). It&#039;s unknown whether there&#039;s other ways to trigger the vuln.&lt;br /&gt;
&lt;br /&gt;
The crash occurs in VFY_Begin when using the previously overwritten data. A bitsize of &amp;lt;code&amp;gt;$((16384 + 32 + 64 + 64 + 64))&amp;lt;/code&amp;gt; is only enough to overwrite cx-&amp;gt;hashcx, to fully overwrite cx-&amp;gt;hashobj an additional 0xC-bytes (additional 96 bits) is needed.&lt;br /&gt;
Note that partial overwrite isn&#039;t an option: this is the func that initializes those fields to begin with, it just does deinit first before initializing hashcx/hashobj (prior to that these fields would be all-zero when not overwritten by the buf-overflow).&lt;br /&gt;
| Heap buffer overflow in [[SSL_services|ssl]], overwriting data including a ptr to an object which is later used to load a funcptr.&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| [[13.2.1]]&lt;br /&gt;
| Switch: December 1-2, 2021&lt;br /&gt;
| Switch: January 19, 2022&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] EventInfo infoleak&lt;br /&gt;
| The various funcs which send messages to the thread which handles writing to EventInfo, didn&#039;t clear the stack msgbuf. Hence, the various get-EventInfo cmds could return leaked stack data. This likely affected most (?) get-EventInfo cmds, besides CircularBuffer-GetHidReportEventInfo.&lt;br /&gt;
&lt;br /&gt;
This only matters for events where there&#039;s uninitialized regions of the EventInfo, such as events with variable-size data without a memset.&lt;br /&gt;
&lt;br /&gt;
This was fixed by clearing the msgbuf in a number of funcs.&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| &lt;br /&gt;
| During initial [[13.0.0|diff]]. Added to this page on: December 12, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak with [[HID_services|hid:sys]] SetButtonConfigStorage{name}Deprecated&lt;br /&gt;
| These cmds pass a stack ptr for the StorageName when calling the internal func. Nothing is written to this StorageName. Hence, stack infoleak (data is copied as a NUL-terminated string), which can be later read by the GetButtonConfigStorage{name} cmds.&lt;br /&gt;
&lt;br /&gt;
This was fixed by removing the Deprecated cmds in [[13.0.0]].&lt;br /&gt;
| Infoleak of hid stack from a StorageName readable via GetButtonConfigStorage{name}, up to the NUL-terminator.&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| [[13.0.0]]&lt;br /&gt;
| December 11, 2020&lt;br /&gt;
| September 27, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] WriteHidData/WriteHidData2/SetHidReport unchecked memcpy size&lt;br /&gt;
| WriteHidData/SetHidReport copies the input struct to stack, then passes it to the funcptr/vfunc call. WriteHidData2 passes the input buffer addr directly to the funcptr/vfunc call. The called func eventually copies the input data to the stack struct using the specified size without validating it.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.1.0]] in WriteHidData/SetHidReport by doing a fixed-size copy into another tmp struct, with the size field being clamped to a maximum of 0x2BB afterwards. This struct is then used when calling the vfunc. The vfuncs called by WriteHidData/WriteHidData2/SetHidReport were also updated to clamp the size to the required maximum value.&lt;br /&gt;
| Stack buffer overflow&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| [[12.1.0]]&lt;br /&gt;
| July 16, 2020&lt;br /&gt;
| July 6, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] stack buffer overflow with HID DATA packets&lt;br /&gt;
| The BSA (bt-stack) func bta_hh_co_data copies data from a HID DATA packet to stack without checking the size, then sends it over Uipc. [7.0.0+] The user Uipc callback also copies the input data to stack without checking the size, then sends it to the sharedmem CircularBuffer.&lt;br /&gt;
With [12.0.2+] this was fixed in bta_hh_co_data by clamping the size to a maximum of 0x2BB. The aforementioned buffer overflow in the Uipc callback can&#039;t be triggered since at that point the size was already clamped.&lt;br /&gt;
&lt;br /&gt;
Before this bta_hh_co_data func is reached, there is no validation of the size (such as comparing against the L2CAP MTU) when Basic Mode is being used.&lt;br /&gt;
&lt;br /&gt;
Actually triggering this requires using a data-size larger than the normal L2CAP MTU. This can be done by for example, using raw HCI to send the packet from the remote bluetooth device.&lt;br /&gt;
&lt;br /&gt;
Note that when the remote device is configured as an audio device for [12.0.0+] where [[Settings_services#BluetoothDevicesSettings|BluetoothDevicesSettings]].TrustedServices was only ever set for audio since system-boot, it is not possible for the remote device to connect to the Switch for HID.&lt;br /&gt;
| ROP under [[Bluetooth_Driver_services|bluetooth]] via HID DATA packet sent by a paired HID bluetooth device. This can be triggered at any time while not in sleep-mode, when not in airplane-mode. The earliest is while the Nintendo Switch logo screen is displayed during system boot.&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| [[12.0.2]]&lt;br /&gt;
| July-August 2020&lt;br /&gt;
| May 11, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] GetAdapterProperty/SetAdapterProperty unchecked memcpy size&lt;br /&gt;
| GetAdapterProperty copies data from stack to the output buffer using the buffer size, without checking the size (when not handling the Name type). SetAdapterProperty copies data to stack from the input buffer using the buffer size, without checking the size.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.0.0]] by replacing the buffer data with a fixed-size-struct.&lt;br /&gt;
| Stack infoleak with GetAdapterProperty, stack buffer overflow (and hence ROP) with SetAdapterProperty.&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| July 17, 2020&lt;br /&gt;
| April 7, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] A-63146698&lt;br /&gt;
| [https://android.googlesource.com/platform/system/bt/+/226ea26684d4cd609a5b456d3d2cc762453c2d75 A-63146698] / CVE-2017-0785. See also [https://info.armis.com/rs/645-PDC-047/images/BlueBorne%20Technical%20White%20Paper_20171130.pdf here].&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR (note: not tested on hw).&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] sdp_server.cc process_service_search() continuation request p_req validation&lt;br /&gt;
| With [5.0.0+], the following was added to the if-block prior to loading cont_offset from p_req: &amp;lt;code&amp;gt;(p_req + sizeof(cont_offset) &amp;gt; p_req_end)&amp;lt;/code&amp;gt; (which verifies that cont_offset is within message bounds).&lt;br /&gt;
| Bluetooth-sysmodule out-of-bounds read from heap, probably not useful since the read value must match a state field, etc.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services#hid:sys|hid:sys]] ButtonConfig s32 array-index not validated&lt;br /&gt;
| The input s32 array-index for [[HID_services#hid:sys|hid:sys]] ButtonConfig cmds 1255-1270 was originally not validated. Using a negative or &amp;gt;=5 index results in accessing out-of-bounds data, with an array stored on stack.&lt;br /&gt;
[10.1.0-10.2.0] Each of these cmds will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] Now an unsigned compare is used, with 0 or an error being immediately returned when the value is invalid.&lt;br /&gt;
| hid infoleak, out-of-bounds mem-write anywhere in hid address-space relative to the stack array (with constraints on the data).&lt;br /&gt;
| [[10.1.0]]&lt;br /&gt;
| [[11.0.1]]&lt;br /&gt;
| April 18, 2020&lt;br /&gt;
| July 14, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] ClearCaptureBuffer OOB&lt;br /&gt;
| The captureBuf is used as an array index without proper validation. There is code validating it, but on failure it just skips over a code-block, with code using captureBuf still being used afterwards. Then this is used to write bools into a global array, one of which is from the command input.&lt;br /&gt;
This was fixed with [9.1.0+] by requiring captureBuf = 0-1.&lt;br /&gt;
| OOB bool writes into an array&lt;br /&gt;
| [[9.1.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IDisplayController|AM IDisplayController]] TakeScreenShotOfOwnLayer OOB&lt;br /&gt;
| The captureBuf is used as an array index without validation. Data used from this array includes calling a funcptr from the array entry, if set. Eventually this is also used to write bools into this array, one of which is from the command input.&lt;br /&gt;
With [5.0.0+] a func is eventually called to get a ptr determined by the input captureBuf, with nullptr being returned for captureBuf&amp;gt;=0x10. The caller will Abort if nullptr was returned.&lt;br /&gt;
| OOB array access&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[13.1.0]]&lt;br /&gt;
| ~July 31, 2019&lt;br /&gt;
| January 26, 2022&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IStorage|AM IStorage]] infoleak&lt;br /&gt;
| Originally the buffer allocated by [[Applet_Manager_services#CreateStorage|CreateStorage]] using the specified input size was not cleared. With [8.0.0+] this was fixed by adding a memset() for the buffer after successful allocation.&lt;br /&gt;
&lt;br /&gt;
Hence, IStorage-&amp;gt;IStorageAccessor-&amp;gt;Read will return uninitialized memory when the Write cmd was not previously used with the specified region.&lt;br /&gt;
| Infoleak from the main [[Applet_Manager_services#IStorage|AM]] heap, allowing defeating ASLR by reading addresses from previously allocated objects.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| December 2018&lt;br /&gt;
| August 9, 2019&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Out-of-bounds array read for [[BCAT_Content_Container]] secret-data index&lt;br /&gt;
| The [[BCAT_Content_Container]] secret-data index is not validated at all. This is handled before the RSA-signature(?) is ever used. Since the field is an u8, a total of 0x800-bytes relative to the array start can be accessed.&lt;br /&gt;
This is not useful since the string loaded from this array is only involved with key-generation.&lt;br /&gt;
| &lt;br /&gt;
| Unknown&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| August 4, 2017&lt;br /&gt;
| August 6, 2017&lt;br /&gt;
| [[User: shinyquagsire23|Shiny Quagsire]], [[User:Yellows8|yellows8]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
|  OOB Read in NS system module (pl:utoohax, pl:utonium, maybe other names)&lt;br /&gt;
|  Prior to [[3.0.0]], pl:u (Shared Font services implemented in the NS sysmodule) service commands 1,2,3 took in a signed 32-bit index and returned that index of an array but did not check that index at all. This allowed for an arbitrary read within a 34-bit range (33-bit signed) from NS .bss. In [[3.0.0]], sending out of range indexes causes error code 0x60A to be returned.&lt;br /&gt;
|  Dumping full NS .text, .rodata and .data, infoleak, etc&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  April 2017&lt;br /&gt;
|  On exploit&#039;s fix in [[3.0.0]]&lt;br /&gt;
|  [[User:qlutoo|qlutoo]], ReSwitched Team (independently)&lt;br /&gt;
|-&lt;br /&gt;
| Unchecked domain ID in common IPC code&lt;br /&gt;
| Prior to [[2.0.0]], object IDs in [[IPC_Marshalling#Domain_message|domain messages]] are not bounds checked. This out-of-bounds read could be exploited to brute-force ASLR and get PC control in some services that support domain messages.&lt;br /&gt;
|&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~July 2017&lt;br /&gt;
| 20 July 2017‎&lt;br /&gt;
| [[User:hthh|hthh]]&lt;br /&gt;
|-&lt;br /&gt;
| expLDR (sysmodule handle table exhaustion)&lt;br /&gt;
| Most sysmodules share common template code to handle IPC control messages. The command DuplicateSession (type 5 command 2)&#039;s template code will abort() if it fails to duplicate a session&#039;s handle for the requester. Because many sysmodules have limited handle table size (smaller than the browser/other entrypoints), repeatedly requesting to duplicate one&#039;s session will cause the sysmodule to run out of handle table space and abort, causing the service to release all its handles cleanly.&lt;br /&gt;
| Sysmodule crashes.  Most usefully, crashing ldr allows access to fsp-ldr and crashing pm allows access to fsp-pr. Useless after [[4.0.0]], which mitigated a number of single-session service access issues.&lt;br /&gt;
| Unfixed&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| 24 June 2017&lt;br /&gt;
| 8 March 2018&lt;br /&gt;
| [[User:daeken|daeken]]&lt;br /&gt;
|-&lt;br /&gt;
| Transfer Memory leak in nvservices system module&lt;br /&gt;
| The nvservices sysmodule does not clear most of its transfer memory prior to release.&lt;br /&gt;
| The calling process can read key bits of memory, including breaking ASLR (by revealing the image base) and exposing the address of other transfer memory to set up attacks. More details here: [https://daeken.svbtle.com/nintendo-switch-nvservices-info-leak transfermeme (nvservices info leak)] by [[User:daeken|daeken]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| June 2017&lt;br /&gt;
| 16 October 2018&lt;br /&gt;
| [[User:qlutoo|qlutoo]] and [[User:hexkyz|hexkyz]],&lt;br /&gt;
[[User:daeken|daeken]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| OOB write in audio system module&lt;br /&gt;
| Prior to [[2.0.0]], the [[Audio_services#audout:u|AppendAudioOutBuffer]] and [[Audio_services#audin:u|AppendAudioInBuffer]] IPC commands would blindly increment the appended buffers&#039; count while using said count value as an index to where the user data should be copied into. This resulted in an 0x28 bytes, user controlled, out-of-bounds memory write into the [[Audio_services|audio]] sysmodule&#039;s memory space.&lt;br /&gt;
Combined with the [[Audio_services#audout:u|GetReleasedAudioOutBuffer]] or [[Audio_services#audin:u|GetReleasedAudioInBuffer]] commands, this could also be used as an 8 byte infoleak.&lt;br /&gt;
&lt;br /&gt;
In [[2.0.0]], the commands now return error code 0x1099 if the number of unreleased buffers exceeds 0x1F.&lt;br /&gt;
| Code execution under audio sysmodule&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| November 2, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| nvhax (memory corruption in nvservices system module)&lt;br /&gt;
| Prior to [[6.2.0]], the [[NV_services|nvservices]] ioctl [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] would take a single &amp;quot;pwarpstate&amp;quot; argument which would be interpreted by nvservices as a memory pointer for writing 2 &amp;quot;warpstate&amp;quot; structs (one for each Streaming Multiprocessor).&lt;br /&gt;
This resulted in nvservices attempting to blindly memcpy into this user supplied address and trigger a crash. However, if paired with an infoleak, this could be used to arbitrarily write 0x30 bytes anywhere in nvservices&#039; memory space.&lt;br /&gt;
Additionally, the &amp;quot;warpstate&amp;quot; struct itself was never initialized, which means nvservices would leak the 0x30 bytes from the stack. By invoking other ioctls it was also possible to partially control the stack contents and achieve a usable arbitrary memory write primitive.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] now takes 2 inline &amp;quot;warpstate&amp;quot; structs instead of a &amp;quot;pwarpstate&amp;quot; pointer, thus effectively avoiding the bad memcpy.&lt;br /&gt;
| Code execution under nvservices sysmodule&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 5, 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak in nvservices system module&lt;br /&gt;
| The [[NV_services|nvservices]] ioctl [[NV_services#NVMAP_IOC_ALLOC|NVMAP_IOC_ALLOC]] takes an optional argument &amp;quot;addr&amp;quot; which allows the calling process to pass a pointer to user allocated memory for backing a nvmap object. If &amp;quot;addr&amp;quot; is left as 0, nvservices uses the transfer memory region (donated by the user during initialization) instead, when allocating memory for the nvmap object.&lt;br /&gt;
By design, freeing the nvmap object by calling the ioctl [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] returns, in its &amp;quot;refcount&amp;quot; argument, the user address previously supplied if the reference count reaches 0.&lt;br /&gt;
However, prior to [[6.2.0]], the case where the transfer memory region is used to allocate the nvmap object was not taken into account, thus resulting in [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] leaking back an address from within the transfer memory region mapped in nvservices&#039; memory space.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] no longer returns the address when the transfer memory region is used instead of user supplied memory.&lt;br /&gt;
| Combined with other vulnerabilities: Defeating ASLR in nvservices sysmodule.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11969</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11969"/>
		<updated>2022-10-12T01:17:48Z</updated>

		<summary type="html">&lt;p&gt;SciresM: ro is not a firm sysmodule&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu. Video capture is not supported.&lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
====Loader====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Bluetooth_Driver_services|bluetooth]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[NS_Services|ns]]===&lt;br /&gt;
Besides the various IPC changes, vulnerable RNG usage was [[Switch_System_Flaws|fixed]] to properly use secure RNG where needed.&lt;br /&gt;
&lt;br /&gt;
===[[RO_services|ro]]===&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Added command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Added command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Added command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11968</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11968"/>
		<updated>2022-10-12T01:16:58Z</updated>

		<summary type="html">&lt;p&gt;SciresM: ro had same issue fixed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu. Video capture is not supported.&lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
====Loader====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
====Ro====&lt;br /&gt;
The broken RNG for ASLR was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[Bluetooth_Driver_services|bluetooth]]===&lt;br /&gt;
Besides the various IPC changes, a vulnerable func was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
===[[NS_Services|ns]]===&lt;br /&gt;
Besides the various IPC changes, vulnerable RNG usage was [[Switch_System_Flaws|fixed]] to properly use secure RNG where needed.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Added command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Added command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Added command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11909</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11909"/>
		<updated>2022-10-11T04:10:08Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add kernel diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu.&lt;br /&gt;
*   	&lt;br /&gt;
*       Video capture is not supported.&lt;br /&gt;
*     &lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Compiler changes:&lt;br /&gt;
** Compiler upgrade &lt;br /&gt;
*** [What version of clang?]&lt;br /&gt;
*** Clang is optimizing much more aggressively in some places.&lt;br /&gt;
*** Notably, there are many code locations now where clang doesn&#039;t actually increment the KSchedulerLock&#039;s count field, presumably because it sees it will be decremented at end of scope...&lt;br /&gt;
**** This isn&#039;t exploitable, and it is &amp;quot;&amp;quot;&amp;quot;correct&amp;quot;&amp;quot;&amp;quot;, but it is worth noting to other reverse engineers because it is very confusing to see the count field unchanged or reloaded after function calls.&lt;br /&gt;
** Code is now compiled with -fomit-frame-pointer.&lt;br /&gt;
* Initialization changes:&lt;br /&gt;
** When the thread resource limit is increased, 24 MB of virtual space is now reserved for the Kernel stack region instead of 14 MB.&lt;br /&gt;
* In HorizonKernelMain:&lt;br /&gt;
** DoOnEachCoreInOrder is no longer inlined, when setting up the main/interrupt threads. It is still inlined in all other places.&lt;br /&gt;
* Multiple fixed-allocations from the system pool/resource limit were removed/revised, presumably to prevent them from unnecessarily fragmenting the pool forever.&lt;br /&gt;
** AppletSecureMemory is now allocated statically, instead of dynamically.&lt;br /&gt;
*** Previously, 4 MB was allocated from the system pool/resource limit during main.&lt;br /&gt;
*** Initialize0 now reserves the 4 MB immediately after the slab heaps for this.&lt;br /&gt;
**** DRAM layout is now like [tz reserved] [kernel] [slab heaps] [applet secure memory] [pt heap] [init pt] [memory pool partitions].&lt;br /&gt;
**** The virtual memory region type is 0x62; the physical memory region type is 0xC200018E.&lt;br /&gt;
** The KPageBuffer slab heap is no longer dynamically allocated from KMemoryManager.&lt;br /&gt;
*** Previously, the required number of pages were allocated from the system pool/resource limit to setup the heap *immediately* after KMemoryManager was initialized.&lt;br /&gt;
*** Now, it is set up during Kernel::InitializeResourceManagers, after setting up the page manager.&lt;br /&gt;
**** InitializeKPageBufferSlabHeap now takes heap and page manager as arguments; the slab heap&#039;s members are randomly allocated pages from the page manager.&lt;br /&gt;
***** This effectively randomizes the page buffer slabheap&#039;s page locations, where previously they were a contiguous range somewhere in the system pool.&lt;br /&gt;
***** To facilitate this, the page manager now has an Allocate(count) member function in addition to the previous single-page Allocate().&lt;br /&gt;
****** To facilitate this, the page manager now tracks the bitmap ends in addition to the bitmap starts, to enable a linear walk of the lowest bitmap layer.&lt;br /&gt;
*** This has an important knock-on effect: TLS pages are allocated from the page buffer slab, and correspondingly are no longer heap pages.&lt;br /&gt;
**** Correspondingly, KMemoryState_ThreadLocal no longer has the FlagReferenceCounted (0x400000) bit set.&lt;br /&gt;
**** However, removing this bit naively breaks IPC, which previously checked FlagReferenceCounted before copying to/from the message buffer.&lt;br /&gt;
**** Now, FlagReferenceCounted is checked if and only if the message buffer is a UserBuffer. If it is not, a new flag &amp;quot;FlagLinearMapped&amp;quot; (0x4000000) is checked.&lt;br /&gt;
***** This bit is set only on memory types guaranteed to be accessible via the kernel&#039;s linear mapping of non-kernel dram (physical ranges with memory region flag 0x80000000).&lt;br /&gt;
***** This new flag is set on all memory states other than Free, Io, Static, Inaccessible, Kernel, Coverage.&lt;br /&gt;
* Two new SVCs were added for a new &amp;quot;InsecureMemory&amp;quot; concept.&lt;br /&gt;
** Svc 0x90 is Result MapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This allocates the requested size memory from a pool partition/resource limit, and map it with a new memory state (&amp;quot;KMemoryState_Insecure&amp;quot;) at the user-specified address.&lt;br /&gt;
**** The resource limit/pool partition are gotten via new KSystemControl functions (&amp;quot;KSystemControl::GetInsecureMemoryResourceLimit&amp;quot;, &amp;quot;KSystemControl::GetInsecureMemoryPool&amp;quot;).&lt;br /&gt;
***** On NX board, these are the system resource limit, and Pool_SystemNonSecure respectively.&lt;br /&gt;
**** The specified address/size must be within the alias code region.&lt;br /&gt;
**** KMemoryState_Insecure has value 0x5583817.&lt;br /&gt;
***** This is type 0x17 with flags CanUseNonDeviceIpc, CanUseNonSecureIpc, Mapped, CanDeviceMap, CanAlignedDeviceMap, ReferenceCounted, CanChangeAttribute, LinearMapped.&lt;br /&gt;
** Svc 0x91 is Result UnmapInsecureMemory(uintptr_t address, size_t size);&lt;br /&gt;
*** This unmaps/deallocates/releases memory previously mapped with MapInsecureMemory.&lt;br /&gt;
* More changes to SvcMapDeviceAddressSpace(ByForce/Aligned).&lt;br /&gt;
** The argument which was previously a memory permission (&amp;quot;device_perm&amp;quot;) is now an encoded u32 (&amp;quot;option&amp;quot;).&lt;br /&gt;
*** The low 16 bits of this are the device permission.&lt;br /&gt;
*** The upper 16 bits of this are an enum (only defined values are 0 and 1).&lt;br /&gt;
** If the enum-arg is not 0 or 1, svc::ResultInvalidEnumValue() is now returned.&lt;br /&gt;
** If the enum-arg is 1 and the specified memory is IO, svc::ResultInvalidCombination is returned.&lt;br /&gt;
* Partial support was added for the KPageBuffer size being different from the hardware page size.&lt;br /&gt;
** There are now two globals, g_PageBufferSize = 0x1000, g_PageBufferCount = 0.&lt;br /&gt;
** The KPageBuffer slab heap is initialized with g_PageBufferCount blocks of g_PageBufferSize.&lt;br /&gt;
*** if g_PageBufferSize is 0x1000, g_PageBufferCount has the number of required TLS pages added to it (# processes + # threads + (# processes + #threads) / 8).&lt;br /&gt;
** KDynamicPageManager::Initialize now takes in an alignment argument for the page buffer size.&lt;br /&gt;
*** KSecureSystemResource always passes 0x1000.&lt;br /&gt;
** It is possible this is full support but ifdef&#039;d, but on NX board at least all places which allocate/free to the heap panic if g_PageBufferSize != 0x1000...&lt;br /&gt;
* The page table heap now receives all but 64 of the available pages; prior to this, it was all but 70.&lt;br /&gt;
* KSessionRequest&#039;s additional mappings (when sending an IPC request with more than 8 buffers) are now slab-allocated, rather than using KPageBuffers.&lt;br /&gt;
** This slab has a count of 40; object size is 0x4A0 (exactly the maximum required size).&lt;br /&gt;
** 13.0.0+ Dynamic expansion is supported.&lt;br /&gt;
* Scoped setting/clearing of the 14.0.0 exception flag for cache operations has changed.&lt;br /&gt;
** Previously, |= on set, &amp;amp;= ~ on clear. Now, the flag is orr&#039;d in only if it is not already set, and cleared only if it was newly set.&lt;br /&gt;
** This adds support for recursively setting these flags via a scoped setter, although there are no places in kernel where it is possible for this to occur.&lt;br /&gt;
** This applies to cpu::InvalidateDataCache, cpu::StoreDataCache, cpu::FlushDataCache&lt;br /&gt;
* The IsInUsermodeExceptionHandler exception flag management was changed:&lt;br /&gt;
** This is now cleared by RestoreContext (same place it clears other flags) rather than ClearExceptionSvcPermissions. It is still set by SetExceptionSvcPermissions.&lt;br /&gt;
* Changes in and surrounding page table logic:&lt;br /&gt;
** Devices can now theoretically (but not on the NX board) be given access to memory mapped as Io.&lt;br /&gt;
*** Why one would want to do this is unclear.&lt;br /&gt;
*** KMemoryState_Io now supports the CanAlignedDeviceMap and CanDeviceMap flags.&lt;br /&gt;
*** KPageTableBase::GetContiguousMemoryRangeWithState no longer checks that the passed memory address is heap.&lt;br /&gt;
*** KPageTableBase::OpenMemoryRangeForMapDeviceAddressSpace no longer checks passes KMemoryState_FlagReferenceCounted.&lt;br /&gt;
*** KPageTableBase::LockForMapDeviceAddressSpace takes two new arguments, an output bool * to write whether the state was io, and a bool for whether to check KMemoryState_FlagReferenceCounted.&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
*** KPageTableBase::LockForUnmapDeviceAddressSpace now takes a bool argument for whether to check KMemoryState_FlagReferenceCounted&lt;br /&gt;
**** The bool is always passed on true on NX board, preventing this feature from being actually used.&lt;br /&gt;
** Pages mapped via MapIoRegion now have KMemoryAttribute_Locked instead of KMemoryAttribute_None.&lt;br /&gt;
** Changes were made with respect to the way MapPhysicalMemory/UnmapPhysicalMemory are implemented:&lt;br /&gt;
*** KMemoryManager::AllocatePageGroupForProcess no longer calls KPageGroup::Open on the returned page group (essentially reverting the change in 11.0.0).&lt;br /&gt;
**** Other KMemoryManager::Allocate* functions still call KPageGroup::Open.&lt;br /&gt;
*** KPageTableBase::MapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;MapFirst&amp;quot;), which behaves the same as Map but calls KernelPanic() if the mapped pages have a non-zero reference count.&lt;br /&gt;
**** This enforces that MapPhysicalMemory is the first place the pages being mapped have been allocated/opened.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls a new KPageTable::Operate operation (&amp;quot;SeparatePages&amp;quot;), which performs page separation on the requested range.&lt;br /&gt;
**** SeparatePages is identical to the separation done at the prologue of ChangePermissions; practically, this just enforces that the pages exist.&lt;br /&gt;
*** KPageTableBase::UnmapPhysicalMemory now calls KernelPanic if the unmapping operation fails (since it is guaranteed to succeed by the success of SeparatePages).&lt;br /&gt;
**** Logic which previously existed for re-mapping on failure has been removed.&lt;br /&gt;
** New Kernel Objects (&amp;quot;KSystemResource&amp;quot;, &amp;quot;KSecureSystemResource&amp;quot;).&lt;br /&gt;
*** Type ID = 0x4600, KSystemResource : public KAutoObject, KSecureSystemResource : public KSystemResource&lt;br /&gt;
*** KSystemResource just stores pointers to the three kinds of dynamic resource managers required by processes/page tables.&lt;br /&gt;
*** KSecureSystemResource stores the pointed-to objects for these as members.&lt;br /&gt;
**** Previously, these were just KProcess members; they are no longer KProcess members and instead live in the KSecureSystemResource object.&lt;br /&gt;
*** The slab heap for KSecureSystemResource has capacity = KProcess slab heap.&lt;br /&gt;
*** When a process is created with system resource size &amp;gt; 0, it now creates a KSecureSystemResource (which manages allocation with KSystemControl).&lt;br /&gt;
**** All actual underlying logic is the same, this just abstracts the KSystemControl/secure memory interaction out of KProcess.&lt;br /&gt;
* KInterruptEventTask was removed and no longer exists.&lt;br /&gt;
** KInterruptEvent now inherits from KInterruptTask directly.&lt;br /&gt;
** There is no longer a global task table; KInterruptManager is expected to return ResultBusy if an interrupt is already bound (it already did this).&lt;br /&gt;
** KInterruptEvent::Finalize now unbinds the interrupt directly, and then calls KDpcManager::Request() with a no-op KDpcTask.&lt;br /&gt;
*** In practice, this unbinds the interrupt, and then creates an ordering to guarantee all cores will see the interrupt as unbound before continuing.&lt;br /&gt;
*** Trivia: this is the first use of KDpcManager::Request on non-debug kernels.&lt;br /&gt;
* Minor changes to KHandleTable:&lt;br /&gt;
** KHandleTable::KHandleTable now initializes the table_size, max_count, and next_id fields to zero, previously they were uninitialized until Initialize was called.&lt;br /&gt;
** KHandleTable::Initialize now instantiates a KScopedDisableDispatch while setting up the table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Added command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Added command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Added command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11908</id>
		<title>15.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=15.0.0&amp;diff=11908"/>
		<updated>2022-10-11T03:18:13Z</updated>

		<summary type="html">&lt;p&gt;SciresM: Add autogeneraed IPC diff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 15.0.0 system update was released on October 11, 2022 (UTC). This Switch update was released for the following regions: ALL, and CHN.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
*   The location of the Bluetooth® Audio menu within System Settings has moved.&lt;br /&gt;
*   Screenshots can be taken using the Capture Button while in the Nintendo Switch Online application found on the Nintendo Switch HOME Menu.&lt;br /&gt;
*   	&lt;br /&gt;
*       Video capture is not supported.&lt;br /&gt;
*     &lt;br /&gt;
*   &lt;br /&gt;
*   General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated, except for lbl which was previously stubbed. New sysmodule eth was added.&lt;br /&gt;
* All SystemData were updated, except for the following: SharedFont, Dictionary, AvatarImage, Eula, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
* The following applets were updated: qlaunch, [[Controller_Applet|controller]], dataErase, error, netConnect, [[Profile_Selector|playerSelect]], [[Internet_Browser|web-applets]], OverlayApplet, [[Album_Applet|photoViewer]].&lt;br /&gt;
&lt;br /&gt;
NPDM changes (see [[Services_API|here]] for service hosting changes):&lt;br /&gt;
* bluetooth: Access to srepo:u was added.&lt;br /&gt;
* bcat: Access to sprof:sp was removed.&lt;br /&gt;
* nifm: Access to ethc:c, ethc:i, and various wlan:* services were removed. Access to bsd:nu, eth:nd, wlan, and wlan:nd were added.&lt;br /&gt;
* bsdsocket: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0. Access to usb:hs and the various wlan:* services were removed.&lt;br /&gt;
* wlan: Access to srepo:u was added.&lt;br /&gt;
* ldn: Access to psc:m and the various wlan:* services were removed. Access to the wlan service was added.&lt;br /&gt;
* ns: Access to audctl was removed. Access to csrng and dauth:0 was added.&lt;br /&gt;
* ssl: &amp;quot;Lowest Allowed CPU ID&amp;quot; was changed from 3 to 0.&lt;br /&gt;
* nim: Access to ssl was replaced with ssl:s.&lt;br /&gt;
* glue: FS permissions now has bitmask 0x0000004000000000 set.&lt;br /&gt;
* ro: Access to csrng was added.&lt;br /&gt;
* omm: FS permissions now has bitmask 0x0000000000100000 set.&lt;br /&gt;
* qlaunch: Access to mnpp:sys and spbg:sp were removed.&lt;br /&gt;
&lt;br /&gt;
RomFs changes (besides sysver titles):&lt;br /&gt;
* [[SSL_services|CertStore]]: &amp;quot;/ssl_TrustedCerts.bdf&amp;quot; updated&lt;br /&gt;
* ErrorMessage: various error messages updated/added&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Browse/FocusNodeFrame.arc&amp;quot; updated&lt;br /&gt;
** &amp;quot;/message/&amp;quot;: localization data updated&lt;br /&gt;
** &amp;quot;/nro/&amp;quot;: The various NROs located under these sub-dirs were updated.&lt;br /&gt;
* Help:&lt;br /&gt;
** &amp;quot;/legallines.htdocs/img/HDMI.png&amp;quot; updated&lt;br /&gt;
** &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/safe.htdocs/html/{dir}/&amp;quot;, where {dir} is &amp;quot;JPja&amp;quot;, &amp;quot;KRko&amp;quot;, and &amp;quot;TWzh&amp;quot;:&lt;br /&gt;
*** &amp;quot;index.html&amp;quot;, &amp;quot;page_02.html&amp;quot;, &amp;quot;page_04.html&amp;quot;: updated&lt;br /&gt;
* UrlBlackList:&lt;br /&gt;
** &amp;quot;/listCommon.txt&amp;quot; updated&lt;br /&gt;
* TimeZoneBinary: updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* [[HID_services|ControllerFirmware]]: &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/raizo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: updated&lt;br /&gt;
* Applets: Various UI/localization data updated. For web-applets, the NRR and buildinfo.dat were also updated.&lt;br /&gt;
&lt;br /&gt;
===BootImagePackages===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
===[[HID_services|hid]]===&lt;br /&gt;
Besides the various IPC changes, an infoleak vuln was [[Switch_System_Flaws|fixed]].&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were removed:&lt;br /&gt;
** nn::eth::sf::IEthInterface&lt;br /&gt;
** nn::eth::sf::IEthInterfaceGroup&lt;br /&gt;
** nn::socket::sf::IClient&lt;br /&gt;
** nn::wlan::detail::IDetectManager&lt;br /&gt;
** nn::wlan::detail::IInfraManager&lt;br /&gt;
** nn::wlan::detail::ILocalGetActionFrame&lt;br /&gt;
** nn::wlan::detail::ILocalGetFrame&lt;br /&gt;
** nn::wlan::detail::ILocalManager&lt;br /&gt;
** nn::wlan::detail::ISocketGetFrame&lt;br /&gt;
** nn::wlan::detail::ISocketManager&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::anif::detail::ISfAssignedNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfDriverService&lt;br /&gt;
** nn::anif::detail::ISfDriverServiceCreator&lt;br /&gt;
** nn::anif::detail::ISfNetworkInterfaceService&lt;br /&gt;
** nn::anif::detail::ISfUserService&lt;br /&gt;
** nn::anif::detail::ISfUserServiceCreator&lt;br /&gt;
** nn::pl::detail::IPlatformServiceManager&lt;br /&gt;
** nn::prepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::socket::sf::IClient_MC&lt;br /&gt;
** nn::srepo::detail::ipc::IAsyncContext&lt;br /&gt;
** nn::ssl::sf::ISslContextForSystem&lt;br /&gt;
** nn::ssl::sf::ISslServiceForSystem&lt;br /&gt;
** nn::wlan::detail::IGeneralServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateServiceCreator&lt;br /&gt;
** nn::wlan::detail::IPrivateWirelessCommunicationService&lt;br /&gt;
** nn::wlan::detail::IWirelessCommunicationService&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::baas::IAdministrator&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::account::baas::IManagerForSystemService&lt;br /&gt;
*** Added command 143 - inbytes: 0, outbytes: 16&lt;br /&gt;
*** Added command 160 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command  90 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command  91 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::am::service::IStorageChannel&#039;]&lt;br /&gt;
*** Added command 100 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command  50 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 200 - buffers: [5], inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::am::service::IAllSystemAppletProxiesService&#039;], pid: True&lt;br /&gt;
** nn::am::service::ILibraryAppletProxy&lt;br /&gt;
*** Added command  22 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IHomeMenuFunctions&#039;]&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::am::service::IOverlayAppletProxy&lt;br /&gt;
*** Added command  23 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::am::service::IGlobalStateController&#039;]&lt;br /&gt;
** nn::arp::detail::IWriter&lt;br /&gt;
*** Added command   3 - inbytes: 8, outbytes: 0, outinterfaces: [&#039;nn::arp::detail::IUpdater&#039;]&lt;br /&gt;
** nn::audio::detail::IAudioRenderer&lt;br /&gt;
*** Added command  12 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command  13 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 26 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Removed command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Removed command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Removed command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Removed command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Changed command 40 - buffers: [26] -&amp;gt; [22] (final state: buffers: [22], inbytes: 0, outbytes: 0)&lt;br /&gt;
*** Added command  41 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  42 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 50000 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Added command 101 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 155 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Added command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 116 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 117 - inbytes: 6, outbytes: 1&lt;br /&gt;
** nn::btm::IBtmDebug&lt;br /&gt;
*** Added command  14 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command  15 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command  17 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::capsrv::sf::IAlbumAccessorService&lt;br /&gt;
*** Added command 110 - buffers: [6, 5], inbytes: 16, outbytes: 8&lt;br /&gt;
** nn::clkrst::IClkrstManager&lt;br /&gt;
*** Added command   6 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::dauth::detail::IService&lt;br /&gt;
*** Added command 1000 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 9000 - buffers: [5, 5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 9010 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Removed command  5 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 216 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Added command 1022 - inbytes: 0, outbytes: 0, outinterfaces: [&#039;nn::es::IActiveRightsContext&#039;]&lt;br /&gt;
** nn::fssrv::sf::IFileSystem&lt;br /&gt;
*** Added command  16 - inbytes: 0, outbytes: 192&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 207 - inbytes: 16, outbytes: 0, outinterfaces: [&#039;nn::fssrv::sf::IFileSystem&#039;]&lt;br /&gt;
*** Added command 1400 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IGrcService&lt;br /&gt;
*** Changed command  1 - inbytes: 72 -&amp;gt; 32 (final state: inbytes: 32, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::grcsrv::IContinuousRecorder&#039;])&lt;br /&gt;
** nn::hid::IHidDebugServer&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 0, pid: True&lt;br /&gt;
** nn::hid::IHidServer&lt;br /&gt;
*** Added command 3000 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3001 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3002 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3003 - inbytes: 0, outbytes: 56&lt;br /&gt;
*** Added command 3004 - inbytes: 56, outbytes: 0&lt;br /&gt;
*** Added command 3005 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 3006 - buffers: [26], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3007 - buffers: [25], inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3008 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Added command 3009 - inbytes: 4, outbytes: 64&lt;br /&gt;
*** Added command 3010 - inbytes: 68, outbytes: 0&lt;br /&gt;
*** Added command 3011 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command  32 - inbytes: 48, outbytes: 0, pid: True&lt;br /&gt;
*** Added command  33 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 1135 - inbytes: 8, outbytes: 0, pid: True&lt;br /&gt;
** nn::lr::IAddOnContentLocationResolver&lt;br /&gt;
*** Added command   5 - buffers: [22, 22], inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command   6 - buffers: [21], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command   7 - buffers: [21, 21], inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolver&lt;br /&gt;
*** Added command  20 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::lr::ILocationResolverManager&lt;br /&gt;
*** Added command   4 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Added command 300 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::ncm::IContentMetaDatabase&lt;br /&gt;
*** Added command  23 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command  24 - inbytes: 24, outbytes: 24&lt;br /&gt;
*** Added command  25 - inbytes: 24, outbytes: 24&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Changed command  3 - inbytes: 8 -&amp;gt; 24 (final state: buffers: [5], inbytes: 24, outbytes: 0)&lt;br /&gt;
*** Added command  40 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command  42 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  43 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command  44 - buffers: [6], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Removed command 91 - buffers: [5], inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 138 - buffers: [5], inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 139 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 141 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Added command 102 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 103 - inbytes: 0, outbytes: 32&lt;br /&gt;
*** Added command 104 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 105 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 106 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Added command 501 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command  90 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Changed command 607 - inbytes: 16 -&amp;gt; 8 (final state: buffers: [6], inbytes: 8, outbytes: 4)&lt;br /&gt;
*** Added command 909 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 2357 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2358 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 2359 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 2516 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::pdm::detail::IQueryService&lt;br /&gt;
*** Removed command  7 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 13 - buffers: [6, 5], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 14 - buffers: [6], inbytes: 24, outbytes: 4&lt;br /&gt;
*** Removed command 15 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 16 - buffers: [6, 5], inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::prepo::detail::ipc::IPrepoService&lt;br /&gt;
*** Added command 10500 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::prepo::detail::ipc::IAsyncContext&#039;], pid: True&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 119 - inbytes: 1, outbytes: 3&lt;br /&gt;
** nn::srepo::detail::ipc::ISrepoService&lt;br /&gt;
*** Added command 10300 - buffers: [9], inbytes: 40, inhandles: [1], outbytes: 0, outinterfaces: [&#039;nn::srepo::detail::ipc::IAsyncContext&#039;]&lt;br /&gt;
*** Added command 20600 - inbytes: 20, outbytes: 0&lt;br /&gt;
** nn::usb::ds::IDsEndpoint&lt;br /&gt;
*** Removed command  8 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
*** Removed command  9 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::usb::ds::IDsInterface&lt;br /&gt;
*** Added command  12 - inbytes: 8, inhandles: [1], outbytes: 0&lt;br /&gt;
** nn::visrv::sf::IManagerDisplayService&lt;br /&gt;
*** Changed command 8293 - inbytes: 16 -&amp;gt; 40 (final state: buffers: [6], inbytes: 40, outbytes: 8)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-10-11_00-15-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=11839</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=11839"/>
		<updated>2022-08-18T17:54:33Z</updated>

		<summary type="html">&lt;p&gt;SciresM: update SystemResourceSize description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#META|META]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| [[#ACID|ACID]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| [[#ACI0|ACI0]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;META&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] SignatureKeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#Flags|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#MainThreadPriority|MainThreadPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| MainThreadCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [3.0.0+] [[#SystemResourceSize|SystemResourceSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Version|Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MainThreadStackSize|MainThreadStackSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x10&lt;br /&gt;
| Name (usually/always &amp;quot;Application&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x10&lt;br /&gt;
| ProductCode (usually/always all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0|AciSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID|AcidSize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Is64BitInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1-3&lt;br /&gt;
| ProcessAddressSpace (0x00 = AddressSpace32Bit, 0x01 = AddressSpace64BitOld, 0x02 = AddressSpace32BitNoReserved, 0x03 = AddressSpace64Bit)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| [7.0.0+] OptimizeMemoryAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [11.0.0+] DisableDeviceAddressSpaceMerge&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MainThreadPriority ==&lt;br /&gt;
Ranges from 0 to 0x3F.&lt;br /&gt;
&lt;br /&gt;
== SystemResourceSize ==&lt;br /&gt;
When this is non-zero, the kernel reserves this amount of memory and dynamically uses it as needed for page table pages, KMemoryBlocks, and KBlockInfos. When this is zero, the process uses global shared heaps for these.&lt;br /&gt;
&lt;br /&gt;
This enables a process to sacrifice some of the memory available to it in order to have higher limits on these resources, thus enabling the use of SvcMapPhysicalMemory.&lt;br /&gt;
&lt;br /&gt;
Maximum size as is 0x1FE00000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Version ==&lt;br /&gt;
0 for all titles.&lt;br /&gt;
&lt;br /&gt;
[8.1.0+] Now set to 1 for certain titles.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now set to a proper version field for all titles.&lt;br /&gt;
&lt;br /&gt;
== MainThreadStackSize ==&lt;br /&gt;
Must be aligned to 0x1000. If zero, kernel will start the process&#039;s initial thread with sp=0.&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature over the data starting at 0x100 with the size field from 0x204&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key for the second [[NCA_Format|NCA]] signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| 0x1&lt;br /&gt;
| [14.0.0+] &lt;br /&gt;
|-&lt;br /&gt;
| 0x20A&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Flags_2|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ProductionFlag&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| UnqualifiedApproval&lt;br /&gt;
|-&lt;br /&gt;
| 2-5&lt;br /&gt;
| [5.0.0+] MemoryRegion (0 = Application, 1 = Applet, 2 = SecureSystem, 3 = NonSecureSystem)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegion is set to Application for &amp;quot;starter&amp;quot; and NonSecureSystem for &amp;quot;nvservices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic (&amp;quot;ACI0&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| ProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FsAccessControl|FacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SrvAccessControl|SacSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#KernelCapability|KcSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FsAccessControl =&lt;br /&gt;
For [[#ACID|ACID]] this is a simple descriptor as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContentOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x8&lt;br /&gt;
| SaveDataOwnerIdMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| [5.0.0+] ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| [5.0.0+] SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For [[#ACI0|ACI0]] this embeds data as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version (always 1, must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#FsAccessFlag|FsAccessFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| ContentOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerInfoSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| (Optional) ContentOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x8 * ContentOwnerIdCount&lt;br /&gt;
| ContentOwnerIds&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x4&lt;br /&gt;
| SaveDataOwnerIdCount&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| 0x1 * SaveDataOwnerIdCount&lt;br /&gt;
| Accessibilities (1=Read, 2=Write, 3=ReadWrite)&lt;br /&gt;
|-&lt;br /&gt;
| Variable (padded to nearest 4 bytes)&lt;br /&gt;
| 0x8 * SaveDataOwnerIdCount&lt;br /&gt;
| SaveDataOwnerIds&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FsAccessFlag ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| ApplicationInfo&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| BootModeControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Calibration&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| GameCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| SaveDataBackUp&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| SaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| BisAllRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| GameCardRaw&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| GameCardPrivate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| SetTime&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| ContentManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| ImageManager&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| CreateSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| SystemSaveDataManagement&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| BisFileSystem&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| SaveDataMeta&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| DeviceSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| SettingsControl&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| SystemData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| SdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Host&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FillBis&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| CorruptSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SaveDataForDebug&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| FormatSdCard&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| GetRightsId&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| RegisterExternalKey&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| RegisterUpdatePartition&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| SaveDataTransfer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| DeviceDetection&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| AccessFailureResolution&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| SaveDataTransferVersion2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| RegisterProgramIndexMapInfo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| CreateOwnSaveData&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| MoveCacheStorage&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 37-61&lt;br /&gt;
| Reserved&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| Debug&lt;br /&gt;
| See [[SPL_services#GetConfig|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| FullPermission&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the [[Filesystem_services#Permissions|filesystem permissions]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Size (length of the service-name without null-terminator minus 1)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| IsServer (service is allowed to be registered)&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| Name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to.&lt;br /&gt;
&lt;br /&gt;
The service name string starts after the first byte and supports the wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= KernelCapability =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| [[#ThreadInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| [[#EnableSystemCalls]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| [[#MemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| [[#IoMemoryMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxx01111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit10&lt;br /&gt;
| [8.0.0+] [[#MemoryRegionMap]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| [[#EnableInterrupts]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| [[#MiscParams]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| [[#KernelVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| [[#HandleTableSize]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| [[#MiscFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
== ThreadInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4-9&lt;br /&gt;
| LowestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 10-15&lt;br /&gt;
| HighestPriority&lt;br /&gt;
|-&lt;br /&gt;
| 16-23&lt;br /&gt;
| MinCoreNumber&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| MaxCoreNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableSystemCalls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 5-28&lt;br /&gt;
| SystemCallId&lt;br /&gt;
|-&lt;br /&gt;
| 29-31&lt;br /&gt;
| Index&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryMap ==&lt;br /&gt;
MemoryMap entries are stored in pairs. The first pair will contain BeginAddress and PermissionType, while the second pair will contain Size and MappingType.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-30&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| PermissionType (0=RW, 1=RO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-26&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 27-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| MappingType (0=Io, 1=Static)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Restrictions ===&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0-4.1.0] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] For IO, this blacklist was abandoned and instead two range checks were added. For Normal mappings it is still applied&lt;br /&gt;
&lt;br /&gt;
== IoMemoryMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-31&lt;br /&gt;
| BeginAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryRegionMap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 11-16&lt;br /&gt;
| RegionType0 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RegionIsReadOnly0&lt;br /&gt;
|-&lt;br /&gt;
| 18-23&lt;br /&gt;
| RegionType1 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| RegionIsReadOnly1&lt;br /&gt;
|-&lt;br /&gt;
| 25-30&lt;br /&gt;
| RegionType2 (0 = NoMapping, 1 = KernelTraceBuffer, 2 = OnMemoryBootImage, 3 = DTB)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| RegionIsReadOnly2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MemoryRegionMap is supported by the kernel but not by [[Loader_services|Loader]]. Thus, only initial processes may possess this capability.&lt;br /&gt;
&lt;br /&gt;
== EnableInterrupts ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 12-21&lt;br /&gt;
| InterruptNumber0&lt;br /&gt;
|-&lt;br /&gt;
| 22-31&lt;br /&gt;
| InterruptNumber1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
0x3FF means empty.&lt;br /&gt;
&lt;br /&gt;
== MiscParams ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 14-16&lt;br /&gt;
| ProgramType (0 = System, 1 = Application, 2 = Applet)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ProgramType is parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
&lt;br /&gt;
== KernelVersion ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 15-18&lt;br /&gt;
| MinorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 19-31&lt;br /&gt;
| MajorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This encodes the intended kernel version for the program.&lt;br /&gt;
&lt;br /&gt;
The kernel requires that the intended version is &amp;gt;= the minimum supported version (3.0 for all released kernels), and &amp;lt;= the current version.&lt;br /&gt;
&lt;br /&gt;
Kernel version is derived from/equivalent to SDK version:&lt;br /&gt;
* Kernel Major = SDK Major + 4&lt;br /&gt;
* Kernel Minor = SDK Minor&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Corresponding SDK Version&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0 || 1.0.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1 || 2.1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4 || 3.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0 || 9.3 || 5.3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 10.0.0 || 14.4 || 10.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.0 || 15.4 || 11.4.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 11.0.1 || 15.4 || 11.4.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandleTableSize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 16-25&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MiscFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| ForceDebug&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=14.1.2&amp;diff=11777</id>
		<title>14.1.2</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=14.1.2&amp;diff=11777"/>
		<updated>2022-06-28T08:16:35Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 14.1.2 system update was released on June 14, 2022 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Additionally, a rebootless system update was released updating NgWord/NgWord2 for 14.1.2 on June 28, 2022 (UTC). &lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
The following was updated (besides sysver titles): [[Bus_services|Bus]], [[BTM_services|btm]], NgWord/NgWord2, BootImagePackages.&lt;br /&gt;
&lt;br /&gt;
There was no IPC or NPDM changes (besides version bump).&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* NgWord/NgWord2: updated&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
Only package2 was updated.&lt;br /&gt;
&lt;br /&gt;
For non-safe mode, there are no changes to any binaries (kernel or any initial processes). For safe mode, only Bus sysmodule was updated.&lt;br /&gt;
&lt;br /&gt;
=== [[Bus_services|Bus]] ===&lt;br /&gt;
Only 2 functions were changed, which now properly allow UART-D to be configured for baud rate 3000000.&lt;br /&gt;
&lt;br /&gt;
=== [[BTM_services|btm]] ===&lt;br /&gt;
These changes seem to be minor?&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-06-14_00-05-05&amp;amp;sys=hac]&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-06-28_00-01-36&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=14.1.2&amp;diff=11765</id>
		<title>14.1.2</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=14.1.2&amp;diff=11765"/>
		<updated>2022-06-14T06:00:46Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* BootImagePackages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 14.1.2 system update was released on June 14, 2022 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
The following was updated (besides sysver titles): [[Bus_services|Bus]], [[BTM_services|btm]], NgWord/NgWord2, BootImagePackages.&lt;br /&gt;
&lt;br /&gt;
There was no IPC or NPDM changes (besides version bump).&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* NgWord/NgWord2: updated&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackages ===&lt;br /&gt;
Only package2 was updated.&lt;br /&gt;
&lt;br /&gt;
For non-safe mode, there are no changes to any binaries (kernel or any initial processes). For safe mode, only Bus sysmodule was updated.&lt;br /&gt;
&lt;br /&gt;
=== [[BTM_services|btm]] ===&lt;br /&gt;
These changes seem to be minor?&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-06-14_00-05-05&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fatal_services&amp;diff=11665</id>
		<title>Fatal services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fatal_services&amp;diff=11665"/>
		<updated>2022-04-18T04:06:21Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* fatal:p */ official command name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= fatal:u =&lt;br /&gt;
This is &amp;quot;nn::fatalsrv::IService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ThrowFatal&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ThrowFatalWithPolicy&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ThrowFatalWithCpuContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ThrowFatalWithCpuContext ==&lt;br /&gt;
Takes an input u64 errorcode and an unknown u64(TID maybe?). It also takes a type-0x15 error buffer and a pid-descriptor. The error buffer contains a stack trace. &lt;br /&gt;
The stack trace address count is stored at errorbuffer+0x240 and the addresses are stored at errorbuffer+0x130+i*8 where i = 0-&amp;gt;address count&lt;br /&gt;
&lt;br /&gt;
= fatal:p =&lt;br /&gt;
This is &amp;quot;nn::fatalsrv::IPrivateService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetFatalEvent&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [14.0.0+]  GetFatalContext&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FatalType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ErrorReportAndErrorScreen&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ErrorReport&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [3.0.0+] ErrorScreen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=11585</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=11585"/>
		<updated>2022-03-22T16:45:46Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Data payload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), not observed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of [[#Raw data section|raw data]] in u32s.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || Empty.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Ipc (flag=0): Device mapping *not* allowed for src or dst.&lt;br /&gt;
* NonSecureIpc (flag=1): Device mapping allowed for src and dst.&lt;br /&gt;
* NonDeviceIpc (flag=3): Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
Buffer descriptors C/X are somewhat different. Rather than mapping new memory into the server process, C/X descriptors copy data between existing buffers in different processes. Each X descriptor in a message has its data copied into a C descriptor on the other side. Each C descriptor in a message is used to reserve space for the other side&#039;s X descriptors to copy into.&lt;br /&gt;
&lt;br /&gt;
When the kernel processes X descriptors, it must determine where to copy the data to. If the destination used C descriptors with flags &amp;gt;= 3, each X descriptor from the source is matched to a C descriptor in the destination by the X descriptor&#039;s index field. If the destination used a &amp;quot;single&amp;quot; C descriptor, the data from all the X descriptors is copied into the same buffer specified by the destination&#039;s C descriptor (causing error 0xce01 if there is not enough space) and the X descriptor index is ignored. The kernel then modifies the addresses in the X descriptors to indicate where the data was copied to in the destination.&lt;br /&gt;
&lt;br /&gt;
Before receiving a request, if the IPC server is expecting X descriptors, it prepares a message with a &amp;quot;single&amp;quot; C descriptor (flags=2) in its message buffer before calling svcReplyAndReceive so that X descriptors from the client have a place to copy their data to.  The usage of the flag-2 C descriptor allows the server to receive an arbitrary number of X descriptors, since they&#039;re all packed into the same buffer. If the server had used flag-3+ C descriptors, it would be limited in how many X descriptors it could receive since the X descriptors would have to be matched to distinct C descriptors. The buffer that the server&#039;s C descriptor points to is called the &#039;&#039;&#039;pointer buffer&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When the client sends X descriptors, data is copied into the server&#039;s pointer buffer. When the client sends C descriptors, no data is copied automatically. The server needs to use X descriptors to copy the data back to the client&#039;s C descriptors (using the index field to match X descriptors in the response back to the correct C descriptors).&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domains ===&lt;br /&gt;
Because the switch has relatively low limits on the total number of sessions available to the system (Kernel slabheap limits, sysmodule handle table size limits), HIPC supports a &amp;quot;Domains&amp;quot; feature that allows multiplexing multiple service sessions through a single handle. Domains store (effectively) a mapping from u32 object id to a SharedPointer&amp;lt;IServiceObject&amp;gt; -- When messages are sent to a domain, an extra header is sent in the raw data section (before anything else) with information about what object in the domain is being acted on; responses similarly contain an additional header. Official session code implements this by just using the dispatch table for the object in the map with the appropriate ID, instead of the dispatch table the session was initialized with.&lt;br /&gt;
&lt;br /&gt;
Format for the extra request header for domain message:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [1.0.0-4.1.0] Padding [5.0.0+] Token (for NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format for the extra response header for domain message:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-0 || Output object count&lt;br /&gt;
|-&lt;br /&gt;
| 1-3 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
Input Header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI) as u32.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Version as u32. 1 for NewRequest, 0 for Request.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u32&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [1.0.0-4.1.0] Padding [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Version was incremented from 0 to 1, and a token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Output Header:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCO&amp;quot;) as u32.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Version as u32. Always 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[Error_codes|Result]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [1.0.0-13.2.1] Padding [14.0.0+] Interface ID&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[14.0.0+] Padding field at +12 is now interface ID, generated as little endian first four bytes of sha256(&amp;lt;fully qualified interface name&amp;gt;). The version field was not incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The rawdata struct for input parameters/return values is generated by stable-sorting function parameters by alignment, from low to high. It is likely this is a mistake, as it generates structs with suboptimal possible padding -- Nintendo probably meant to sort from high to low (which would give minimized padding), but couldn&#039;t/can&#039;t change this without breaking backwards compatibility.&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function is called &amp;quot;nn::sf::hipc::client::Hipc2ClientCoreProcessorImpl::WriteBufferDataImpl&amp;quot; and takes:&lt;br /&gt;
* A pointer to a &amp;quot;nn::sf::hipc::detail::HipcMessageWriter&amp;quot; context;&lt;br /&gt;
* The number of (buf_ptr, size) pairs;&lt;br /&gt;
* An array of (buf_ptr, size) pairs (called &amp;quot;nn::sf::detail::PointerAndSize&amp;quot;);&lt;br /&gt;
* A pointer to a type bitfield for each such pair;&lt;br /&gt;
* The offset of the main IPC command structure;&lt;br /&gt;
* The size of the IPC command&#039;s [[IPC_Marshalling#Raw_data_section|raw data]].&lt;br /&gt;
&lt;br /&gt;
The type of an IPC command is described by a bitfield as below:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Bits || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || In || Direction is input.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Out || Direction is output.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HipcMapAlias || Use buffer descriptors A (&amp;quot;Send&amp;quot;), B (&amp;quot;Receive&amp;quot;) or W (&amp;quot;Exchange&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HipcPointer || Use buffer descriptors X (&amp;quot;Pointer&amp;quot;) or C (&amp;quot;ReceiveList&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FixedSize || Skip saving the pointer buffer size in raw data.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || HipcAutoSelect || Select which buffer descriptor to use automatically.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || HipcMapTransferAllowsNonSecure || Use [[#Flags|NonSecureIpc flag]].&lt;br /&gt;
|-&lt;br /&gt;
| 7 || HipcMapTransferAllowsNonDevice || Use [[#Flags|NonDeviceIpc flag]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
X and C (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer), which ensures all type 8 buffers get pointer-buffer space before any type 0x20. The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type is [[IPC_Marshalling#Request.2C_Control|Control]], you are talking to the IPC manager. These are processed by the sysmodule.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=14.0.0&amp;diff=11573</id>
		<title>14.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=14.0.0&amp;diff=11573"/>
		<updated>2022-03-22T16:13:29Z</updated>

		<summary type="html">&lt;p&gt;SciresM: /* Kernel */ fix for clarity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 14.0.0 system update was released on March 22, 2022 (UTC). This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: &amp;lt;fill this in manually later, see the updatedetails page from the ninupdates-report page(s) once available for now&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/kw/nintendo%20switch%20system%20update Official] ALL change-log:&lt;br /&gt;
* &amp;quot;Groups&amp;quot; feature was added to the All Software menu.&lt;br /&gt;
*   &lt;br /&gt;
* 	You can now create groups of software to help organize your software titles.&lt;br /&gt;
*     Making groups for different game genres, developers, or whatever you’d like to organize by may make it easier to find the application you want.&lt;br /&gt;
*     	&lt;br /&gt;
*           Up to 100 groups can be created with a max of 200 titles per group.&lt;br /&gt;
*       &lt;br /&gt;
*     &lt;br /&gt;
*     The button to proceed to the &amp;quot;All Software&amp;quot; screen is displayed only when there are 13 or more software title icons on the system.&lt;br /&gt;
*     For more information, see How to Create Groups of Software. &lt;br /&gt;
*   &lt;br /&gt;
* Bluetooth® Audio volume behavior was changed.&lt;br /&gt;
* 	&lt;br /&gt;
*   		You can now adjust the volume of Bluetooth audio devices using either the Nintendo Switch™ console or through volume control buttons on the Bluetooth audio device. &lt;br /&gt;
*       		&lt;br /&gt;
*               The Bluetooth audio device must support AVRCP profiles for these changes to work.&lt;br /&gt;
*           &lt;br /&gt;
*       	&lt;br /&gt;
*       The volume displayed on the console will reflect the Bluetooth audio volume when using the device’s control buttons.&lt;br /&gt;
*       The maximum volume output for some Bluetooth audio devices has been increased.&lt;br /&gt;
*       	&lt;br /&gt;
*           When first connecting a device, volume will be reduced to avoid sudden loudness.&lt;br /&gt;
*           For more information, see How to Pair and Manage Bluetooth Audio Devices. &lt;br /&gt;
*         &lt;br /&gt;
*       &lt;br /&gt;
* 	  &lt;br /&gt;
*   &lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* New sysmodule omm was added, various hosted services from am were moved here.&lt;br /&gt;
* Most system titles were updated, except for the following (besides stubs): both Dictionary SystemData, AvatarImage, Eula, UrlBlackList, ControllerIcon, ApplicationBlackList, FunctionBlackList.&lt;br /&gt;
&lt;br /&gt;
[[NPDM]] changes:&lt;br /&gt;
* ptm had the order of various accessible-services changed.&lt;br /&gt;
* pcv: access to IO page 0x07009f000 was removed. The order of various hosted/accessible-services changed. Access to fsp-srv, pwm, and set:cal were removed.&lt;br /&gt;
* ns now has access to pm:info.&lt;br /&gt;
* am: access to svcSleepSystem was removed. FS permission bitmask 0x0000000080000000 was removed. Hosted services idle:sys, omm, and spsm were removed. Access to the following services were removed: bgtc:sc, bgtc:t, bpc, cec-mgr, gpio, hshl:set, hshl:sys, led, psc:c, psc:m, psm, tc, time:p, usb:hs, usb:pd, usb:pd:c, vi:m/vi:s, xcd:sys. Access to the following services were added: idle:sys, ommdisp, spsm.&lt;br /&gt;
* qlaunch had access to nd:sys removed.&lt;br /&gt;
* cabinet had a duplicate service-access entry for set:sys removed.&lt;br /&gt;
* playerSelect had a duplicate service-access entry for acc:su removed.&lt;br /&gt;
* starter now has access to audctl.&lt;br /&gt;
&lt;br /&gt;
RomFs changes:&lt;br /&gt;
* ErrorMessage: various errors added / localization updated.&lt;br /&gt;
* BrowserDll:&lt;br /&gt;
** &amp;quot;/browser/ErrorPageFilteringTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageSubFrameTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/ErrorPageTemplate.html&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.css&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/MediaControlsInline.js&amp;quot; updated&lt;br /&gt;
** &amp;quot;/browser/RootCaEtc.pem&amp;quot; and &amp;quot;/browser/RootCaSdkAdditional.pem&amp;quot; updated&lt;br /&gt;
** &amp;quot;/buildinfo/buildinfo.dat&amp;quot; updated&lt;br /&gt;
** &amp;quot;/lyt/Dialog/DAuthentication.arc&amp;quot; updated&lt;br /&gt;
** Various localization data under &amp;quot;/message/&amp;quot; was updated.&lt;br /&gt;
** The NROs under &amp;quot;/nro/netfront/core_0/&amp;quot; were moved to &amp;quot;/nro/netfront/core_0/default/cfi_disabled&amp;quot;.&lt;br /&gt;
** The NROs under &amp;quot;/nro/netfront/core_1/&amp;quot; were moved to &amp;quot;/nro/netfront/core_2/default/cfi_enabled&amp;quot; (the core_1 directory was removed).&lt;br /&gt;
** &amp;quot;/sound/&amp;quot; was added, which contains &amp;quot;cruiser.bfsar&amp;quot;.&lt;br /&gt;
* Help: &amp;quot;/legallines.htdocs/index.html&amp;quot; updated&lt;br /&gt;
* LocalNews: &amp;quot;/message/revision.txt&amp;quot; updated&lt;br /&gt;
* FirmwareDebugSettings/PlatformConfigIcosa/PlatformConfigCopper/PlatformConfigHoag/PlatformConfigIcosaMariko/PlatformConfigAula: [[System_Settings|updated]]&lt;br /&gt;
* ControllerFirmware:&lt;br /&gt;
** &amp;quot;/FirmwareInfo.csv&amp;quot; and &amp;quot;/TouchScreenFirmwareInfo.csv&amp;quot; updated&lt;br /&gt;
** &amp;quot;/FTS_50000001.ftb&amp;quot; removed&lt;br /&gt;
** &amp;quot;/FTS_50000002.ftb&amp;quot; added&lt;br /&gt;
** &amp;quot;/ukyosakyo_ep2_ota.bin&amp;quot; updated&lt;br /&gt;
* NgWordT: &amp;quot;/mars_dirty_words_db&amp;quot; updated&lt;br /&gt;
* Various graphics/UI/localization data was updated in various applets.&lt;br /&gt;
* web-applets: &amp;quot;/sound/&amp;quot; was removed, it&#039;s now located in BrowserDll. &amp;quot;/buildinfo/buildinfo.dat&amp;quot; and &amp;quot;/.nrr/modules.nrr&amp;quot; were updated.&lt;br /&gt;
&lt;br /&gt;
=== BootImagePackage ===&lt;br /&gt;
All files in RomFs were updated.&lt;br /&gt;
&lt;br /&gt;
====Secure Monitor====&lt;br /&gt;
* Compiler upgrade to latest llvm (now using same compiler revision as kernel).&lt;br /&gt;
** Secure Monitor is now compiled with -fomit-frame-pointer.&lt;br /&gt;
*** &amp;gt;:(&lt;br /&gt;
* GenerateSeTestVectorImpl now uses a helper to mix each key into the vector.&lt;br /&gt;
* ExceptionHandler is now linked in (@ .text + 0x3E04).&lt;br /&gt;
** Previously, this was garbage collected/only present in debug secure monitors.&lt;br /&gt;
** NOTE: This is unreachable, and stripped (as e.g. logging isn&#039;t emitted, likely because the macros are empty on release builds).&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Kernel is now compiled with -O3 again instead of -Os&lt;br /&gt;
** &amp;gt;:(&lt;br /&gt;
* crt0 no longer supports booting in EL2.&lt;br /&gt;
** Infinite Loop/Panic is performed instead.&lt;br /&gt;
* Initialize0 changes:&lt;br /&gt;
** KernelStack setup now uses same helper to determine aslr as other random aligned regions.&lt;br /&gt;
** KernelTemp setup now uses same helper to determine aslr as other random aligned regions.&lt;br /&gt;
* Slab changes:&lt;br /&gt;
** When assigned extra resource, the slab heap is now 0x148000 larger instead of 0x68000 larger.&lt;br /&gt;
** Correspondingly, instead of increasing the thread resource limit by 160, the thread resource limit is now increased by 736.&lt;br /&gt;
*** This corresponds to changes in userland for pm management of resource limits.&lt;br /&gt;
*** Old Intended Resource Limits:&lt;br /&gt;
**** System (96 + 512) -&amp;gt; (256 + 512)&lt;br /&gt;
**** Applet 96 -&amp;gt; 96&lt;br /&gt;
**** Application 96 -&amp;gt; 96&lt;br /&gt;
*** New Intended Resource Limits:&lt;br /&gt;
**** System (96 + 512) -&amp;gt; 1024&lt;br /&gt;
**** Applet 96 -&amp;gt; 256&lt;br /&gt;
**** Application 96 -&amp;gt; 256&lt;br /&gt;
* SetupPoolPartitionMemoryRegions now panics if the end of the pool partition region is not coincidence with the end of dram.&lt;br /&gt;
* KThreadContext was completely revised.&lt;br /&gt;
** Most of KThreadContext is now stored inline in kernel stack.&lt;br /&gt;
*** Kernel stack layout is now u8 stack[0xDB0]; KThreadContext thread_context; KThreadStackParameters stack_parameters;&lt;br /&gt;
** KThreadContext now only stores the 8 callee-save FPU registers.&lt;br /&gt;
*** The remaining 24 caller-save FPU registers are stored inside KThread, where KThreadContext used to be.&lt;br /&gt;
*** NOTE that 32-bit fpu has 4 callee-save FPU registers and 12 caller-save registers, which use the start of the relevant 64-bit storages as usual.&lt;br /&gt;
** KThreadStackParameters was revised to facilitate this.&lt;br /&gt;
*** The pointer to KThreadContext previously stored in stack parameters now points to the external FPU register array.&lt;br /&gt;
*** The members at end of params are now: u16 disable_count; u8 current_svc_id; u8 unused_2c; u8 exception_flags; u8 is_pinned; u8 unused_2f;&lt;br /&gt;
**** The &amp;quot;exception_flags&amp;quot; field is a new set of bitflags (encoding old state was were previously separate bools + new state).&lt;br /&gt;
***** Bit 0x1  = is_calling_svc&lt;br /&gt;
***** Bit 0x2  = is_in_exception_handler&lt;br /&gt;
***** Bit 0x4  = is_fpu_state_restore_needed&lt;br /&gt;
***** Bit 0x8  = is_64_bit_fpu&lt;br /&gt;
***** Bit 0x10 = has_exception_svc_permissions&lt;br /&gt;
***** Bit 0x20 = is_in_cache_operation&lt;br /&gt;
***** Bit 0x40 = is_in_tlb_operation&lt;br /&gt;
** Exception exits now check is_fpu_state_restore_needed, and restore FPU registers only if needed (and clear is_fpu_state_restore_needed on restore).&lt;br /&gt;
*** is_fpu_state_restore_needed is set to true *only* on thread switch with FPU enabled.&lt;br /&gt;
**** Caller-save FPU registers are saved *only* if a thread is in an SVC and does not have exception svc permissions.&lt;br /&gt;
**** All other thread switches save only the 8 (or 4) callee-save FPU registers.&lt;br /&gt;
**** All thread switches now guarantee as post-condition that the fpu is disabled leaving the switch (it will be re-enabled on exception exit if needed).&lt;br /&gt;
*** On SVC exception return, all caller-save FPU registers are set to zero unless the thread has exception svc permissions.&lt;br /&gt;
** KThread::CloneFpuStatus now uses KScopedDisableInterrupt&lt;br /&gt;
* Various hw maintenance changes:&lt;br /&gt;
** KernelLdr no longer does cache maintenance by set/way when setting up initial identity mapping, no longer invalidates instruction cache/tlb, no longer does dsb after setting sctlr_el1.&lt;br /&gt;
** FlushEntireDataCacheLocal/Shared in init now perform dsb sy, FlushEntireDataCacheAndInvalidateTlbForInit no longer does after calling them.&lt;br /&gt;
** dsb sy/isb is now performed after setting sctlr_el1, when disabling mmu/icache.&lt;br /&gt;
** KInitialPageTable::Map no longer does dsb ish after all attribute writes.&lt;br /&gt;
*** Instead does it before writing table entries, and at the end of the function.&lt;br /&gt;
** KInitialPageTable::PhysicallyRandomize no longer does StoreEntireCacheForInit.&lt;br /&gt;
*** Now does dc cvac on randomized virtual address range, dsb ish, ic iallu, dsb ish, isb. (see weaker-barriers section of diff)&lt;br /&gt;
** KInitialPageTable::SwapBlocks now does dsb ish after memcpy to swap blocks.&lt;br /&gt;
** KInitialPageTable::Reprotect no longer does dsb ish before performing reprotection.&lt;br /&gt;
** KInitialProcessReader::Load no longer calls cpu::FlushEntireDataCache/cpu::InvalidateInstructionCache.&lt;br /&gt;
** Set/way cache operations now perform dsb sy before configuring csselr.&lt;br /&gt;
*** This affects InvalidateDataCacheForResumeEntry, FlushEntireDataCache, KCacheHelperInterruptHandler, and the initial cache maintenance when disabling the mmu.&lt;br /&gt;
** FlushEntireDataCache now does dsb sy after doing full set/way cache flush, instead of after each set/way op.&lt;br /&gt;
*** NOTE: This is still only a local flush without coherence guarantees, set/way aren&#039;t supposed to be used after multiple cores are online.&lt;br /&gt;
** KSystemControl::CpuSleepHandler no longer embeds unreachable cache maintenance assembly after CpuSuspend.&lt;br /&gt;
** Kernel now performs different hw maintenance if a thread is in a hw maintenance operation when interrupted:&lt;br /&gt;
*** If a thread is interrupted while performing cache maintenance in EL1 (tracked via new exception flags bit 0x20), KInterruptManager::OnHandleInterrupt performs dsb sy.&lt;br /&gt;
**** Set and cleared for scope of cpu::InvalidateDataCache instead of disabling core migration.&lt;br /&gt;
**** Set and cleared for scope of cpu::StoreDataCache instead of disabling core migration.&lt;br /&gt;
**** Set and cleared for scope of cpu::FlushDataCache instead of disabling core migration.&lt;br /&gt;
*** If a thread is interrupted while performing tlb maintenance in EL1 (tracked via new exception flags bit 0x40), KInterruptManager::OnHandleInterrupt performs dsb ish.&lt;br /&gt;
**** Set and cleared for scope of KPageTable::NoteUpdated&lt;br /&gt;
*** If a thread is interrupted while performing cache maintenance in EL0 (tracked via new bool @ TLS + 0x104), KInterruptManager::OnHandleInterrupt performs dsb sy.&lt;br /&gt;
**** This is equivalent to the EL1 cache maintenance tracking above, providing an opt-in way for userland to ensure its cache maintenance is coherent even when interrupted.&lt;br /&gt;
**** Note that official userland code now sets this bit before performing cache maintenance.&lt;br /&gt;
** Memory barriers were revised in many places -- barriers were weakened in many places, and some functions which previously lacked barriers had them added, including:&lt;br /&gt;
*** cpu::InvalidateEntireInstructionCache: dsb sy -&amp;gt; dsb ish&lt;br /&gt;
*** cpu::EnsureInstructionConsistency: dsb sy; isb; -&amp;gt; dsb ish; isb;&lt;br /&gt;
**** NOTE: Functions written in assembly still use the old pattern for ensuring instruction consistency.&lt;br /&gt;
*** KCacheInterruptHandler::RequestOperation: dsb sy -&amp;gt; dsb ish&lt;br /&gt;
*** KScheduler::EnableScheduling: dsb sy -&amp;gt; dsb ish&lt;br /&gt;
*** KScheduler::SwitchThread no longer does dsb sy before setting ttbr0/contextidr_el1.&lt;br /&gt;
*** KPageTable::NoteUpdated: dsb sy; if (m_kernel) { ... dsb sy; } else { ... dsb sy; isb; } -- dsb ishst; if (m_kernel) { ... dsb ish; } else { ... dsb ish; isb; }&lt;br /&gt;
**** KPageTable::NoteSingleKernelPageUpdated now similarly does dsb ishst for outer and dsb ish for inner barriers.&lt;br /&gt;
*** KPageTable::ClearPageTable: now does dsb ish after clearing page to zero via dc zva&lt;br /&gt;
*** KPageTable::MapContiguous: now does dsb ishst after merging pages.&lt;br /&gt;
*** KPageTable::MapPageGroup: now does dsb ishst after merging pages.&lt;br /&gt;
*** KPageTable::PteDataSynchronizationBarrier: now dmb ishst instead of dsb ish (probably KPageTable::PteDataMemoryBarrier, now?)&lt;br /&gt;
*** KPageTable::MapL2Blocks/MapL3Blocks: pattern for setting entry for new table went from Barrier(); WriteEntry(); Barrier(); -&amp;gt; Barrier(); WriteEntry();&lt;br /&gt;
**** This was PteDataSynchronizationBarrier(), and correspondingly asm is dsb ish; str; dsb ish; -&amp;gt; dmb ishst; str;&lt;br /&gt;
*** KSupervisorPageTable::SetTtbr0 no longer does dsb sy before setting ttbr0/contextidr_el1.&lt;br /&gt;
** UserspaceAccess::InvalidateInstructionCache was removed (previously unused).&lt;br /&gt;
* Various changes to KInterruptName/interrupt management:&lt;br /&gt;
** Enum values for IPIs were revised:&lt;br /&gt;
*** KInterruptName_ThreadTerminate    4 -&amp;gt; 0&lt;br /&gt;
*** KInterruptName_CacheOperation     5 -&amp;gt; 1&lt;br /&gt;
*** KInterruptName_Scheduler          6 -&amp;gt; 2&lt;br /&gt;
** New KInterruptName (KInterruptName_CoreBarrier) = 3&lt;br /&gt;
*** Interrupt handler for this is registered with KInterruptControllerPriority_Scheduler after ThreadTerminate handler is registered.&lt;br /&gt;
** Interrupt handler for the user cycle counter interrupt is no longer registered.&lt;br /&gt;
*** This is presumably now under the same ifdef that enables svc::InfoType_PerformanceCounter.&lt;br /&gt;
* KCapability now has a new member &amp;quot;physical_core_mask&amp;quot;, which tracks what physical cores are allowable.&lt;br /&gt;
** KThread::FinishTermination now calls a new function (cpu::ForceSynchronizeAllCores) after waiting for the thread to not be current on any scheduler.&lt;br /&gt;
*** This function sends an IPI (KInterruptName_CoreBarrier) to all cores in a specified mask (other than the current one), and waits for them to acknowledge the interrupt.&lt;br /&gt;
* Changes to KMemoryManager allocation:&lt;br /&gt;
** KPageHeap now has an additional KPageHeapBitmapRng @ 0x328 to facilitate additional allocation randomization.&lt;br /&gt;
** KMemoryManager::AllocateAndOpenContinuous now uses a new KPageHeap method &amp;quot;AllocateRandomBlock&amp;quot;&lt;br /&gt;
*** KPhysicalAddress KPageHeap::AllocateRandomBlock(s32 index, size_t num_pages, size_t align_pages);&lt;br /&gt;
*** This method allocates `num_pages` pages (aligned to at least `align_pages`) at random.&lt;br /&gt;
**** First, the kernel chooses a random block index to allocate from.&lt;br /&gt;
***** This is done by increasing the block index until there are at least 4 possible random choices for the desired alignment, then selecting the block that corresponds to a random pick from those choices.&lt;br /&gt;
**** Next, the kernel allocates a random block from within that index.&lt;br /&gt;
**** Finally, the kernel selects a random (align_pages)-aligned offset within that block, frees the memory before/after the allocated chunk, and returns the memory.&lt;br /&gt;
** Allocation of KPageGroups still uses a `random` argument, however:&lt;br /&gt;
*** KPageHeap::PopBlock no longer takes a random argument.&lt;br /&gt;
*** KPageHeap::AllocateBlock now calls new new KPageHeap method &amp;quot;AllocateRandomBlock&amp;quot;.&lt;br /&gt;
**** KPageHeap::AllocateRandomBlock(s32 index, size_t num_pages);&lt;br /&gt;
**** This is effectively the same logic as above, but with align_pages == # of pages for the argument block index.&lt;br /&gt;
* CreateProcess now calls a new function to validate the user-capabilities before creating the KProcess.&lt;br /&gt;
** This checks that the capabilities are user-readable and that the map region capabilities correspond to actually-present regions.&lt;br /&gt;
** This corresponds to changes in Loader allowing for map region capabilities (previously, these were only allowed via KIP, and Loader always rejected them).&lt;br /&gt;
* New InfoType 0x1A (&amp;quot;InfoType_IsSvcPermitted&amp;quot;).&lt;br /&gt;
** Returns whether the current process can access a given SVC.&lt;br /&gt;
** Nintendo returns InvalidCombination when checking SVCs other than SynchronizePreemptionState.&lt;br /&gt;
*** Official userland code now aborts if the process does not have permission to use SynchronizePreemptionState before incrementing ThreadLocalRegion-&amp;gt;disable_count for the first time.&lt;br /&gt;
&lt;br /&gt;
=== IPC Interface Changes ===&lt;br /&gt;
* The following new interfaces were added:&lt;br /&gt;
** nn::sprofile::srv::IServiceGetter&lt;br /&gt;
* The following interfaces were changed:&lt;br /&gt;
** nn::account::detail::IUserStateManager&lt;br /&gt;
*** Added command 900 - inbytes: 24, outbytes: 0&lt;br /&gt;
*** Added command 901 - inbytes: 24, outbytes: 0&lt;br /&gt;
*** Added command 902 - buffers: [10], inbytes: 8, outbytes: 4&lt;br /&gt;
** nn::am::service::IAppletCommonFunctions&lt;br /&gt;
*** Added command 80 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Added command 81 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::am::service::IApplicationFunctions&lt;br /&gt;
*** Added command 36 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 37 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
** nn::am::service::IDebugFunctions&lt;br /&gt;
*** Added command 140 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::am::service::IOverlayFunctions&lt;br /&gt;
*** Added command 21 - inbytes: 1, outbytes: 0&lt;br /&gt;
** nn::audioctrl::detail::IAudioController&lt;br /&gt;
*** Removed command 11 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Removed command 12 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 19 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 20 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 21 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 25 - inbytes: 0, outbytes: 9&lt;br /&gt;
*** Removed command 28 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 29 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 35 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 36 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Added command 37 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Added command 38 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 39 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 40 - buffers: [26], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 10100 - inbytes: 0, outbytes: 9&lt;br /&gt;
*** Added command 10101 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 10102 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 10103 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Added command 10104 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Added command 10105 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 10106 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::bluetooth::IBluetoothDriver&lt;br /&gt;
*** Removed command 144 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Removed command 145 - buffers: [10], inbytes: 0, outbytes: 4&lt;br /&gt;
*** Added command 150 - inbytes: 4, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 151 - inbytes: 4, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 152 - inbytes: 4, outbytes: 1&lt;br /&gt;
*** Added command 153 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 154 - inbytes: 4, outbytes: 1&lt;br /&gt;
** nn::bpc::IBoardPowerControlManager&lt;br /&gt;
*** Removed command 6 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::btm::IBtm&lt;br /&gt;
*** Added command 112 - inbytes: 7, outbytes: 0&lt;br /&gt;
*** Added command 113 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 114 - inbytes: 6, outbytes: 1&lt;br /&gt;
*** Added command 115 - buffers: [10], inbytes: 4, outbytes: 4&lt;br /&gt;
** nn::clkrst::IClkrstSession&lt;br /&gt;
*** Added command 12 - inbytes: 4, outbytes: 1&lt;br /&gt;
*** Added command 13 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::es::IActiveRightsContext&lt;br /&gt;
*** Added command 17 - buffers: [5, 5], inbytes: 1, outbytes: 0&lt;br /&gt;
*** Added command 214 - inbytes: 0, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 215 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::es::IETicketService&lt;br /&gt;
*** Removed command 4 - inbytes: 4, outbytes: 0&lt;br /&gt;
** nn::fatalsrv::IPrivateService&lt;br /&gt;
*** Added command 10 - buffers: [22], inbytes: 0, outbytes: 16&lt;br /&gt;
** nn::fssrv::sf::IFileSystemProxy&lt;br /&gt;
*** Added command 37 - buffers: [25], inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::grcsrv::IRemoteVideoTransfer&lt;br /&gt;
*** Added command 3 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::hid::IHidSystemServer&lt;br /&gt;
*** Added command 327 - buffers: [10], inbytes: 4, outbytes: 8&lt;br /&gt;
*** Added command 328 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command 329 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 330 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 506 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 507 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForSystem&lt;br /&gt;
*** Removed command 200 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 400 - inbytes: 0, outbytes: 1&lt;br /&gt;
** nn::mnpp::detail::ipc::IServiceForWebBrowser&lt;br /&gt;
*** Added command 1 - buffers: [5, 5, 6], inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 10 - buffers: [6], inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command 20 - inbytes: 16, outbytes: 0&lt;br /&gt;
** nn::ndrm::low::detail::INdrmLowAdminInterface&lt;br /&gt;
*** Added command 37 - inbytes: 8, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 38 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Added command 39 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
*** Removed command 8003 - buffers: [6], inbytes: 8, outbytes: 4&lt;br /&gt;
** nn::nim::detail::INetworkInstallManager&lt;br /&gt;
*** Changed command 10 - outbytes: 72 -&amp;gt; 88 (final state: inbytes: 16, outbytes: 88)&lt;br /&gt;
*** Changed command 130 - inbytes: 0 -&amp;gt; 8 (final state: inbytes: 8, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncData&#039;])&lt;br /&gt;
*** Added command 135 - inbytes: 0, outbytes: 0&lt;br /&gt;
*** Added command 136 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncValue&#039;]&lt;br /&gt;
*** Added command 137 - inbytes: 16, outbytes: 4&lt;br /&gt;
** nn::nim::detail::IShopServiceManager&lt;br /&gt;
*** Added command 108 - buffers: [5], inbytes: 0, outbytes: 0&lt;br /&gt;
*** Removed command 303 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Removed command 305 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::nim::detail::IAsyncResult&#039;]&lt;br /&gt;
*** Removed command 400 - inbytes: 4, outbytes: 16&lt;br /&gt;
*** Removed command 401 - inbytes: 16, outbytes: 4&lt;br /&gt;
*** Added command 600 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 601 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::ns::detail::IApplicationManagerInterface&lt;br /&gt;
*** Added command 610 - inbytes: 16, outbytes: 1&lt;br /&gt;
*** Added command 2522 - inbytes: 16, outbytes: 0&lt;br /&gt;
*** Added command 3050 - buffers: [6], inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::ns::detail::IDevelopInterface&lt;br /&gt;
*** Added command 20 - inbytes: 8, outbytes: 8&lt;br /&gt;
** nn::ns::detail::IDynamicRightsInterface&lt;br /&gt;
*** Added command 22 - inbytes: 8, outbytes: 1&lt;br /&gt;
*** Added command 23 - inbytes: 8, outbytes: 0, outhandles: [1]&lt;br /&gt;
*** Added command 24 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 25 - inbytes: 0, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncResult&#039;]&lt;br /&gt;
** nn::ns::detail::IECommerceInterface&lt;br /&gt;
*** Added command 7 - inbytes: 16, outbytes: 0, outhandles: [1], outinterfaces: [&#039;nn::ns::detail::IAsyncValue&#039;]&lt;br /&gt;
** nn::omm::detail::IOperationModeManager&lt;br /&gt;
*** Added command 500 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 501 - inbytes: 8, outbytes: 0&lt;br /&gt;
*** Added command 900 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::pcie::detail::ISession&lt;br /&gt;
*** Changed command 4 - outbytes: 24 -&amp;gt; 32 (final state: inbytes: 8, outbytes: 32)&lt;br /&gt;
** nn::pm::detail::IDebugMonitorInterface&lt;br /&gt;
*** Added command 7 - inbytes: 8, outbytes: 8&lt;br /&gt;
** nn::pm::detail::IInformationInterface&lt;br /&gt;
*** Added command 1 - inbytes: 0, outbytes: 24&lt;br /&gt;
*** Added command 2 - inbytes: 0, outbytes: 24&lt;br /&gt;
** nn::pm::detail::IShellInterface&lt;br /&gt;
*** Added command 10 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::pwm::IChannelSession&lt;br /&gt;
*** Removed command 2 - inbytes: 4, outbytes: 0&lt;br /&gt;
*** Removed command 3 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::settings::ISystemSettingsServer&lt;br /&gt;
*** Added command 207 - inbytes: 0, outbytes: 1&lt;br /&gt;
*** Added command 208 - inbytes: 1, outbytes: 0&lt;br /&gt;
*** Added command 209 - inbytes: 0, outbytes: 8&lt;br /&gt;
*** Added command 210 - inbytes: 8, outbytes: 0&lt;br /&gt;
** nn::ssl::sf::ISslService&lt;br /&gt;
*** Added command 9 - inbytes: 0, outbytes: 0&lt;br /&gt;
** nn::ts::server::IMeasurementServer&lt;br /&gt;
*** Removed command 2 - inbytes: 2, outbytes: 0&lt;br /&gt;
*** Removed command 3 - inbytes: 1, outbytes: 4&lt;br /&gt;
** nn::ts::server::ISession&lt;br /&gt;
*** Removed command 1 - inbytes: 0, outbytes: 4&lt;br /&gt;
*** Removed command 3 - inbytes: 0, outbytes: 4&lt;br /&gt;
** nn::uart::IPortSession&lt;br /&gt;
*** Added command 8 - inbytes: 40, inhandles: [1, 1], outbytes: 0&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=2022-03-22_00-05-06&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>SciresM</name></author>
	</entry>
</feed>