Commit a76bfd0d authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Linus Torvalds

initcalls: Fix m68k build and possible buffer overflow

This patch fixes a build bug on m68k - gcc decides to emit a call to the
strlen library function, which we don't implement.

More importantly - my previous patch "init: don't lose initcall return
values" (commit e662e1cf) had introduced
potential buffer overflow by wrong calculation of string accumulator
size.

Use strlcat() instead, fixing both bugs.

Many thanks Andreas Schwab and Geert Uytterhoeven for helping
to catch and fix the bug.
Signed-off-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent e0df154f
...@@ -697,7 +697,7 @@ static void __init do_one_initcall(initcall_t fn) ...@@ -697,7 +697,7 @@ static void __init do_one_initcall(initcall_t fn)
{ {
int count = preempt_count(); int count = preempt_count();
ktime_t t0, t1, delta; ktime_t t0, t1, delta;
char msgbuf[40]; char msgbuf[64];
int result; int result;
if (initcall_debug) { if (initcall_debug) {
...@@ -722,11 +722,11 @@ static void __init do_one_initcall(initcall_t fn) ...@@ -722,11 +722,11 @@ static void __init do_one_initcall(initcall_t fn)
sprintf(msgbuf, "error code %d ", result); sprintf(msgbuf, "error code %d ", result);
if (preempt_count() != count) { if (preempt_count() != count) {
strncat(msgbuf, "preemption imbalance ", sizeof(msgbuf)); strlcat(msgbuf, "preemption imbalance ", sizeof(msgbuf));
preempt_count() = count; preempt_count() = count;
} }
if (irqs_disabled()) { if (irqs_disabled()) {
strncat(msgbuf, "disabled interrupts ", sizeof(msgbuf)); strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
local_irq_enable(); local_irq_enable();
} }
if (msgbuf[0]) { if (msgbuf[0]) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment