objtool: Skip magical retpoline .altinstr_replacement
When the .altinstr_replacement is a retpoline, skip the alternative. We already special case retpolines anyway. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Borislav Petkov <bp@suse.de> Signed-off-by: Ingo Molnar <mingo@kernel.org> Reviewed-by: Miroslav Benes <mbenes@suse.cz> Link: https://lkml.kernel.org/r/20210326151300.259429287@infradead.org
This commit is contained in:
		
				
					committed by
					
						 Ingo Molnar
						Ingo Molnar
					
				
			
			
				
	
			
			
			
						parent
						
							7bd2a600f3
						
					
				
				
					commit
					50e7b4a1a1
				
			| @@ -106,6 +106,14 @@ static int get_alt_entry(struct elf *elf, struct special_entry *entry, | |||||||
| 			return -1; | 			return -1; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		/*
 | ||||||
|  | 		 * Skip retpoline .altinstr_replacement... we already rewrite the | ||||||
|  | 		 * instructions for retpolines anyway, see arch_is_retpoline() | ||||||
|  | 		 * usage in add_{call,jump}_destinations(). | ||||||
|  | 		 */ | ||||||
|  | 		if (arch_is_retpoline(new_reloc->sym)) | ||||||
|  | 			return 1; | ||||||
|  | 
 | ||||||
| 		alt->new_sec = new_reloc->sym->sec; | 		alt->new_sec = new_reloc->sym->sec; | ||||||
| 		alt->new_off = (unsigned int)new_reloc->addend; | 		alt->new_off = (unsigned int)new_reloc->addend; | ||||||
| 
 | 
 | ||||||
| @@ -154,7 +162,9 @@ int special_get_alts(struct elf *elf, struct list_head *alts) | |||||||
| 			memset(alt, 0, sizeof(*alt)); | 			memset(alt, 0, sizeof(*alt)); | ||||||
| 
 | 
 | ||||||
| 			ret = get_alt_entry(elf, entry, sec, idx, alt); | 			ret = get_alt_entry(elf, entry, sec, idx, alt); | ||||||
| 			if (ret) | 			if (ret > 0) | ||||||
|  | 				continue; | ||||||
|  | 			if (ret < 0) | ||||||
| 				return ret; | 				return ret; | ||||||
| 
 | 
 | ||||||
| 			list_add_tail(&alt->list, alts); | 			list_add_tail(&alt->list, alts); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user