pxe: Ensure we don't overflow bootargs
On a couple of platforms I've tripped over long PXE append lines overflowing this array, due to having CONFIG_SYS_CBSIZE == 256. When doing preseeded Debian installs it's pretty trivial to exceed that. Since the symptom can be a silent hang or a crash add a check. Of course the affected boards would also need an increased CBSIZE to actually work. Note that due to the printing of the final bootargs string CONFIG_SYS_PBSIZE also needs to be sufficiently large. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> [trini: Use %zd not %d in printf for all args] Signed-off-by: Tom Rini <trini@ti.com>
This commit is contained in:
		
							parent
							
								
									f885b84968
								
							
						
					
					
						commit
						64a0c24726
					
				|  | @ -674,6 +674,15 @@ static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label) | ||||||
| 		char bootargs[CONFIG_SYS_CBSIZE] = ""; | 		char bootargs[CONFIG_SYS_CBSIZE] = ""; | ||||||
| 		char finalbootargs[CONFIG_SYS_CBSIZE]; | 		char finalbootargs[CONFIG_SYS_CBSIZE]; | ||||||
| 
 | 
 | ||||||
|  | 		if (strlen(label->append ?: "") + | ||||||
|  | 		    strlen(ip_str) + strlen(mac_str) + 1 > sizeof(bootargs)) { | ||||||
|  | 			printf("bootarg overflow %zd+%zd+%zd+1 > %zd\n", | ||||||
|  | 			       strlen(label->append ?: ""), | ||||||
|  | 			       strlen(ip_str), strlen(mac_str), | ||||||
|  | 			       sizeof(bootargs)); | ||||||
|  | 			return 1; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		if (label->append) | 		if (label->append) | ||||||
| 			strcpy(bootargs, label->append); | 			strcpy(bootargs, label->append); | ||||||
| 		strcat(bootargs, ip_str); | 		strcat(bootargs, ip_str); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue