mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-10 07:06:34 +00:00
kern: remove KMemoryAttribute_AnyLocked
This commit is contained in:
parent
281dcf232a
commit
3383509da6
4 changed files with 29 additions and 31 deletions
|
@ -165,16 +165,14 @@ namespace ams::kern {
|
||||||
|
|
||||||
enum KMemoryAttribute : u8 {
|
enum KMemoryAttribute : u8 {
|
||||||
KMemoryAttribute_None = 0x00,
|
KMemoryAttribute_None = 0x00,
|
||||||
KMemoryAttribute_UserMask = 0x7F,
|
|
||||||
KMemoryAttribute_All = 0xFF,
|
KMemoryAttribute_All = 0xFF,
|
||||||
|
KMemoryAttribute_UserMask = KMemoryAttribute_All,
|
||||||
|
|
||||||
KMemoryAttribute_Locked = ams::svc::MemoryAttribute_Locked,
|
KMemoryAttribute_Locked = ams::svc::MemoryAttribute_Locked,
|
||||||
KMemoryAttribute_IpcLocked = ams::svc::MemoryAttribute_IpcLocked,
|
KMemoryAttribute_IpcLocked = ams::svc::MemoryAttribute_IpcLocked,
|
||||||
KMemoryAttribute_DeviceShared = ams::svc::MemoryAttribute_DeviceShared,
|
KMemoryAttribute_DeviceShared = ams::svc::MemoryAttribute_DeviceShared,
|
||||||
KMemoryAttribute_Uncached = ams::svc::MemoryAttribute_Uncached,
|
KMemoryAttribute_Uncached = ams::svc::MemoryAttribute_Uncached,
|
||||||
|
|
||||||
KMemoryAttribute_AnyLocked = 0x80,
|
|
||||||
|
|
||||||
KMemoryAttribute_SetMask = KMemoryAttribute_Uncached,
|
KMemoryAttribute_SetMask = KMemoryAttribute_Uncached,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace ams::kern {
|
||||||
R_TRY(page_table->MakeAndOpenPageGroupContiguous(std::addressof(pg), process_address, size / PageSize,
|
R_TRY(page_table->MakeAndOpenPageGroupContiguous(std::addressof(pg), process_address, size / PageSize,
|
||||||
KMemoryState_FlagCanDeviceMap, KMemoryState_FlagCanDeviceMap,
|
KMemoryState_FlagCanDeviceMap, KMemoryState_FlagCanDeviceMap,
|
||||||
KMemoryPermission_None, KMemoryPermission_None,
|
KMemoryPermission_None, KMemoryPermission_None,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked, KMemoryAttribute_DeviceShared));
|
KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked, KMemoryAttribute_DeviceShared));
|
||||||
|
|
||||||
/* Ensure the page group is closed on scope exit. */
|
/* Ensure the page group is closed on scope exit. */
|
||||||
ON_SCOPE_EXIT { pg.Close(); };
|
ON_SCOPE_EXIT { pg.Close(); };
|
||||||
|
|
|
@ -723,7 +723,7 @@ namespace ams::kern {
|
||||||
|
|
||||||
/* Reprotect the source as kernel-read/not mapped. */
|
/* Reprotect the source as kernel-read/not mapped. */
|
||||||
const KMemoryPermission new_src_perm = static_cast<KMemoryPermission>(KMemoryPermission_KernelRead | KMemoryPermission_NotMapped);
|
const KMemoryPermission new_src_perm = static_cast<KMemoryPermission>(KMemoryPermission_KernelRead | KMemoryPermission_NotMapped);
|
||||||
const KMemoryAttribute new_src_attr = static_cast<KMemoryAttribute>(KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked);
|
const KMemoryAttribute new_src_attr = KMemoryAttribute_Locked;
|
||||||
const KPageProperties src_properties = { new_src_perm, false, false, DisableMergeAttribute_DisableHeadBodyTail };
|
const KPageProperties src_properties = { new_src_perm, false, false, DisableMergeAttribute_DisableHeadBodyTail };
|
||||||
R_TRY(this->Operate(updater.GetPageList(), src_address, num_pages, Null<KPhysicalAddress>, false, src_properties, OperationType_ChangePermissions, false));
|
R_TRY(this->Operate(updater.GetPageList(), src_address, num_pages, Null<KPhysicalAddress>, false, src_properties, OperationType_ChangePermissions, false));
|
||||||
|
|
||||||
|
@ -755,7 +755,7 @@ namespace ams::kern {
|
||||||
/* Validate that the source address's state is valid. */
|
/* Validate that the source address's state is valid. */
|
||||||
KMemoryState src_state;
|
KMemoryState src_state;
|
||||||
size_t num_src_allocator_blocks;
|
size_t num_src_allocator_blocks;
|
||||||
R_TRY(this->CheckMemoryState(std::addressof(src_state), nullptr, nullptr, std::addressof(num_src_allocator_blocks), src_address, size, KMemoryState_FlagCanAlias, KMemoryState_FlagCanAlias, KMemoryPermission_All, KMemoryPermission_NotMapped | KMemoryPermission_KernelRead, KMemoryAttribute_All, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked));
|
R_TRY(this->CheckMemoryState(std::addressof(src_state), nullptr, nullptr, std::addressof(num_src_allocator_blocks), src_address, size, KMemoryState_FlagCanAlias, KMemoryState_FlagCanAlias, KMemoryPermission_All, KMemoryPermission_NotMapped | KMemoryPermission_KernelRead, KMemoryAttribute_All, KMemoryAttribute_Locked));
|
||||||
|
|
||||||
/* Validate that the dst address's state is valid. */
|
/* Validate that the dst address's state is valid. */
|
||||||
KMemoryPermission dst_perm;
|
KMemoryPermission dst_perm;
|
||||||
|
@ -869,7 +869,7 @@ namespace ams::kern {
|
||||||
unprot_guard.Cancel();
|
unprot_guard.Cancel();
|
||||||
|
|
||||||
/* Apply the memory block updates. */
|
/* Apply the memory block updates. */
|
||||||
this->memory_block_manager.Update(std::addressof(src_allocator), src_address, num_pages, src_state, new_perm, static_cast<KMemoryAttribute>(KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked));
|
this->memory_block_manager.Update(std::addressof(src_allocator), src_address, num_pages, src_state, new_perm, KMemoryAttribute_Locked);
|
||||||
this->memory_block_manager.Update(std::addressof(dst_allocator), dst_address, num_pages, KMemoryState_AliasCode, new_perm, KMemoryAttribute_None);
|
this->memory_block_manager.Update(std::addressof(dst_allocator), dst_address, num_pages, KMemoryState_AliasCode, new_perm, KMemoryAttribute_None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -885,7 +885,7 @@ namespace ams::kern {
|
||||||
|
|
||||||
/* Verify that the source memory is locked normal heap. */
|
/* Verify that the source memory is locked normal heap. */
|
||||||
size_t num_src_allocator_blocks;
|
size_t num_src_allocator_blocks;
|
||||||
R_TRY(this->CheckMemoryState(std::addressof(num_src_allocator_blocks), src_address, size, KMemoryState_All, KMemoryState_Normal, KMemoryPermission_None, KMemoryPermission_None, KMemoryAttribute_All, static_cast<KMemoryAttribute>(KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked)));
|
R_TRY(this->CheckMemoryState(std::addressof(num_src_allocator_blocks), src_address, size, KMemoryState_All, KMemoryState_Normal, KMemoryPermission_None, KMemoryPermission_None, KMemoryAttribute_All, KMemoryAttribute_Locked));
|
||||||
|
|
||||||
/* Verify that the destination memory is aliasable code. */
|
/* Verify that the destination memory is aliasable code. */
|
||||||
size_t num_dst_allocator_blocks;
|
size_t num_dst_allocator_blocks;
|
||||||
|
@ -2305,7 +2305,7 @@ namespace ams::kern {
|
||||||
/* Check the memory state. */
|
/* Check the memory state. */
|
||||||
const u32 test_state = (is_aligned ? KMemoryState_FlagCanAlignedDeviceMap : KMemoryState_FlagCanDeviceMap);
|
const u32 test_state = (is_aligned ? KMemoryState_FlagCanAlignedDeviceMap : KMemoryState_FlagCanDeviceMap);
|
||||||
size_t num_allocator_blocks;
|
size_t num_allocator_blocks;
|
||||||
R_TRY(this->CheckMemoryState(std::addressof(num_allocator_blocks), address, size, test_state, test_state, perm, perm, KMemoryAttribute_AnyLocked | KMemoryAttribute_IpcLocked | KMemoryAttribute_Locked, 0, KMemoryAttribute_DeviceShared));
|
R_TRY(this->CheckMemoryState(std::addressof(num_allocator_blocks), address, size, test_state, test_state, perm, perm, KMemoryAttribute_IpcLocked | KMemoryAttribute_Locked, KMemoryAttribute_None, KMemoryAttribute_DeviceShared));
|
||||||
|
|
||||||
/* Make the page group, if we should. */
|
/* Make the page group, if we should. */
|
||||||
if (out != nullptr) {
|
if (out != nullptr) {
|
||||||
|
@ -2341,7 +2341,7 @@ namespace ams::kern {
|
||||||
address, size,
|
address, size,
|
||||||
KMemoryState_FlagCanDeviceMap, KMemoryState_FlagCanDeviceMap,
|
KMemoryState_FlagCanDeviceMap, KMemoryState_FlagCanDeviceMap,
|
||||||
KMemoryPermission_None, KMemoryPermission_None,
|
KMemoryPermission_None, KMemoryPermission_None,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked, KMemoryAttribute_DeviceShared));
|
KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked, KMemoryAttribute_DeviceShared));
|
||||||
|
|
||||||
/* Create an update allocator. */
|
/* Create an update allocator. */
|
||||||
KMemoryBlockManagerUpdateAllocator allocator(this->memory_block_slab_manager);
|
KMemoryBlockManagerUpdateAllocator allocator(this->memory_block_slab_manager);
|
||||||
|
@ -2359,16 +2359,16 @@ namespace ams::kern {
|
||||||
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_None,
|
KMemoryAttribute_All, KMemoryAttribute_None,
|
||||||
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked);
|
KMemoryAttribute_Locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::UnlockForIpcUserBuffer(KProcessAddress address, size_t size) {
|
Result KPageTableBase::UnlockForIpcUserBuffer(KProcessAddress address, size_t size) {
|
||||||
return this->UnlockMemory(address, size,
|
return this->UnlockMemory(address, size,
|
||||||
KMemoryState_FlagCanIpcUserBuffer, KMemoryState_FlagCanIpcUserBuffer,
|
KMemoryState_FlagCanIpcUserBuffer, KMemoryState_FlagCanIpcUserBuffer,
|
||||||
KMemoryPermission_None, KMemoryPermission_None,
|
KMemoryPermission_None, KMemoryPermission_None,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked,
|
KMemoryAttribute_All, KMemoryAttribute_Locked,
|
||||||
KMemoryPermission_UserReadWrite,
|
KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked, nullptr);
|
KMemoryAttribute_Locked, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::LockForTransferMemory(KPageGroup *out, KProcessAddress address, size_t size, KMemoryPermission perm) {
|
Result KPageTableBase::LockForTransferMemory(KPageGroup *out, KProcessAddress address, size_t size, KMemoryPermission perm) {
|
||||||
|
@ -2377,16 +2377,16 @@ namespace ams::kern {
|
||||||
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_None,
|
KMemoryAttribute_All, KMemoryAttribute_None,
|
||||||
perm,
|
perm,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked);
|
KMemoryAttribute_Locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::UnlockForTransferMemory(KProcessAddress address, size_t size, const KPageGroup &pg) {
|
Result KPageTableBase::UnlockForTransferMemory(KProcessAddress address, size_t size, const KPageGroup &pg) {
|
||||||
return this->UnlockMemory(address, size,
|
return this->UnlockMemory(address, size,
|
||||||
KMemoryState_FlagCanTransfer, KMemoryState_FlagCanTransfer,
|
KMemoryState_FlagCanTransfer, KMemoryState_FlagCanTransfer,
|
||||||
KMemoryPermission_None, KMemoryPermission_None,
|
KMemoryPermission_None, KMemoryPermission_None,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked,
|
KMemoryAttribute_All, KMemoryAttribute_Locked,
|
||||||
KMemoryPermission_UserReadWrite,
|
KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked, std::addressof(pg));
|
KMemoryAttribute_Locked, std::addressof(pg));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::LockForCodeMemory(KPageGroup *out, KProcessAddress address, size_t size) {
|
Result KPageTableBase::LockForCodeMemory(KPageGroup *out, KProcessAddress address, size_t size) {
|
||||||
|
@ -2395,16 +2395,16 @@ namespace ams::kern {
|
||||||
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
KMemoryPermission_All, KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_None,
|
KMemoryAttribute_All, KMemoryAttribute_None,
|
||||||
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked);
|
KMemoryAttribute_Locked);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::UnlockForCodeMemory(KProcessAddress address, size_t size, const KPageGroup &pg) {
|
Result KPageTableBase::UnlockForCodeMemory(KProcessAddress address, size_t size, const KPageGroup &pg) {
|
||||||
return this->UnlockMemory(address, size,
|
return this->UnlockMemory(address, size,
|
||||||
KMemoryState_FlagCanCodeMemory, KMemoryState_FlagCanCodeMemory,
|
KMemoryState_FlagCanCodeMemory, KMemoryState_FlagCanCodeMemory,
|
||||||
KMemoryPermission_None, KMemoryPermission_None,
|
KMemoryPermission_None, KMemoryPermission_None,
|
||||||
KMemoryAttribute_All, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked,
|
KMemoryAttribute_All, KMemoryAttribute_Locked,
|
||||||
KMemoryPermission_UserReadWrite,
|
KMemoryPermission_UserReadWrite,
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked, std::addressof(pg));
|
KMemoryAttribute_Locked, std::addressof(pg));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result KPageTableBase::CopyMemoryFromLinearToUser(KProcessAddress dst_addr, size_t size, KProcessAddress src_addr, u32 src_state_mask, u32 src_state, KMemoryPermission src_test_perm, u32 src_attr_mask, u32 src_attr) {
|
Result KPageTableBase::CopyMemoryFromLinearToUser(KProcessAddress dst_addr, size_t size, KProcessAddress src_addr, u32 src_state_mask, u32 src_state, KMemoryPermission src_test_perm, u32 src_attr_mask, u32 src_attr) {
|
||||||
|
@ -2987,15 +2987,15 @@ namespace ams::kern {
|
||||||
switch (dst_state) {
|
switch (dst_state) {
|
||||||
case KMemoryState_Ipc:
|
case KMemoryState_Ipc:
|
||||||
test_state = KMemoryState_FlagCanUseIpc;
|
test_state = KMemoryState_FlagCanUseIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonSecureIpc:
|
case KMemoryState_NonSecureIpc:
|
||||||
test_state = KMemoryState_FlagCanUseNonSecureIpc;
|
test_state = KMemoryState_FlagCanUseNonSecureIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonDeviceIpc:
|
case KMemoryState_NonDeviceIpc:
|
||||||
test_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
test_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return svc::ResultInvalidCombination();
|
return svc::ResultInvalidCombination();
|
||||||
|
@ -3389,15 +3389,15 @@ namespace ams::kern {
|
||||||
switch (dst_state) {
|
switch (dst_state) {
|
||||||
case KMemoryState_Ipc:
|
case KMemoryState_Ipc:
|
||||||
test_state = KMemoryState_FlagCanUseIpc;
|
test_state = KMemoryState_FlagCanUseIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonSecureIpc:
|
case KMemoryState_NonSecureIpc:
|
||||||
test_state = KMemoryState_FlagCanUseNonSecureIpc;
|
test_state = KMemoryState_FlagCanUseNonSecureIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonDeviceIpc:
|
case KMemoryState_NonDeviceIpc:
|
||||||
test_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
test_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
||||||
test_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
test_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return svc::ResultInvalidCombination();
|
return svc::ResultInvalidCombination();
|
||||||
|
|
|
@ -257,7 +257,7 @@ namespace ams::kern {
|
||||||
R_TRY(src_page_table.CopyMemoryFromHeapToHeapWithoutCheckDestination(dst_page_table, recv_pointer, recv_size,
|
R_TRY(src_page_table.CopyMemoryFromHeapToHeapWithoutCheckDestination(dst_page_table, recv_pointer, recv_size,
|
||||||
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
||||||
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked,
|
KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_Locked,
|
||||||
src_pointer,
|
src_pointer,
|
||||||
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
||||||
KMemoryPermission_UserRead,
|
KMemoryPermission_UserRead,
|
||||||
|
@ -291,15 +291,15 @@ namespace ams::kern {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case KMemoryState_Ipc:
|
case KMemoryState_Ipc:
|
||||||
out_state = KMemoryState_FlagCanUseIpc;
|
out_state = KMemoryState_FlagCanUseIpc;
|
||||||
out_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
out_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_DeviceShared | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonSecureIpc:
|
case KMemoryState_NonSecureIpc:
|
||||||
out_state = KMemoryState_FlagCanUseNonSecureIpc;
|
out_state = KMemoryState_FlagCanUseNonSecureIpc;
|
||||||
out_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
out_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
case KMemoryState_NonDeviceIpc:
|
case KMemoryState_NonDeviceIpc:
|
||||||
out_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
out_state = KMemoryState_FlagCanUseNonDeviceIpc;
|
||||||
out_attr_mask = KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
out_attr_mask = KMemoryAttribute_Uncached | KMemoryAttribute_Locked;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return svc::ResultInvalidCombination();
|
return svc::ResultInvalidCombination();
|
||||||
|
@ -654,7 +654,7 @@ namespace ams::kern {
|
||||||
R_TRY(src_page_table.CopyMemoryFromHeapToHeap(dst_page_table, dst_message_buffer + max_fast_size, raw_size - fast_size,
|
R_TRY(src_page_table.CopyMemoryFromHeapToHeap(dst_page_table, dst_message_buffer + max_fast_size, raw_size - fast_size,
|
||||||
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
||||||
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelReadWrite),
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked,
|
KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_Locked,
|
||||||
src_message_buffer + max_fast_size,
|
src_message_buffer + max_fast_size,
|
||||||
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
||||||
src_perm,
|
src_perm,
|
||||||
|
@ -911,7 +911,7 @@ namespace ams::kern {
|
||||||
src_message_buffer + max_fast_size,
|
src_message_buffer + max_fast_size,
|
||||||
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
KMemoryState_FlagReferenceCounted, KMemoryState_FlagReferenceCounted,
|
||||||
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelRead),
|
static_cast<KMemoryPermission>(KMemoryPermission_NotMapped | KMemoryPermission_KernelRead),
|
||||||
KMemoryAttribute_AnyLocked | KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_AnyLocked | KMemoryAttribute_Locked));
|
KMemoryAttribute_Uncached | KMemoryAttribute_Locked, KMemoryAttribute_Locked));
|
||||||
}
|
}
|
||||||
} else /* if (dst_user) */ {
|
} else /* if (dst_user) */ {
|
||||||
/* The destination is a user buffer, so it should be unmapped + readable. */
|
/* The destination is a user buffer, so it should be unmapped + readable. */
|
||||||
|
|
Loading…
Reference in a new issue