summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2023-10-24 19:41:48 +0200
committerLiam <byteslice@airmail.cc>2023-10-25 19:05:56 +0200
commit94b7ac50bb5283caf20989341e27d77ec2c57bef (patch)
tree4cc351bd990b5890302b8c5ec64cb4f2e8b92be5 /src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
parentnvdrv: convert nvmap (diff)
downloadyuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar.gz
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar.bz2
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar.lz
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar.xz
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.tar.zst
yuzu-94b7ac50bb5283caf20989341e27d77ec2c57bef.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
index 51659934b..3fdf383f0 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp
@@ -29,6 +29,9 @@ std::size_t SliceVectors(std::span<const u8> input, std::vector<T>& dst, std::si
return 0;
}
const size_t bytes_copied = count * sizeof(T);
+ if (input.size() < offset + bytes_copied) {
+ return 0;
+ }
std::memcpy(dst.data(), input.data() + offset, bytes_copied);
return bytes_copied;
}
@@ -41,6 +44,9 @@ std::size_t WriteVectors(std::span<u8> dst, const std::vector<T>& src, std::size
return 0;
}
const size_t bytes_copied = src.size() * sizeof(T);
+ if (dst.size() < offset + bytes_copied) {
+ return 0;
+ }
std::memcpy(dst.data() + offset, src.data(), bytes_copied);
return bytes_copied;
}
@@ -71,6 +77,10 @@ NvResult nvhost_nvdec_common::SetNVMAPfd(IoctlSetNvmapFD& params) {
}
NvResult nvhost_nvdec_common::Submit(DeviceFD fd, std::span<const u8> input, std::span<u8> output) {
+ if (input.size() < sizeof(IoctlSubmit) || output.size() < sizeof(IoctlSubmit)) {
+ UNIMPLEMENTED();
+ return NvResult::InvalidSize;
+ }
IoctlSubmit params{};
std::memcpy(&params, input.data(), std::min(input.size(), sizeof(IoctlSubmit)));
LOG_DEBUG(Service_NVDRV, "called NVDEC Submit, cmd_buffer_count={}", params.cmd_buffer_count);