Skip to content
Snippets Groups Projects
Commit 5dd538ca authored by David Marcec's avatar David Marcec
Browse files

Passing an invalid nmap handle to Remap should throw an error

Added error for invalid nmap handles
parent 6d82c4ad
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,11 @@
#include "video_core/renderer_base.h"
namespace Service::Nvidia::Devices {
namespace NvErrCodes {
enum {
InvalidNmapHandle = -22,
};
}
nvhost_as_gpu::nvhost_as_gpu(std::shared_ptr<nvmap> nvmap_dev) : nvmap_dev(std::move(nvmap_dev)) {}
nvhost_as_gpu::~nvhost_as_gpu() = default;
......@@ -79,14 +84,17 @@ u32 nvhost_as_gpu::Remap(const std::vector<u8>& input, std::vector<u8>& output)
std::memcpy(entries.data(), input.data(), input.size());
auto& gpu = Core::System::GetInstance().GPU();
bool failed_remap{};
for (const auto& entry : entries) {
LOG_WARNING(Service_NVDRV, "remap entry, offset=0x{:X} handle=0x{:X} pages=0x{:X}",
entry.offset, entry.nvmap_handle, entry.pages);
Tegra::GPUVAddr offset = static_cast<Tegra::GPUVAddr>(entry.offset) << 0x10;
auto object = nvmap_dev->GetObject(entry.nvmap_handle);
ASSERT(object);
if (!object) {
LOG_CRITICAL(Service_NVDRV, "nvmap {} is an invalid handle!", entry.nvmap_handle);
failed_remap = true;
continue;
}
ASSERT(object->status == nvmap::Object::Status::Allocated);
......@@ -97,6 +105,9 @@ u32 nvhost_as_gpu::Remap(const std::vector<u8>& input, std::vector<u8>& output)
ASSERT(returned == offset);
}
std::memcpy(output.data(), entries.data(), output.size());
if (failed_remap) {
return static_cast<u32>(NvErrCodes::InvalidNmapHandle);
}
return 0;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment