diff options
Diffstat (limited to 'kernel/debug/kdb/kdb_io.c')
| -rw-r--r-- | kernel/debug/kdb/kdb_io.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c index 9b11b10b120c..b12b9db75c1d 100644 --- a/kernel/debug/kdb/kdb_io.c +++ b/kernel/debug/kdb/kdb_io.c @@ -714,8 +714,8 @@ int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap)  		 * it, depending on the results of the search.  		 */  		cp++;	 	     /* to byte after the newline */ -		replaced_byte = *cp; /* remember what/where it was */ -		cphold = cp; +		replaced_byte = *cp; /* remember what it was */ +		cphold = cp;	     /* remember where it was */  		*cp = '\0';	     /* end the string for our search */  		/* @@ -732,8 +732,9 @@ int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap)  			 * Shift the buffer left.  			 */  			*cphold = replaced_byte; -			strcpy(kdb_buffer, cphold); -			len = strlen(kdb_buffer); +			len = strlen(cphold); +			/* Use memmove() because the buffers overlap */ +			memmove(kdb_buffer, cphold, len + 1);  			next_avail = kdb_buffer + len;  			size_avail = sizeof(kdb_buffer) - len;  			goto kdb_print_out; @@ -872,8 +873,9 @@ kdb_printit:  	 */  	if (kdb_grepping_flag && !suspend_grep) {  		*cphold = replaced_byte; -		strcpy(kdb_buffer, cphold); -		len = strlen(kdb_buffer); +		len = strlen(cphold); +		/* Use memmove() because the buffers overlap */ +		memmove(kdb_buffer, cphold, len + 1);  		next_avail = kdb_buffer + len;  		size_avail = sizeof(kdb_buffer) - len;  	}  | 
