[U-Boot] [PATCH 1/2] console: Fix console buffer overrun

When CONFIG_SYS_CBSIZE equals MAX_CMDBUF_SIZE, a command string of maximum length will overwrite part of the history buffer, causing the board to die. Expand the console_buffer and hist_lines buffer by one character each to hold the missing NULL char.
Signed-off-by: John Schmoller jschmoller@xes-inc.com --- common/main.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/common/main.c b/common/main.c index 10d8904..2a75550 100644 --- a/common/main.c +++ b/common/main.c @@ -68,7 +68,7 @@ static int abortboot(int);
#undef DEBUG_PARSER
-char console_buffer[CONFIG_SYS_CBSIZE]; /* console I/O buffer */ +char console_buffer[CONFIG_SYS_CBSIZE + 1]; /* console I/O buffer */
static char * delete_char (char *buffer, char *p, int *colp, int *np, int plen); static char erase_seq[] = "\b \b"; /* erase sequence */ @@ -546,7 +546,7 @@ static int hist_cur = -1; unsigned hist_num = 0;
char* hist_list[HIST_MAX]; -char hist_lines[HIST_MAX][HIST_SIZE]; +char hist_lines[HIST_MAX][HIST_SIZE + 1]; /* Save room for NULL */
#define add_idx_minus_one() ((hist_add_idx == 0) ? hist_max : hist_add_idx-1)

Match history buffer size to console buffer size. History buffer size was hard coded to 256, artificially limiting the command buffer size. The history buffer now tracks CONFIG_SYS_CBSIZE.
Signed-off-by: John Schmoller jschmoller@xes-inc.com --- common/main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/common/main.c b/common/main.c index 2a75550..7ac657f 100644 --- a/common/main.c +++ b/common/main.c @@ -526,7 +526,7 @@ void reset_cmd_timeout(void)
#define CTL_CH(c) ((c) - 'a' + 1)
-#define MAX_CMDBUF_SIZE 256 +#define MAX_CMDBUF_SIZE CONFIG_SYS_CBSIZE
#define CTL_BACKSPACE ('\b') #define DEL ((char)255)

Dear John Schmoller,
In message ca4aa654e79efc5c561fddeeea7c4d1806654b54.1268408614.git.jschmoller@xes-inc.com you wrote:
Match history buffer size to console buffer size. History buffer size was hard coded to 256, artificially limiting the command buffer size. The history buffer now tracks CONFIG_SYS_CBSIZE.
Signed-off-by: John Schmoller jschmoller@xes-inc.com
common/main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Applied to "next" branch. Thanks.
Best regards,
Wolfgang Denk

Dear John Schmoller,
In message 69e2af90a136fea8e81009f4d58ffe28eddf7362.1268408614.git.jschmoller@xes-inc.com you wrote:
When CONFIG_SYS_CBSIZE equals MAX_CMDBUF_SIZE, a command string of maximum length will overwrite part of the history buffer, causing the board to die. Expand the console_buffer and hist_lines buffer by one character each to hold the missing NULL char.
Signed-off-by: John Schmoller jschmoller@xes-inc.com
common/main.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
Applied to "next" branch. Thanks.
Best regards,
Wolfgang Denk
participants (2)
-
John Schmoller
-
Wolfgang Denk