Created Firmware 17.0.0 (markdown)

Zoria
2025-05-31 21:58:31 +02:00
parent a0a2e414d3
commit f52b72c645

426
Firmware-17.0.0.md Normal file

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