diff mbox

[U-Boot] common: cli_simple: use strncpy instead of strcpy

Message ID 1452346308-16676-1-git-send-email-van.freenix@gmail.com
State Changes Requested
Delegated to: Tom Rini
Headers show

Commit Message

Peng Fan Jan. 9, 2016, 1:31 p.m. UTC
Report Coverity log:
Destination buffer too small (STRING_OVERFLOW)
string_overflow: You might overrun the 1024 byte destination string
lastcommand by writing 1025 bytes from console_buffer

Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
---
 common/cli_simple.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Tom Rini Jan. 9, 2016, 2:03 p.m. UTC | #1
On Sat, Jan 09, 2016 at 09:31:48PM +0800, Peng Fan wrote:

> Report Coverity log:
> Destination buffer too small (STRING_OVERFLOW)
> string_overflow: You might overrun the 1024 byte destination string
> lastcommand by writing 1025 bytes from console_buffer
> 
> Signed-off-by: Peng Fan <van.freenix@gmail.com>
> Cc: Heiko Schocher <hs@denx.de>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Tom Rini <trini@konsulko.com>
> ---
>  common/cli_simple.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/common/cli_simple.c b/common/cli_simple.c
> index 9c3d073..c51f963 100644
> --- a/common/cli_simple.c
> +++ b/common/cli_simple.c
> @@ -276,7 +276,8 @@ void cli_simple_loop(void)
>  
>  		flag = 0;	/* assume no special flags for now */
>  		if (len > 0)
> -			strcpy(lastcommand, console_buffer);
> +			strncpy(lastcommand, console_buffer,
> +				CONFIG_SYS_CBSIZE + 1);
>  		else if (len == 0)
>  			flag |= CMD_FLAG_REPEAT;
>  #ifdef CONFIG_BOOT_RETRY_TIME

So, long term I would like to see use move to using strlcpy for the
normal case (it might not make sense when working with various defined
protocols, etc).  Thanks!
Peng Fan Jan. 10, 2016, 4:59 a.m. UTC | #2
On Sat, Jan 09, 2016 at 09:03:59AM -0500, Tom Rini wrote:
>On Sat, Jan 09, 2016 at 09:31:48PM +0800, Peng Fan wrote:
>
>> Report Coverity log:
>> Destination buffer too small (STRING_OVERFLOW)
>> string_overflow: You might overrun the 1024 byte destination string
>> lastcommand by writing 1025 bytes from console_buffer
>> 
>> Signed-off-by: Peng Fan <van.freenix@gmail.com>
>> Cc: Heiko Schocher <hs@denx.de>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Tom Rini <trini@konsulko.com>
>> ---
>>  common/cli_simple.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>> 
>> diff --git a/common/cli_simple.c b/common/cli_simple.c
>> index 9c3d073..c51f963 100644
>> --- a/common/cli_simple.c
>> +++ b/common/cli_simple.c
>> @@ -276,7 +276,8 @@ void cli_simple_loop(void)
>>  
>>  		flag = 0;	/* assume no special flags for now */
>>  		if (len > 0)
>> -			strcpy(lastcommand, console_buffer);
>> +			strncpy(lastcommand, console_buffer,
>> +				CONFIG_SYS_CBSIZE + 1);
>>  		else if (len == 0)
>>  			flag |= CMD_FLAG_REPEAT;
>>  #ifdef CONFIG_BOOT_RETRY_TIME
>
>So, long term I would like to see use move to using strlcpy for the
>normal case (it might not make sense when working with various defined
>protocols, etc).  Thanks!

Thanks. Just read this, https://www.sudo.ws/todd/papers/strlcpy.html.
strlcpy is a better choice.

Thanks,
Peng.

>
>-- 
>Tom
diff mbox

Patch

diff --git a/common/cli_simple.c b/common/cli_simple.c
index 9c3d073..c51f963 100644
--- a/common/cli_simple.c
+++ b/common/cli_simple.c
@@ -276,7 +276,8 @@  void cli_simple_loop(void)
 
 		flag = 0;	/* assume no special flags for now */
 		if (len > 0)
-			strcpy(lastcommand, console_buffer);
+			strncpy(lastcommand, console_buffer,
+				CONFIG_SYS_CBSIZE + 1);
 		else if (len == 0)
 			flag |= CMD_FLAG_REPEAT;
 #ifdef CONFIG_BOOT_RETRY_TIME