Passing an invalid nmap handle to Remap should throw an error
Added error for invalid nmap handles
This commit is contained in:
		
							parent
							
								
									6d82c4adf9
								
							
						
					
					
						commit
						5dd538cace
					
				@ -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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user