[Andreas Schwab - Wed, May 14, 2008 at 04:55:37PM +0200] | Cyrill Gorcunov <gorcunov@xxxxxxxxx> writes: | | > I think it would help to see ..tmp_vmlinux1.cmd to ensure for inclusion | > of lib/lib.a. strlen was there without my patch as Andreas already pointed, | > I've just added strncat wich is coming from lib/string.o for this arch. | | Actually the way strncat is used here is broken anyway, it does not | prevent array overrun. The third argument of strncat only limits the | amount of characters copied, without taking into account the length of | the string already in the buffer. Consequently gcc has optimized the | call to strncat into a simple call to strcat, since none of the copied | strings are longer than sizeof(msgbuf). This strcat call is then | expanded to include a call to strlen. | | So a better fix would probably be to make msgbuf big enough and use | strcat instead. | | Andreas. | | Andreas, could you test/review the following patch (what is worse - I *have* introduced buffer overflow with my patch, so I think we should fix it asap) --- Index: linux-2.6.git/init/main.c =================================================================== --- linux-2.6.git.orig/init/main.c 2008-05-14 17:55:10.000000000 +0400 +++ linux-2.6.git/init/main.c 2008-05-14 19:11:18.000000000 +0400 @@ -702,7 +702,7 @@ static void __init do_initcalls(void) for (call = __initcall_start; call < __initcall_end; call++) { ktime_t t0, t1, delta; - char msgbuf[40]; + char msgbuf[64]; int result; if (initcall_debug) { @@ -729,11 +729,11 @@ static void __init do_initcalls(void) sprintf(msgbuf, "error code %d ", result); if (preempt_count() != count) { - strncat(msgbuf, "preemption imbalance ", sizeof(msgbuf)); + strcat(msgbuf, "preemption imbalance "); preempt_count() = count; } if (irqs_disabled()) { - strncat(msgbuf, "disabled interrupts ", sizeof(msgbuf)); + strcat(msgbuf, "disabled interrupts "); local_irq_enable(); } if (msgbuf[0]) { -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html