19.0.0: Difference between revisions
Created page with "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: <fill th..." |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
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. | 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: | Security flaws fixed: yes. | ||
==Change-log== | ==Change-log== | ||
Line 73: | Line 73: | ||
** "/lyt/": Various data updated. | ** "/lyt/": Various data updated. | ||
** "/message/": 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 === | === BootImagePackages === | ||
Line 80: | 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. | |||
=== [[Audio_services|audio]] === | |||
Besides IPC changes, vulns were [[Switch_System_Flaws|fixed]]. | |||
=== [[SSL_services|ssl]] === | |||
Besides IPC changes, a vuln was [[Switch_System_Flaws|fixed]]. | |||
==See Also== | ==See Also== |