mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:22:45 +00:00 
			
		
		
		
	LibELF: Propagate ELF image validation errors to the caller
With this fixed dlopen() no longer crashes when given an invalid ELF image and instead returns an error code that can be retrieved with dlerror(). Fixes #6995.
This commit is contained in:
		
							parent
							
								
									461acda76f
								
							
						
					
					
						commit
						0ab37dbd03
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		|  | @ -54,7 +54,10 @@ Result<NonnullRefPtr<DynamicLoader>, DlErrorMessage> DynamicLoader::try_create(i | |||
|         return DlErrorMessage { "DynamicLoader::try_create mmap" }; | ||||
|     } | ||||
| 
 | ||||
|     return adopt_ref(*new DynamicLoader(fd, move(filename), data, size)); | ||||
|     auto loader = adopt_ref(*new DynamicLoader(fd, move(filename), data, size)); | ||||
|     if (!loader->is_valid()) | ||||
|         return DlErrorMessage { "ELF image validation failed" }; | ||||
|     return loader; | ||||
| } | ||||
| 
 | ||||
| DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size) | ||||
|  | @ -64,8 +67,9 @@ DynamicLoader::DynamicLoader(int fd, String filename, void* data, size_t size) | |||
|     , m_file_data(data) | ||||
|     , m_elf_image((u8*)m_file_data, m_file_size) | ||||
| { | ||||
|     m_tls_size_of_current_object = calculate_tls_size(); | ||||
|     m_valid = validate(); | ||||
|     if (m_valid) | ||||
|         m_tls_size_of_current_object = calculate_tls_size(); | ||||
| } | ||||
| 
 | ||||
| DynamicLoader::~DynamicLoader() | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gunnar Beutner
						Gunnar Beutner