[U-Boot] [PATCH] [x86] [zboot] Change printf to puts to avoid a buffer overflow

printf as currently implemented in u-boot has a problem where it can overflow an internal buffer if it prints an expanded string that's too long. Our command lines are long enough to cause this problem. A fix should be coming, but in the mean time this change replaces a problematic printf with a few calls to puts that have the same effect. This may perform slightly better because it should avoid a copy and scanning for format specifiers. The amount of time it actually takes up is very tiny relative to everything else so in practice that's probably irrelevant.
Signed-off-by: Gabe Black gabeblack@chromium.org --- arch/x86/lib/zimage.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index d2dd6fd..a48ae6c 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -78,7 +78,9 @@ static void build_command_line(char *command_line, int auto_boot) }
- printf("Kernel command line: "%s"\n", command_line); + puts("Kernel command line: ""); + puts(command_line); + puts(""\n"); }
void *load_zimage(char *image, unsigned long kernel_size,

Hi Gabe,
On 08/11/11 20:21, Gabe Black wrote:
printf as currently implemented in u-boot has a problem where it can overflow an internal buffer if it prints an expanded string that's too long. Our command lines are long enough to cause this problem. A fix should be coming, but in the mean time this change replaces a problematic printf with a few calls to puts that have the same effect. This may perform slightly better because it should avoid a copy and scanning for format specifiers. The amount of time it actually takes up is very tiny relative to everything else so in practice that's probably irrelevant.
Signed-off-by: Gabe Black gabeblack@chromium.org
arch/x86/lib/zimage.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
Can you please rebase against u-boot-x86/master and re-submit
While you're at it, please change tag to 'x86:' style
Thanks,
Graeme

printf as currently implemented in u-boot has a problem where it can overflow an internal buffer if it prints an expanded string that's too long. Our command lines are long enough to cause this problem. A fix should be coming, but in the mean time this change replaces a problematic printf with a few calls to puts that have the same effect. This may perform slightly better because it should avoid a copy and scanning for format specifiers. The amount of time it actually takes up is very tiny relative to everything else so in practice that's probably irrelevant.
Signed-off-by: Gabe Black gabeblack@chromium.org --- Changes in v2: - Rebase onto the x86 repository. - Change the style of the summary tag.
arch/x86/lib/zimage.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index 8b42b5c..6843ff6 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -75,7 +75,9 @@ static void build_command_line(char *command_line, int auto_boot) if (env_command_line) strcat(command_line, env_command_line);
- printf("Kernel command line: "%s"\n", command_line); + puts("Kernel command line: ""); + puts(command_line); + puts(""\n"); }
void *load_zimage(char *image, unsigned long kernel_size,

On 13/11/11 13:02, Gabe Black wrote:
printf as currently implemented in u-boot has a problem where it can overflow an internal buffer if it prints an expanded string that's too long. Our command lines are long enough to cause this problem. A fix should be coming, but in the mean time this change replaces a problematic printf with a few calls to puts that have the same effect. This may perform slightly better because it should avoid a copy and scanning for format specifiers. The amount of time it actually takes up is very tiny relative to everything else so in practice that's probably irrelevant.
Signed-off-by: Gabe Black gabeblack@chromium.org
Applied to u-boot-x86/master
Thanks,
Graeme
participants (3)
-
Gabe Black
-
Graeme Russ
-
Mike Frysinger