mirror of
				https://github.com/optim-enterprises-bv/openwrt-ipq.git
				synced 2025-10-30 17:58:28 +00:00 
			
		
		
		
	mtd: check the return value of malloc and pread
Check the return value of malloc and pread in case they fail. Signed-off-by: Qiyuan Zhang <zhang.github@outlook.com> Link: https://github.com/openwrt/openwrt/pull/16070 (cherry picked from commit 3f014543cd4bd099dc089cbb9b9b2d7b0db8a021) Signed-off-by: Rafal Boni <rafal.boni@gmail.com> Link: https://github.com/openwrt/openwrt/pull/17889 Signed-off-by: Robert Marko <robimarko@gmail.com>
This commit is contained in:
		 Qiyuan Zhang
					Qiyuan Zhang
				
			
				
					committed by
					
						 Robert Marko
						Robert Marko
					
				
			
			
				
	
			
			
			 Robert Marko
						Robert Marko
					
				
			
						parent
						
							45ce95a9b3
						
					
				
				
					commit
					082608fd2b
				
			| @@ -106,17 +106,31 @@ int mtd_resetbc(const char *mtd) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	num_bc = mtd_info.size / bc_offset_increment; | 	num_bc = mtd_info.size / bc_offset_increment; | ||||||
|         curr = malloc(bc_offset_increment); | 	curr = malloc(bc_offset_increment); | ||||||
|  |  | ||||||
|  | 	if(curr == NULL) { | ||||||
|  | 		DLOG_ERR("Failed to allocate %u bytes from memory.", bc_offset_increment); | ||||||
|  |  | ||||||
|  | 		retval = -6; | ||||||
|  | 		goto out; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	for (i = 0; i < num_bc; i++) { | 	for (i = 0; i < num_bc; i++) { | ||||||
| 		pread(fd, curr, sizeof(struct bootcounter), i * bc_offset_increment); | 		ret = pread(fd, curr, sizeof(struct bootcounter), i * bc_offset_increment); | ||||||
|  |  | ||||||
|  | 		if(ret != sizeof(struct bootcounter)) { | ||||||
|  | 			DLOG_ERR("Failed to read boot-count log at offset 0x%08x.", i * bc_offset_increment); | ||||||
|  |  | ||||||
|  | 			retval = -5; | ||||||
|  | 			goto out; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		/* Existing code assumes erase is to 0xff; left as-is (2019) */ | 		/* Existing code assumes erase is to 0xff; left as-is (2019) */ | ||||||
| 		if (curr->magic == 0xffffffff) | 		if (curr->magic == 0xffffffff) | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| 		if (curr->magic != BOOTCOUNT_MAGIC || curr->checksum != curr->magic + curr->count) { | 		if (curr->magic != BOOTCOUNT_MAGIC || curr->checksum != curr->magic + curr->count) { | ||||||
| 			DLOG_ERR("Unexpected boot-count log at offset %08x: magic %08x boot count %08x checksum %08x; aborting.", | 			DLOG_ERR("Unexpected boot-count log at offset 0x%08x: magic 0x%08x boot count 0x%08x checksum 0x%08x; aborting.", | ||||||
| 				 i * bc_offset_increment, curr->magic, curr->count, curr->checksum); | 				 i * bc_offset_increment, curr->magic, curr->count, curr->checksum); | ||||||
|  |  | ||||||
| 			retval = -2; | 			retval = -2; | ||||||
| @@ -179,7 +193,9 @@ int mtd_resetbc(const char *mtd) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| out: | out: | ||||||
| 	if (curr != NULL) free(curr); | 	if (curr != NULL) | ||||||
|  | 		free(curr); | ||||||
|  |  | ||||||
| 	close(fd); | 	close(fd); | ||||||
| 	return retval; | 	return retval; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user