Difference between revisions of "19.0.0"
Tag: Rollback |
Tag: Undo |
||
Line 511: | Line 511: | ||
The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]]. | The anti-downgrade fuses were [[Fuses#Anti-downgrade|updated]]. | ||
+ | |||
+ | ==== Kernel ==== | ||
+ | * KMemoryManager now supports per-pool-partition minimum page alignments. | ||
+ | ** KMemoryManager::Initialize now aborts unless a valid pool index is chosen. | ||
+ | ** KMemoryManager::Initialize now takes an additional array argument of minimum-page alignments (one array entry per pool partition). | ||
+ | *** This array is currently all-zero, which corresponds to minimum allocation alignment of 0x1000 (1 page). | ||
+ | ** Allocation functions now check that alignment is valid for the pool's minimum. | ||
+ | ** MapPhysicalMemory now checks alignment based on the mm min-pages. | ||
+ | ** UnmapPhysicalMemory now checks alignment based on the mm min-pages. | ||
+ | ** StartProcess() now checks alignment/aligns up based on the mm min-pages. | ||
+ | ** 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. | ||
+ | * KMemoryBlock was refactored: | ||
+ | ** Fields were shuffled around, optimizing the storage layout. | ||
+ | *** The last field now ends @ +0x3A, instead of +0x40 before, coming close to but not actually saving 8 bytes per block. | ||
+ | **** This presumably makes space for fields which are ifdef'd out on NX. | ||
+ | ** DisableMergeAttribute_(Device)Right is now 0x20, instead of 0x10. | ||
+ | *** Bit 0x10 appears nowhere in entire kernel now, and code which previously did & 0xF to get the Left disable attrs still does & 0xF. | ||
+ | **** Bit 0x10 is presumably ifdef'd out on NX. | ||
+ | ** KMemoryInfo is essentially no longer used at all any more. | ||
+ | *** All cases where GetMemoryInfo was called now use the fields from the KMemoryBlock directly. | ||
+ | *** The one exception to this is KPageTableBase::QueryInfo, which still returns a KMemoryInfo as output variable. | ||
+ | * The kernel now handles ttbr0 management completely differently: | ||
+ | ** The kernel now stores an array of 0x51 TTBR0 pages (Kernel + 0x50 KProcesses, matching the slab heap size) in .rodata. | ||
+ | *** 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). | ||
+ | ** KSleepSystemRegisters::Save no longer saves TTBR0_EL1; ::Restore sets ttbr0_el1 to g_Ttbr0Pages[0]. | ||
+ | ** KProcess::InitializeUser now checks that the KProcess is within the slabheap; the KProcess's slab heap index is now passed to KProcessPageTable::Initialize. | ||
+ | ** KPageTable no longer has any globals to track ASID management; ASID is now just the KProcess's slab heap index + 1. | ||
+ | * KTargetSystem refactor: | ||
+ | ** KTargetSystem is now located in .rodata, and no longer 4-byte aligns the bools. | ||
+ | ** new .init_array function initializes all the KTargetSystem values in .rodata (before the region is write-protected) using values-from-smc. | ||
+ | ** KSystemControl::Initialize() now sets new bool (g_HasKTargetSystem) to true. | ||
+ | *** Instead of setting values, KSystemControl now does ABORT_UNLESS(value_from_smc == (g_HasKTargetSystem && g_KTargetSystem.value)) for all values. | ||
+ | *** This essentially just checks that the previous .init call worked as expected. | ||
+ | ** All KTargetSystem::Is*() calls now return g_HasKTargetSystem && g_KTargetSystem.value instead of just returning g_KTargetSystem.value | ||
+ | *** Note: these are still fully inlined in all cases. | ||
+ | * KAddressSpaceInfo::GetBegin/GetSize now take in CreateProcess flags instead of bit-width. | ||
+ | * svc::WaitForAddress now supports a new ArbitrationType (ArbitrationType_WaitIfEqual64, value=3). | ||
+ | ** svc::WaitForAddress's "value" parameter is now an int64_t, instead of an int32_t. | ||
+ | ** 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. | ||
+ | * New InfoType 0x22: "InfoType_TransferMemoryHint" | ||
+ | ** This returns a hint for the transfer memory's process address. | ||
+ | ** InfoType values 0x1D-0x21 are presumably ifdef'd out on NX. | ||
+ | * KProcess->max_process_memory is now set to GetHeapRegionSize() in all cases. | ||
+ | ** Previously, this was GetHeapRegionSize() + GetAliasRegionSize() for processes with AddressSpace32BitWithoutAlias. | ||
+ | * The kernel now supports execute-only memory (--X). | ||
+ | ** SetProcessMemoryPermission now supports MemoryPermission_Execute. | ||
+ | *** KPageTableBase::SetProcessMemoryPermission now acquires and immediately releases the scheduler lock prior to operating, if the Execute bit is set on the input permissions. | ||
+ | ** KPageTable::GetEntryTemplate now checks for the MemoryPermission_Execute bit instead of checking directly against ReadExecute. | ||
+ | ** HandleException now supports using supervisor-mode access to read the failing instruction on Unknown/IllegalState/Bkpt/Brk. | ||
+ | *** Supervisor-mode access is used only if user-access fails, KTargetSystem::IsDebugMode() returns true, pc is 4-byte aligned, and 0x200000 <= PC <= (1 << 39). | ||
+ | ** HandleException now no longer forces processing when accessing MemoryState_Code without KMemoryPermission_UserRead. | ||
+ | * The way DebugFlags capabilities works was changed: | ||
+ | ** Previously, bit0=AllowDebug, bit1=ForceDebug. | ||
+ | ** Now, bit0=AllowDebug, bit1=ForceDebugProd, bit2=ForceDebug. | ||
+ | *** Processes may now only have one of the above bits set, previously both AllowDebug and ForceDebug were allowed simultaneously. | ||
+ | ** New function requires KTargetSystem::IsDebugMode(): | ||
+ | *** GetProcessList, | ||
+ | ** Many functions now require (KTargetSystem::IsDebugMode() || GetCurrentProcess().IsForceDebugProd()): | ||
+ | *** DebugActiveProcess, GetDebugEvent, QueryDebugProcessMemory, ReadDebugMemory, GetThreadList, GetDebugThreadContext, GetDebugThreadParam, | ||
+ | ** KDebug now has a member which tracks whether the owner process is ForceDebugProd. | ||
+ | ** KDebugBase::Attach now requires !ForceDebugProd when attaching to a process in the Created/Running states. | ||
+ | *** Crashed may still be attached to when ForceDebugProd. | ||
+ | ** KDebugBase::GetDebugEventInfo now always sets instruction = 0 when creating info for an UndefinedInstruction exception when ForceDebugProd. | ||
+ | ** KDebugBase::(Read/Write)Memory no longer allow reading/writing Io memory when ForceDebugProd is set. | ||
+ | ** KPageTableBase::(Read/Write)DebugMemory now check memory state differently: | ||
+ | *** Previously: either memory had to be UserRead/UserReadWrite (no state flags check) or KMemoryState_FlagCanDebug had to be set. | ||
+ | *** 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() && !ForceDebugProd && memory has to have KernelRead|UserExecute bits && KMemoryState_FlagCanDebug has to be set) | ||
+ | **** This renders the original flag check completely pointless for ReadDebugMemory (but still allows writing to UserRead memory). | ||
+ | **** Memory which was previously readable despite not-user-read is no longer readable. | ||
+ | **** 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. | ||
+ | **** The ForceDebugProd check is not present for WriteDebugMemory. | ||
+ | ** GetThreadList() no longer functions in non-debug mode even with ForceDebugProd | ||
+ | ** KDebugBase::TerminateProcess no longer detaches from the target process. | ||
+ | * Changes relevant to debugging the kernel: | ||
+ | ** EL1SynchronousExceptionHandler now infinite loops instead of calling HandleException. | ||
+ | ** SupervisorModeThreadStarter now sets X30 to 0 + creates a stack frame + invokes the thread function with "BLR X1" instead of "BR X1". | ||
+ | *** This guarantees validity if walking kernel stack frames. | ||
+ | * KPageTable implementation was heavily rewritten. | ||
+ | ** Too many changes to summarize here; the fundamental implementation is now based on iteration over levels using TraversalContext instead of separate per-level logic. | ||
+ | * KPageTableBase::SetupForIpcClient now validates that the unused (on nx) upper memory attribute bits are all unset. | ||
+ | * Many heavy K(Initial)PageTable changes, including: | ||
+ | ** KInitialPageTable'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. | ||
+ | *** Bit0 (0x1) is now used to check for mapping existence again in many places. | ||
+ | ** KPageTableImpl::InitializeForKernel now iterates over mappings created by KInitialPageTable, setting PageAttribute=#used entries for tables and setting bit 58 on blocks. | ||
+ | * KInterruptController::Finalize() now sets m_gicd and m_gicc to nullptr if core id == 0. | ||
+ | |||
=== [[SSL_services|ssl]] === | === [[SSL_services|ssl]] === |
Revision as of 01:59, 10 October 2024
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.
Security flaws fixed: yes.
Change-log
Official ALL change-log:
- General system stability improvements to enhance the user's experience.
System Titles
- The following titles were updated:
- 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.
- 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.
- Applets: qlaunch, auth, netConnect, LibAppletWeb, LibAppletShop, LibAppletOff, LibAppletLns, LibAppletAuth, "starter" application.
NPDM changes (besides usual version-bump):
- usb: Service access: removed set:fd.
- 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.
- bluetooth: Service access: removed set:fd.
- bcat: Service access: added ssl:s, removed ssl.
- friends: Service access: added ssl:s, removed set, ssl. SVC access: removed MapTransferMemory, UnmapTransferMemory.
- nifm: Service access: added ssl:s, removed ssl.
- ptm: Service access: removed set:fd. KernelCap HandleTableSize: removed HandleTableSize=0x100.
- bsdsocket: Service server access: removed bsdcfg.
- hid: Service access: removed set:fd.
- audio: Service access: removed set, set:cal.
- wlan: Service access: removed i2c.
- pcv: Service access: removed set:fd.
- account: Service access: added ssl:s, removed ssl.
- ns: Service access: added caps:dc.
- nfc: Service access: removed xcd:sys.
- capsrv: Service access: added acc:e:u1.
- erpt: Service access: added srepo:a, removed srepo:u.
- pctl: Service access: added ssl:s, removed ssl.
- npns: Service access: added ssl:s, removed ssl. SVC access: added MapTransferMemory, UnmapTransferMemory.
- eupld: Service access: added ssl:s, removed ssl.
- creport: SVC access: removed GetThreadList.
- migration: Service access: added hid, set, ssl:s, removed bsdcfg, ssl.
- olsc: Service access: added ssl:s, removed ssl.
- omm: Service access: removed irs:sys.
- qlaunch: Service access: added bsd:a, removed bsd:u.
- auth: Service access: added bsd:a, removed bsd:u.
- netConnect: Service access: added bsd:a, removed bsd:u.
- LibAppletWeb: Service access: added bsd:a, removed bsd:u.
- LibAppletShop: Service access: added bsd:a, removed bsd:u.
- LibAppletOff: Service access: added bsd:a, removed bsd:u.
- LibAppletLns: Service access: added bsd:a, removed bsd:u.
- LibAppletAuth: Service access: added bsd:a, removed bsd:u.
RomFs changes:
- CertStore: "/ssl_TrustedCerts.Ounce.bdf" updated
- ErrorMessage: updated
- BrowserDll: "/buildinfo/buildinfo.dat" updated, "/nro/netfront/core_2/default/cfi_enabled/cairo_wkc.nro.lz4" updated, "/nro/netfront/core_2/default/cfi_enabled/libfont.nro.lz4" updated, "/nro/netfront/core_2/default/cfi_enabled/oss_wkc.nro.lz4" updated, "/nro/netfront/core_2/default/cfi_enabled/peer_wkc.nro.lz4" updated, "/nro/netfront/core_2/default/cfi_enabled/webkit_wkc.nro.lz4" updated
- Help: "/legallines.htdocs/index.html" updated
- NgWord: updated
- SystemVersion: All files updated.
- TimeZoneBinary: updated
- FirmwareDebugSettings: All files updated.
- NgWord2: updated
- RebootlessSystemUpdateVersion: All files updated.
- NgWordT: All files updated.
- qlaunch applet:
- "/lyt/": Various data updated.
- "/message/": Various data updated.
- auth applet:
- "/lyt/": Various data updated.
- "/message/": Various data updated.
- netConnect applet:
- "/lyt/": Various data updated.
- "/message/": Various data updated.
- LibAppletWeb/LibAppletShop/LibAppletOff/LibAppletLns/LibAppletAuth: All files updated.
- "starter" application:
- "/lyt/": Various data updated.
- "/message/": Various data updated.
The SDK library version strings were removed from all titles. The "SDK MW+Nintendo+{...}" strings are no longer present. The used libraries/versions can therefore no longer be determined via checking these strings (unless there's other version-strings).
IPC Interface Changes
- Interface Changed: nn::sasbus::ISession
- Added: 4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0
- Added: 5 - inbytes: 0x0, outbytes: 0x0
- Interface Removed: nn::news::detail::ipc::INewlyArrivedEventHolder
- Interface Removed: nn::news::detail::ipc::INewsDatabaseService
- Interface Added: nn::news::detail::ipc::IDeviceNewsDatabaseService
- Interface Added: nn::news::detail::ipc::INewArrivalEventHolder
- Interface Changed: nn::news::detail::ipc::INewsDataService
- Added: 1100 - inbytes: 0x18, outbytes: 0x0
- Interface Changed: nn::news::detail::ipc::INewsService
- Removed: 30400 - buffers: [0x6, 0x5], inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::news::detail::ipc::IServiceCreator
- Changed: 1 - outinterfaces: ['nn::news::detail::ipc::INewlyArrivedEventHolder'] -> ['nn::news::detail::ipc::INewArrivalEventHolder'] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::news::detail::ipc::INewArrivalEventHolder'])
- Changed: 3 - outinterfaces: ['nn::news::detail::ipc::INewsDatabaseService'] -> ['nn::news::detail::ipc::IDeviceNewsDatabaseService'] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::news::detail::ipc::IDeviceNewsDatabaseService'])
- Unknown Interface prev-version: 0x710007CD3C
- Unknown Interface cur-version: 0x71000844C0
- Interface Changed: nn::friends::detail::ipc::IFriendService
- Added: 20105 - buffer_entry_sizes: [0x200], buffers: [0x6], inbytes: 0x28, outbytes: 0x4
- Added: 20106 - buffer_entry_sizes: [0x200, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0
- Added: 20502 - buffer_entry_sizes: [0x4A8, 0x8], buffers: [0x6, 0x9], inbytes: 0x10, outbytes: 0x0
- Added: 20601 - buffer_entry_sizes: [0xE8], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0
- Added: 20702 - buffer_entry_sizes: [0x100], buffers: [0x6], inbytes: 0x18, outbytes: 0x4
- Added: 20802 - buffer_entry_sizes: [0x800], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0
- Added: 22002 - buffer_entry_sizes: [0x500], buffers: [0x6], inbytes: 0x10, outbytes: 0x4
- Added: 22003 - buffer_entry_sizes: [0x1400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0
- Added: 30501 - buffer_entry_sizes: [0x4A8], buffers: [0x1A], inbytes: 0x30, outbytes: 0x0
- Added: 30701 - buffer_entry_sizes: [0x40, 0x48, 0x48], buffers: [0x19, 0x19, 0x19], inbytes: 0x28, outbytes: 0x0
- Added: 30901 - buffer_entry_sizes: [0xC00, 0x8, 0x0], buffers: [0x15, 0x9, 0x5], inbytes: 0x30, outbytes: 0x0
- Added: 31000 - inbytes: 0x28, outbytes: 0x0, outinterfaces: ['nn::friends::detail::ipc::INotificationService']
- Interface Changed: nn::friends::detail::ipc::IServiceCreator
- Changed: 2 - outinterfaces: ['0x710007CD3C'] -> ['0x71000844C0'] (final state: inbytes: 0x0, outbytes: 0x0, outinterfaces: ['0x71000844C0'])
- Interface Removed: nn::fgm::sf::IRequest
- Interface Removed: nn::fgm::sf::ISession
- Interface Added: nn::fgm::IRequest
- Interface Added: nn::fgm::ISession
- Interface Changed: nn::psm::IPsmServer
- Added: 21 - inbytes: 0x0, outbytes: 0x4
- Added: 22 - inbytes: 0x0, outbytes: 0x1
- Added: 23 - inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::bsdsocket::cfg::ServerInterface
- Added: 24 - buffers: [0x5], inbytes: 0x10, outbytes: 0x0, pid: True
- Interface Changed: nn::hid::IHidDebugServer
- Added: 212 - buffer_entry_sizes: [0x10], buffers: [0x6], inbytes: 0x8, outbytes: 0x4
- Added: 253 - inbytes: 0x8, outbytes: 0x0
- Removed: 351 - inbytes: 0x0, outbytes: 0x4
- Removed: 352 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::hid::IHidServer
- Added: 22 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::hid::IHidSystemServer
- Removed: 214 - inbytes: 0x10, outbytes: 0x8
- Added: 216 - inbytes: 0x10, outbytes: 0x8
- Added: 217 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]
- Added: 218 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0
- Added: 219 - inbytes: 0x10, outbytes: 0x0
- Added: 220 - inbytes: 0x8, outbytes: 0x0
- Added: 221 - inbytes: 0x30, outbytes: 0x0
- Added: 222 - buffer_entry_sizes: [0x3F4], buffers: [0x31], inbytes: 0x8, outbytes: 0x0
- Added: 223 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0
- Added: 224 - buffer_entry_sizes: [0x64], buffers: [0x31], inbytes: 0x8, outbytes: 0x0
- Added: 225 - inbytes: 0x10, outbytes: 0x0
- Added: 226 - buffer_entry_sizes: [0x118], buffers: [0x31], inbytes: 0x8, outbytes: 0x0
- Added: 227 - buffer_entry_sizes: [0x218], buffers: [0x31], inbytes: 0x8, outbytes: 0x0
- Added: 234 - inbytes: 0x8, outbytes: 0x8
- Added: 241 - inbytes: 0x8, outbytes: 0x1
- Added: 242 - inbytes: 0x10, outbytes: 0x0
- Added: 243 - inbytes: 0x8, outbytes: 0x1
- Added: 244 - inbytes: 0x10, outbytes: 0x0
- Added: 245 - inbytes: 0x8, outbytes: 0x20
- Added: 246 - inbytes: 0x8, outbytes: 0x0
- Added: 247 - inbytes: 0x10, outbytes: 0x0
- Added: 332 - inbytes: 0x8, outbytes: 0x4
- Added: 526 - inbytes: 0x0, outbytes: 0x1
- Removed: 543 - buffer_entry_sizes: [0x30], buffers: [0xA], inbytes: 0x0, outbytes: 0x8
- Added: 1420 - inbytes: 0x8, outbytes: 0xC
- Interface Changed: nn::xcd::detail::ISystemServer
- Removed: 0 - inbytes: 0x8, outbytes: 0x1
- Removed: 1 - inbytes: 0xC, outbytes: 0x0
- Removed: 2 - inbytes: 0x8, outbytes: 0x1
- Removed: 3 - inbytes: 0xC, outbytes: 0x0
- Removed: 4 - inbytes: 0x8, outbytes: 0x20
- Removed: 5 - inbytes: 0x8, outbytes: 0x0
- Removed: 6 - inbytes: 0xC, outbytes: 0x0
- Removed: 10 - inbytes: 0x8, outbytes: 0x0, outhandles: [1, 1]
- Removed: 11 - buffer_entry_sizes: [0x804], buffers: [0x32], inbytes: 0x8, outbytes: 0x0
- Removed: 12 - inbytes: 0x10, outbytes: 0x0
- Removed: 13 - inbytes: 0x8, outbytes: 0x0
- Removed: 14 - inbytes: 0x30, outbytes: 0x0
- Removed: 15 - buffer_entry_sizes: [0x3F4], buffers: [0x19], inbytes: 0x8, outbytes: 0x0
- Removed: 16 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0
- Removed: 17 - buffer_entry_sizes: [0x64], buffers: [0x19], inbytes: 0x8, outbytes: 0x0
- Removed: 18 - inbytes: 0xC, outbytes: 0x0
- Removed: 19 - buffer_entry_sizes: [0x118], buffers: [0x19], inbytes: 0x8, outbytes: 0x0
- Removed: 20 - buffer_entry_sizes: [0x218], buffers: [0x19], inbytes: 0x8, outbytes: 0x0
- Interface Changed: nn::audioctrl::detail::IAudioController
- Added: 5000 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::audioctrl::detail::IAudioController']
- Removed: 50000 - inbytes: 0x4, outbytes: 0x0
- Added: 50001 - inbytes: 0x4, outbytes: 0x0
- Added: 50003 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0
- Added: 50004 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::wlan::detail::IPrivateWirelessCommunicationService
- Changed: 2 - buffer_entry_sizes: [0x1F8] -> [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x4, outbytes: 0x0)
- Changed: 12 - buffer_entry_sizes: [0x84] -> [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)
- Interface Changed: nn::wlan::detail::IWirelessCommunicationService
- Changed: 60 - buffer_entry_sizes: [0x1F8] -> [0x9A] (final state: buffer_entry_sizes: [0x9A], buffers: [0x19], inbytes: 0x0, outbytes: 0x0)
- Changed: 90 - buffer_entry_sizes: [0x84] -> [0x80] (final state: buffer_entry_sizes: [0x80], buffers: [0x19], inbytes: 0x0, outbytes: 0x32)
- Changed: 100 - inbytes: 0x80 -> 0x7C (final state: inbytes: 0x7C, outbytes: 0x0)
- Added: 109 - inbytes: 0x8, outbytes: 0x0
- Added: 120 - inbytes: 0x0, outbytes: 0x18
- Added: 204 - buffers: [0x21], inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::ldn::detail::ISystemLocalCommunicationService
- Added: 404 - inbytes: 0x10, outbytes: 0x0, pid: True
- Interface Changed: nn::ldn::detail::IUserLocalCommunicationService
- Added: 403 - inbytes: 0x4, outbytes: 0x0
- Unknown Interface prev-version: 0x7100005438
- Unknown Interface cur-version: 0x7100004EF0
- Interface Changed: nn::account::IAccountEntityServiceForAccountPolicy
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Added: 420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0
- Added: 421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0
- Interface Changed: nn::account::IAccountEntityServiceForApplication
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::account::IAccountServiceForAdministrator
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Added: 420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0
- Added: 421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0
- Interface Changed: nn::account::IAccountServiceForSystemService
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::account::IAccountServiceForSystemServiceWithProfileEditor
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::account::baas::IAdministrator
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Added: 136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8
- Added: 204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::account::detail::IAsyncContext']
- Added: 223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::account::detail::IAsyncContext']
- Interface Changed: nn::account::baas::IManagerForApplication
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::account::baas::IManagerForSystemService
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Added: 136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa
- Added: 1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::account::profile::IProfile
- Added: 40 - inbytes: 0x0, outbytes: 0x10
- Interface Changed: nn::account::profile::IProfileEditor
- Added: 40 - inbytes: 0x0, outbytes: 0x10
- Interface Changed: nn::account::IAccountServiceForAdministrator
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Added: 420 - buffer_entry_sizes: [0xD0], buffers: [0x19], inbytes: 0x10, outbytes: 0x0
- Added: 421 - buffer_entry_sizes: [0xD0], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0
- Interface Changed: nn::account::IAccountServiceForApplication
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::account::IAccountServiceForSystemService
- Added: 52 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::account::baas::IAdministrator
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Added: 136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8
- Added: 204 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::account::detail::IAsyncContext']
- Added: 223 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::account::detail::IAsyncContext']
- Interface Changed: nn::account::baas::IManagerForApplication
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::account::baas::IManagerForSystemService
- Added: 4 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Added: 136 - buffer_entry_sizes: [0x270, 0x0], buffers: [0x1A, 0x6], inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::account::nas::IOAuthProcedureForExternalNsa
- Added: 1000 - buffer_entry_sizes: [0x1000, 0x100], buffers: [0x1A, 0x1A], inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::account::profile::IProfile
- Added: 40 - inbytes: 0x0, outbytes: 0x10
- Interface Changed: nn::account::profile::IProfileEditor
- Added: 40 - inbytes: 0x0, outbytes: 0x10
- Interface Changed: nn::ns::detail::IApplicationManagerInterface
- Changed: 94 - inbytes: 0x58 -> 0x88 (final state: inbytes: 0x88, outbytes: 0x8)
- Changed: 95 - outbytes: 0x50 -> 0x80 (final state: inbytes: 0x8, outbytes: 0x80)
- Changed: 96 - outbytes: 0x50 -> 0x80 (final state: inbytes: 0x8, outbytes: 0x80)
- Changed: 97 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x1)
- Removed: 406 - buffer_entry_sizes: [0x4000], buffers: [0x16], inbytes: 0x58, outbytes: 0x0
- Added: 411 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8
- Added: 412 - inbytes: 0x10, outbytes: 0x0, outhandles: [1], outinterfaces: ['nn::ns::detail::IAsyncResult']
- Added: 413 - inbytes: 0x1, outbytes: 0x4
- Added: 414 - buffer_entry_sizes: [0x20], buffers: [0x6], inbytes: 0x1, outbytes: 0x4
- Added: 415 - buffer_entry_sizes: [0x8], buffers: [0x5], inbytes: 0x10, inhandles: [1], outbytes: 0x0, outhandles: [1], outinterfaces: ['nn::ns::detail::IAsyncValue']
- Added: 416 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8
- Added: 417 - inbytes: 0x1, outbytes: 0x0
- Added: 418 - inbytes: 0x10, outbytes: 0x0
- Added: 419 - inbytes: 0x10, outbytes: 0x0
- Added: 420 - buffer_entry_sizes: [0x18], buffers: [0x5], inbytes: 0x20, outbytes: 0x0
- Added: 511 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]
- Added: 512 - inbytes: 0x0, outbytes: 0x1
- Changed: 1802 - buffer_entry_sizes: [0x90] -> [0x98] (final state: buffer_entry_sizes: [0x98], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)
- Changed: 1803 - buffer_entry_sizes: [0xB0] -> [0xB8] (final state: buffer_entry_sizes: [0xB8], buffers: [0x6], inbytes: 0x0, outbytes: 0x4)
- Added: 2360 - inbytes: 0x0, outbytes: 0x4
- Added: 2361 - inbytes: 0x0, outbytes: 0x4
- Changed: 2513 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x8)
- Changed: 2517 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x8)
- Added: 2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10
- Interface Changed: nn::ns::detail::IDevelopInterface
- Changed: 17 - outbytes: 0x50 -> 0x80 (final state: buffers: [0x5], inbytes: 0x4, outbytes: 0x80)
- Changed: 18 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x0, outhandles: [1])
- Changed: 19 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x0)
- Changed: 21 - outbytes: 0x50 -> 0x80 (final state: inbytes: 0x10, outbytes: 0x80)
- Changed: 22 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x8)
- Changed: 23 - inbytes: 0x50 -> 0x80 (final state: inbytes: 0x80, outbytes: 0x8)
- Interface Changed: nn::ns::detail::IDocumentInterface
- Added: 2524 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x10, outbytes: 0x10
- Interface Changed: nn::ns::detail::IReadOnlyApplicationControlDataInterface
- Added: 5 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8
- Added: 6 - buffers: [0x6], inbytes: 0x10, outbytes: 0x8
- Interface Changed: nn::hshl::IChargeSetterSession
- Added: 5 - inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::hshl::IManager
- Added: 13 - inbytes: 0x0, outbytes: 0x1
- Interface Changed: nn::srepo::detail::ipc::ISrepoService
- Added: 13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::timesrv::detail::service::IStaticService
- Added: 600 - inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::timesrv::detail::service::ITimeServiceManager
- Added: 20 - inbytes: 0x0, outbytes: 0x18
- Interface Changed: nn::capsrv::sf::IAlbumAccessorService
- Added: 8022 - buffer_entry_sizes: [0x20, 0x10], buffers: [0x6, 0x5], inbytes: 0x10, outbytes: 0x8
- Added: 50001 - buffers: [0x6], inbytes: 0x18, outbytes: 0x0
- Added: 50011 - inbytes: 0x0, outbytes: 0x4
- Added: 50012 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::capsrv::sf::IAlbumAccessorSession
- Added: 2009 - inbytes: 0x8, outbytes: 0x10
- Interface Changed: nn::capsrv::sf::IAlbumControlService
- Changed: 2011 - inbytes: 0x10 -> 0x18 (final state: inbytes: 0x18, outbytes: 0x0)
- Changed: 2012 - inbytes: 0x10 -> 0x18 (final state: inbytes: 0x18, outbytes: 0x0)
- Changed: 2013 - outbytes: 0x8 -> 0x10 (final state: inbytes: 0x8, outbytes: 0x10)
- Changed: 2101 - inbytes: 0x10 -> 0x18 (final state: inbytes: 0x18, outbytes: 0x18)
- Added: 2103 - buffer_entry_sizes: [0x200, 0x88], buffers: [0x16, 0x15], inbytes: 0x8, outbytes: 0x0
- Added: 2104 - buffer_entry_sizes: [0x200], buffers: [0x16], inbytes: 0x20, outbytes: 0x0
- Added: 2401 - buffer_entry_sizes: [0x400], buffers: [0x16], inbytes: 0x18, outbytes: 0x0
- Added: 2501 - inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::capsrv::sf::IAlbumControlSession
- Added: 2009 - inbytes: 0x8, outbytes: 0x10
- Interface Added: nn::am::service::IApplicationObserver
- Interface Added: nn::am::service::IMovieWriter
- Interface Added: nn::am::service::ISystemProcessCommonFunctions
- Interface Added: nn::grcsrv::IMovieWriter
- Interface Changed: nn::am::service::IAllSystemAppletProxiesService
- Added: 450 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::am::service::ISystemProcessCommonFunctions']
- Interface Changed: nn::am::service::IAppletCommonFunctions
- Added: 310 - inbytes: 0x0, outbytes: 0x1
- Added: 320 - inbytes: 0x8, outbytes: 0x0
- Added: 321 - inbytes: 0x8, outbytes: 0x0
- Added: 330 - inbytes: 0x0, outbytes: 0x1
- Interface Changed: nn::am::service::IApplicationFunctions
- Added: 300 - inbytes: 0x8, inhandles: [1], outbytes: 0x0, outinterfaces: ['nn::am::service::IMovieWriter']
- Interface Changed: nn::am::service::ICommonStateGetter
- Added: 15 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]
- Removed: 600 - inbytes: 0x10, outbytes: 0x0, outinterfaces: ['nn::am::service::IStorageChannel']
- Added: 1000 - inbytes: 0x0, outbytes: 0x0
- Added: 1001 - inbytes: 0x0, outbytes: 0x0
- Added: 1002 - inbytes: 0x0, outbytes: 0x1
- Interface Changed: nn::am::service::IDebugFunctions
- Changed: 31 - inbytes: 0x58 -> 0x88 (final state: buffer_entry_sizes: [0x10, 0x0], buffers: [0x5, 0x5], inbytes: 0x88, outbytes: 0x0)
- Interface Changed: nn::am::service::IHomeMenuFunctions
- Added: 60 - inbytes: 0x0, outbytes: 0x0
- Added: 61 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::am::service::ILibraryAppletAccessor
- Added: 80 - inbytes: 0x0, outbytes: 0x0
- Added: 81 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::am::service::IAppletAccessor']
- Interface Changed: nn::am::service::IOverlayFunctions
- Added: 50 - inbytes: 0x8, outbytes: 0x0
- Added: 60 - inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::am::service::ISelfController
- Added: 22 - inbytes: 0x0, outbytes: 0x1
- Added: 23 - inbytes: 0x0, outbytes: 0x1
- Added: 24 - inbytes: 0x0, outbytes: 0x10
- Interface Changed: nn::grcsrv::IGameMovieTrimmer
- Added: 21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0
- Interface Changed: nn::ssl::sf::ISslServiceForSystem
- Changed: 103 - inbytes: 0x0 -> 0x4 (final state: buffers: [0x5, 0x5, 0x5], inbytes: 0x4, outbytes: 0x0)
- Interface Changed: nn::nim::detail::INetworkInstallManager
- Added: 150 - buffer_entry_sizes: [0x300], buffers: [0x16], inbytes: 0x20, outbytes: 0x0
- Interface Changed: nn::erpt::sf::IContext
- Changed: 2 - inbytes: 0x18 -> 0x20 (final state: inbytes: 0x20, outbytes: 0x0)
- Interface Changed: nn::capsrv::sf::IScreenShotControlService
- Changed: 1004 - inbytes: 0x68 -> 0x70 (final state: buffer_entry_sizes: [0x404, 0x88], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x0)
- Changed: 1106 - inbytes: 0x68 -> 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x78, outbytes: 0x18)
- Changed: 1107 - inbytes: 0x68 -> 0x78 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45], inbytes: 0x78, outbytes: 0x18)
- Changed: 1108 - inbytes: 0x70 -> 0x80 (final state: buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0], buffers: [0x15, 0x15, 0x15, 0x6], inbytes: 0x80, outbytes: 0x18)
- Added: 1109 - buffer_entry_sizes: [0x400, 0x404, 0x88, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x78, outbytes: 0x18
- Added: 1110 - buffers: [0x6, 0x45, 0x6], inbytes: 0x8, outbytes: 0x8
- Added: 1111 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x46, 0x46], inbytes: 0x80, outbytes: 0x18
- Added: 1112 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45], inbytes: 0x80, outbytes: 0x18
- Added: 1113 - buffer_entry_sizes: [0x400, 0x404, 0x0], buffers: [0x15, 0x15, 0x6], inbytes: 0x88, outbytes: 0x18
- Added: 1114 - buffer_entry_sizes: [0x400, 0x404, 0x0, 0x0, 0x0], buffers: [0x15, 0x15, 0x6, 0x45, 0x45], inbytes: 0x80, outbytes: 0x18
- Interface Changed: nn::capsrv::sf::IScreenShotService
- Changed: 1000 - inbytes: 0x68 -> 0x70 (final state: buffer_entry_sizes: [0x88, 0x400], buffers: [0x15, 0x15], inbytes: 0x70, outbytes: 0x20)
- Interface Changed: nn::dp2hdmi::detail::IDp2hdmiController
- Removed: 7 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::pctl::detail::ipc::IParentalControlService
- Added: 2017 - inbytes: 0x20, outbytes: 0x8, outhandles: [1]
- Added: 2019 - inbytes: 0x0, outbytes: 0x0
- Interface Added: nn::npns::IFuture
- Interface Added: nn::npns::ISubscriptionUpdateNotifier
- Interface Changed: nn::npns::INpnsSystem
- Added: 17 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::npns::ISubscriptionUpdateNotifier']
- Added: 60 - buffer_entry_sizes: [0x298], buffers: [0x15], inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Added: 61 - inbytes: 0x0, outbytes: 0x1
- Added: 141 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Added: 142 - buffers: [0x9], inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Added: 143 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Added: 144 - buffers: [0x9], inbytes: 0x8, outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Added: 145 - inbytes: 0x10, inhandles: [1], outbytes: 0x0, outinterfaces: ['nn::npns::IFuture']
- Interface Changed: nn::arp::detail::IRegistrar
- Removed: 2 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::arp::detail::IWriter
- Added: 4 - buffer_entry_sizes: [0x4000], buffers: [0x15], inbytes: 0x8, outbytes: 0x0
- Interface Changed: nn::timesrv::detail::service::IStaticService
- Added: 600 - inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::es::IETicketService
- Changed: 1027 - buffer_entry_sizes: [0x10, 0x0] -> [0x10, 0x8, 0x0], buffers: [0x6, 0x5] -> [0x6, 0x5, 0x5], inbytes: 0x10 -> 0x8 (final state: buffer_entry_sizes: [0x10, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x8, outbytes: 0x4)
- Added: 1029 - buffer_entry_sizes: [0x18, 0x8, 0x0], buffers: [0x6, 0x5, 0x5], inbytes: 0x10, outbytes: 0x4
- Interface Added: nn::grcsrv::IMovieWriter
- Interface Changed: nn::grcsrv::IGameMovieTrimmer
- Added: 21 - buffers: [0x45], inbytes: 0x8, outbytes: 0x0
- Interface Changed: nn::grcsrv::IGrcService
- Added: 110 - inbytes: 0x20, inhandles: [1], outbytes: 0x0, outinterfaces: ['nn::grcsrv::IMovieWriter']
- Interface Changed: nn::mii::detail::IDatabaseService
- Added: 27 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::mii::detail::IImageDatabaseService
- Added: 18 - buffers: [0x5], inbytes: 0x3A, outbytes: 0x0
- Interface Changed: nn::migration::savedata::IClient
- Added: 510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::migration::detail::IAsyncContext']
- Interface Changed: nn::migration::savedata::IServer
- Added: 510 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::migration::detail::IAsyncContext']
- Interface Changed: nn::migration::user::IService
- Added: 0 - inbytes: 0x0, outbytes: 0x2
- Interface Changed: nn::olsc::srv::IOlscServiceForSystemService
- Changed: 907 - inbytes: 0x70 -> 0x78 (final state: inbytes: 0x78, outbytes: 0x0)
- Interface Changed: nn::omm::detail::IOperationModeManager
- Added: 29 - inbytes: 0x0, outbytes: 0x0, outhandles: [1]
- Interface Changed: nn::omm::srv::IDisplayLayerControl
- Changed: 610 - buffer_entry_sizes: [0x4C8] -> [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)
- Changed: 611 - buffer_entry_sizes: [0x4C8] -> [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)
- Changed: 612 - buffer_entry_sizes: [0x4C8] -> [0x4D0] (final state: buffer_entry_sizes: [0x4D0], buffers: [0x15], inbytes: 0x0, outbytes: 0x0)
- Interface Changed: nn::fssrv::sf::IDeviceOperator
- Changed: 206 - outbytes: 0x0 -> 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)
- Added: 223 - inbytes: 0x8, outbytes: 0x0
- Added: 224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2
- Interface Changed: nn::fssrv::sf::IFileSystemProxy
- Added: 29 - inbytes: 0x0, outbytes: 0x1
- Added: 503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::fssrv::sf::IEventNotifier']
- Added: 632 - inbytes: 0x20, outbytes: 0x0
- Added: 820 - inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::ldr::detail::IProcessManagerInterface
- Changed: 1 - buffer_entry_sizes: [0x400] -> [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)
- Interface Changed: nn::pm::detail::IBootModeInterface
- Added: 2 - inbytes: 0x0, outbytes: 0x4
- Added: 3 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::pm::detail::IShellInterface
- Added: 12 - inbytes: 0x8, outbytes: 0x8
- Interface Changed: nn::sasbus::ISession
- Added: 4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0
- Added: 5 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::fssrv::sf::IDeviceOperator
- Changed: 206 - outbytes: 0x0 -> 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)
- Added: 223 - inbytes: 0x8, outbytes: 0x0
- Added: 224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2
- Interface Changed: nn::fssrv::sf::IFileSystemProxy
- Added: 29 - inbytes: 0x0, outbytes: 0x1
- Added: 503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::fssrv::sf::IEventNotifier']
- Added: 632 - inbytes: 0x20, outbytes: 0x0
- Added: 820 - inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::ldr::detail::IProcessManagerInterface
- Changed: 1 - buffer_entry_sizes: [0x400] -> [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)
- Interface Changed: nn::pm::detail::IBootModeInterface
- Added: 2 - inbytes: 0x0, outbytes: 0x4
- Added: 3 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::pm::detail::IShellInterface
- Added: 12 - inbytes: 0x8, outbytes: 0x8
- Interface Changed: nn::hshl::IChargeSetterSession
- Added: 5 - inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::hshl::IManager
- Added: 13 - inbytes: 0x0, outbytes: 0x1
- Interface Changed: nn::srepo::detail::ipc::ISrepoService
- Added: 13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::timesrv::detail::service::IStaticService
- Added: 600 - inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::timesrv::detail::service::ITimeServiceManager
- Added: 20 - inbytes: 0x0, outbytes: 0x18
- Interface Changed: nn::fssrv::sf::IDeviceOperator
- Changed: 206 - outbytes: 0x0 -> 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)
- Added: 223 - inbytes: 0x8, outbytes: 0x0
- Added: 224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2
- Interface Changed: nn::fssrv::sf::IFileSystemProxy
- Added: 29 - inbytes: 0x0, outbytes: 0x1
- Added: 503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::fssrv::sf::IEventNotifier']
- Added: 632 - inbytes: 0x20, outbytes: 0x0
- Added: 820 - inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::ldr::detail::IProcessManagerInterface
- Changed: 1 - buffer_entry_sizes: [0x400] -> [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)
- Interface Changed: nn::pm::detail::IBootModeInterface
- Added: 2 - inbytes: 0x0, outbytes: 0x4
- Added: 3 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::pm::detail::IShellInterface
- Added: 12 - inbytes: 0x8, outbytes: 0x8
- Interface Changed: nn::sasbus::ISession
- Added: 4 - inbytes: 0x10, inhandles: [1], outbytes: 0x0
- Added: 5 - inbytes: 0x0, outbytes: 0x0
- Interface Changed: nn::fssrv::sf::IDeviceOperator
- Changed: 206 - outbytes: 0x0 -> 0x8 (final state: buffers: [0x6], inbytes: 0x10, outbytes: 0x8)
- Added: 223 - inbytes: 0x8, outbytes: 0x0
- Added: 224 - buffers: [0x6], inbytes: 0x10, outbytes: 0x2
- Interface Changed: nn::fssrv::sf::IFileSystemProxy
- Added: 29 - inbytes: 0x0, outbytes: 0x1
- Added: 503 - inbytes: 0x0, outbytes: 0x0, outinterfaces: ['nn::fssrv::sf::IEventNotifier']
- Added: 632 - inbytes: 0x20, outbytes: 0x0
- Added: 820 - inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::ldr::detail::IProcessManagerInterface
- Changed: 1 - buffer_entry_sizes: [0x400] -> [0x410] (final state: buffer_entry_sizes: [0x410], buffers: [0x1A], inbytes: 0x10, outbytes: 0x0)
- Interface Changed: nn::pm::detail::IBootModeInterface
- Added: 2 - inbytes: 0x0, outbytes: 0x4
- Added: 3 - inbytes: 0x4, outbytes: 0x0
- Interface Changed: nn::pm::detail::IShellInterface
- Added: 12 - inbytes: 0x8, outbytes: 0x8
- Interface Changed: nn::hshl::IChargeSetterSession
- Added: 5 - inbytes: 0x1, outbytes: 0x0
- Interface Changed: nn::hshl::IManager
- Added: 13 - inbytes: 0x0, outbytes: 0x1
- Interface Changed: nn::srepo::detail::ipc::ISrepoService
- Added: 13002 - buffers: [0x6], inbytes: 0x0, outbytes: 0x4
- Interface Changed: nn::timesrv::detail::service::IStaticService
- Added: 600 - inbytes: 0x0, outbytes: 0x8
- Interface Changed: nn::timesrv::detail::service::ITimeServiceManager
- Added: 20 - inbytes: 0x0, outbytes: 0x18
BootImagePackages
RomFs changes: all files updated.
Using updated master-key: master_key_12 (previously master_key_11). See NCA for the KeyGeneration listing.
The anti-downgrade fuses were updated.
Kernel
- KMemoryManager now supports per-pool-partition minimum page alignments.
- KMemoryManager::Initialize now aborts unless a valid pool index is chosen.
- KMemoryManager::Initialize now takes an additional array argument of minimum-page alignments (one array entry per pool partition).
- This array is currently all-zero, which corresponds to minimum allocation alignment of 0x1000 (1 page).
- Allocation functions now check that alignment is valid for the pool's minimum.
- MapPhysicalMemory now checks alignment based on the mm min-pages.
- UnmapPhysicalMemory now checks alignment based on the mm min-pages.
- StartProcess() now checks alignment/aligns up based on the mm min-pages.
- 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.
- KMemoryBlock was refactored:
- Fields were shuffled around, optimizing the storage layout.
- The last field now ends @ +0x3A, instead of +0x40 before, coming close to but not actually saving 8 bytes per block.
- This presumably makes space for fields which are ifdef'd out on NX.
- The last field now ends @ +0x3A, instead of +0x40 before, coming close to but not actually saving 8 bytes per block.
- DisableMergeAttribute_(Device)Right is now 0x20, instead of 0x10.
- Bit 0x10 appears nowhere in entire kernel now, and code which previously did & 0xF to get the Left disable attrs still does & 0xF.
- Bit 0x10 is presumably ifdef'd out on NX.
- Bit 0x10 appears nowhere in entire kernel now, and code which previously did & 0xF to get the Left disable attrs still does & 0xF.
- KMemoryInfo is essentially no longer used at all any more.
- All cases where GetMemoryInfo was called now use the fields from the KMemoryBlock directly.
- The one exception to this is KPageTableBase::QueryInfo, which still returns a KMemoryInfo as output variable.
- Fields were shuffled around, optimizing the storage layout.
- The kernel now handles ttbr0 management completely differently:
- The kernel now stores an array of 0x51 TTBR0 pages (Kernel + 0x50 KProcesses, matching the slab heap size) in .rodata.
- 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).
- KSleepSystemRegisters::Save no longer saves TTBR0_EL1; ::Restore sets ttbr0_el1 to g_Ttbr0Pages[0].
- KProcess::InitializeUser now checks that the KProcess is within the slabheap; the KProcess's slab heap index is now passed to KProcessPageTable::Initialize.
- KPageTable no longer has any globals to track ASID management; ASID is now just the KProcess's slab heap index + 1.
- The kernel now stores an array of 0x51 TTBR0 pages (Kernel + 0x50 KProcesses, matching the slab heap size) in .rodata.
- KTargetSystem refactor:
- KTargetSystem is now located in .rodata, and no longer 4-byte aligns the bools.
- new .init_array function initializes all the KTargetSystem values in .rodata (before the region is write-protected) using values-from-smc.
- KSystemControl::Initialize() now sets new bool (g_HasKTargetSystem) to true.
- Instead of setting values, KSystemControl now does ABORT_UNLESS(value_from_smc == (g_HasKTargetSystem && g_KTargetSystem.value)) for all values.
- This essentially just checks that the previous .init call worked as expected.
- All KTargetSystem::Is*() calls now return g_HasKTargetSystem && g_KTargetSystem.value instead of just returning g_KTargetSystem.value
- Note: these are still fully inlined in all cases.
- KAddressSpaceInfo::GetBegin/GetSize now take in CreateProcess flags instead of bit-width.
- svc::WaitForAddress now supports a new ArbitrationType (ArbitrationType_WaitIfEqual64, value=3).
- svc::WaitForAddress's "value" parameter is now an int64_t, instead of an int32_t.
- 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.
- New InfoType 0x22: "InfoType_TransferMemoryHint"
- This returns a hint for the transfer memory's process address.
- InfoType values 0x1D-0x21 are presumably ifdef'd out on NX.
- KProcess->max_process_memory is now set to GetHeapRegionSize() in all cases.
- Previously, this was GetHeapRegionSize() + GetAliasRegionSize() for processes with AddressSpace32BitWithoutAlias.
- The kernel now supports execute-only memory (--X).
- SetProcessMemoryPermission now supports MemoryPermission_Execute.
- KPageTableBase::SetProcessMemoryPermission now acquires and immediately releases the scheduler lock prior to operating, if the Execute bit is set on the input permissions.
- KPageTable::GetEntryTemplate now checks for the MemoryPermission_Execute bit instead of checking directly against ReadExecute.
- HandleException now supports using supervisor-mode access to read the failing instruction on Unknown/IllegalState/Bkpt/Brk.
- Supervisor-mode access is used only if user-access fails, KTargetSystem::IsDebugMode() returns true, pc is 4-byte aligned, and 0x200000 <= PC <= (1 << 39).
- HandleException now no longer forces processing when accessing MemoryState_Code without KMemoryPermission_UserRead.
- SetProcessMemoryPermission now supports MemoryPermission_Execute.
- The way DebugFlags capabilities works was changed:
- Previously, bit0=AllowDebug, bit1=ForceDebug.
- Now, bit0=AllowDebug, bit1=ForceDebugProd, bit2=ForceDebug.
- Processes may now only have one of the above bits set, previously both AllowDebug and ForceDebug were allowed simultaneously.
- New function requires KTargetSystem::IsDebugMode():
- GetProcessList,
- Many functions now require (KTargetSystem::IsDebugMode() || GetCurrentProcess().IsForceDebugProd()):
- DebugActiveProcess, GetDebugEvent, QueryDebugProcessMemory, ReadDebugMemory, GetThreadList, GetDebugThreadContext, GetDebugThreadParam,
- KDebug now has a member which tracks whether the owner process is ForceDebugProd.
- KDebugBase::Attach now requires !ForceDebugProd when attaching to a process in the Created/Running states.
- Crashed may still be attached to when ForceDebugProd.
- KDebugBase::GetDebugEventInfo now always sets instruction = 0 when creating info for an UndefinedInstruction exception when ForceDebugProd.
- KDebugBase::(Read/Write)Memory no longer allow reading/writing Io memory when ForceDebugProd is set.
- KPageTableBase::(Read/Write)DebugMemory now check memory state differently:
- Previously: either memory had to be UserRead/UserReadWrite (no state flags check) or KMemoryState_FlagCanDebug had to be set.
- 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() && !ForceDebugProd && memory has to have KernelRead|UserExecute bits && KMemoryState_FlagCanDebug has to be set)
- This renders the original flag check completely pointless for ReadDebugMemory (but still allows writing to UserRead memory).
- Memory which was previously readable despite not-user-read is no longer readable.
- 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.
- The ForceDebugProd check is not present for WriteDebugMemory.
- GetThreadList() no longer functions in non-debug mode even with ForceDebugProd
- KDebugBase::TerminateProcess no longer detaches from the target process.
- Changes relevant to debugging the kernel:
- EL1SynchronousExceptionHandler now infinite loops instead of calling HandleException.
- SupervisorModeThreadStarter now sets X30 to 0 + creates a stack frame + invokes the thread function with "BLR X1" instead of "BR X1".
- This guarantees validity if walking kernel stack frames.
- KPageTable implementation was heavily rewritten.
- Too many changes to summarize here; the fundamental implementation is now based on iteration over levels using TraversalContext instead of separate per-level logic.
- KPageTableBase::SetupForIpcClient now validates that the unused (on nx) upper memory attribute bits are all unset.
- Many heavy K(Initial)PageTable changes, including:
- KInitialPageTable'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.
- Bit0 (0x1) is now used to check for mapping existence again in many places.
- KPageTableImpl::InitializeForKernel now iterates over mappings created by KInitialPageTable, setting PageAttribute=#used entries for tables and setting bit 58 on blocks.
- KInitialPageTable'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.
- KInterruptController::Finalize() now sets m_gicd and m_gicc to nullptr if core id == 0.
ssl
Besides IPC changes, a vuln was fixed.
See Also
System update report(s):
Nintendo Switch System Versions | |
---|---|
1.0.0 | |
2.0.0 • 2.1.0 • 2.2.0 • 2.3.0 | |
3.0.0 • 3.0.1 • 3.0.2 | |
4.0.0 • 4.0.1 • 4.1.0 | |
5.0.0 • 5.0.1 • 5.0.2 • 5.1.0 | |
6.0.0 • 6.0.1 • 6.1.0 • 6.2.0 | |
7.0.0 • 7.0.1 | |
8.0.0 • 8.0.1 • 8.1.0 • 8.1.1 | |
9.0.0 • 9.0.1 • 9.1.0 • 9.2.0 | |
10.0.0 • 10.0.1 • 10.0.2 • 10.0.3 • 10.0.4 • 10.1.0 • 10.1.1 • 10.2.0 | |
11.0.0 • 11.0.1 | |
12.0.0 • 12.0.1 • 12.0.2 • 12.0.3 • 12.1.0 | |
13.0.0 • 13.1.0 • 13.2.0 • 13.2.1 | |
14.0.0 • 14.1.0 • 14.1.1 • 14.1.2 | |
15.0.0 • 15.0.1 | |
16.0.0 • 16.0.1 • 16.0.2 • 16.0.3 • 16.1.0 | |
17.0.0 • 17.0.1 | |
18.0.0 • 18.0.1 • 18.1.0 | |
19.0.0 • 19.0.1 |