| 
					
				 | 
			
			
				@@ -0,0 +1,40 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+From da5b32fb4656ab69fe1156eb7e36c7c961839e8a Mon Sep 17 00:00:00 2001 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+From: Phil Sutter <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Date: Wed, 8 Jun 2022 13:45:13 +0200 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Subject: [PATCH] extensions: string: Review parse_string() function 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* Compare against sizeof(info->pattern) which is more clear than having 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  to know that this buffer is of size XT_STRING_MAX_PATTERN_SIZE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* Invert the check and error early to reduce indenting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* Pass info->patlen to memcpy() to avoid reading past end of 's' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Signed-off-by: Phil Sutter <[email protected]> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ extensions/libxt_string.c | 13 ++++++------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 1 file changed, 6 insertions(+), 7 deletions(-) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+--- a/extensions/libxt_string.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++++ b/extensions/libxt_string.c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@@ -78,14 +78,13 @@ static void string_init(struct xt_entry_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ static void 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ parse_string(const char *s, struct xt_string_info *info) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-{	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	/* xt_string does not need \0 at the end of the pattern */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-	if (strlen(s) <= XT_STRING_MAX_PATTERN_SIZE) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-		memcpy(info->pattern, s, XT_STRING_MAX_PATTERN_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-		info->patlen = strnlen(s, XT_STRING_MAX_PATTERN_SIZE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+-	xtables_error(PARAMETER_PROBLEM, "STRING too long \"%s\"", s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++	if (strlen(s) > sizeof(info->pattern)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++		xtables_error(PARAMETER_PROBLEM, "STRING too long \"%s\"", s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++	info->patlen = strnlen(s, sizeof(info->pattern)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				++	memcpy(info->pattern, s, info->patlen); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ static void 
			 |