summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/am.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index bb77c2569..8e1fe9438 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -1047,20 +1047,21 @@ void IStorageAccessor::Write(Kernel::HLERequestContext& ctx) {
1047 1047
1048 const u64 offset{rp.Pop<u64>()}; 1048 const u64 offset{rp.Pop<u64>()};
1049 const std::vector<u8> data{ctx.ReadBuffer()}; 1049 const std::vector<u8> data{ctx.ReadBuffer()};
1050 const std::size_t size{std::min(data.size(), backing.GetSize() - offset)};
1050 1051
1051 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, data.size()); 1052 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size);
1052 1053
1053 if (data.size() > backing.GetSize() - offset) { 1054 if (offset > backing.GetSize()) {
1054 LOG_ERROR(Service_AM, 1055 LOG_ERROR(Service_AM,
1055 "offset is out of bounds, backing_buffer_sz={}, data_size={}, offset={}", 1056 "offset is out of bounds, backing_buffer_sz={}, data_size={}, offset={}",
1056 backing.GetSize(), data.size(), offset); 1057 backing.GetSize(), size, offset);
1057 1058
1058 IPC::ResponseBuilder rb{ctx, 2}; 1059 IPC::ResponseBuilder rb{ctx, 2};
1059 rb.Push(ERR_SIZE_OUT_OF_BOUNDS); 1060 rb.Push(ERR_SIZE_OUT_OF_BOUNDS);
1060 return; 1061 return;
1061 } 1062 }
1062 1063
1063 std::memcpy(backing.GetData().data() + offset, data.data(), data.size()); 1064 std::memcpy(backing.GetData().data() + offset, data.data(), size);
1064 1065
1065 IPC::ResponseBuilder rb{ctx, 2}; 1066 IPC::ResponseBuilder rb{ctx, 2};
1066 rb.Push(RESULT_SUCCESS); 1067 rb.Push(RESULT_SUCCESS);
@@ -1070,11 +1071,11 @@ void IStorageAccessor::Read(Kernel::HLERequestContext& ctx) {
1070 IPC::RequestParser rp{ctx}; 1071 IPC::RequestParser rp{ctx};
1071 1072
1072 const u64 offset{rp.Pop<u64>()}; 1073 const u64 offset{rp.Pop<u64>()};
1073 const std::size_t size{ctx.GetWriteBufferSize()}; 1074 const std::size_t size{std::min(ctx.GetWriteBufferSize(), backing.GetSize() - offset)};
1074 1075
1075 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size); 1076 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, size);
1076 1077
1077 if (size > backing.GetSize() - offset) { 1078 if (offset > backing.GetSize()) {
1078 LOG_ERROR(Service_AM, "offset is out of bounds, backing_buffer_sz={}, size={}, offset={}", 1079 LOG_ERROR(Service_AM, "offset is out of bounds, backing_buffer_sz={}, size={}, offset={}",
1079 backing.GetSize(), size, offset); 1080 backing.GetSize(), size, offset);
1080 1081