mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 23:49:01 -05:00 
			
		
		
		
	Passing an invalid nmap handle to Remap should throw an error
Added error for invalid nmap handles
This commit is contained in:
		| @@ -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; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 David Marcec
					David Marcec