commit 21d69845e411bfcee426070af5416ddfba350529
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Feb 21 10:03:01 2013 -0800

    3.0.66

commit f3720830189356bed9247951ae4d7a1a6347ff10
Author: Alexandre SIMON <Alexandre.Simon@univ-lorraine.fr>
Date:   Fri Feb 1 15:31:54 2013 +0100

    printk: fix buffer overflow when calling log_prefix function from call_console_drivers
    
    This patch corrects a buffer overflow in kernels from 3.0 to 3.4 when calling
    log_prefix() function from call_console_drivers().
    
    This bug existed in previous releases but has been revealed with commit
    162a7e7500f9664636e649ba59defe541b7c2c60 (2.6.39 => 3.0) that made changes
    about how to allocate memory for early printk buffer (use of memblock_alloc).
    It disappears with commit 7ff9554bb578ba02166071d2d487b7fc7d860d62 (3.4 => 3.5)
    that does a refactoring of printk buffer management.
    
    In log_prefix(), the access to "p[0]", "p[1]", "p[2]" or
    "simple_strtoul(&p[1], &endp, 10)" may cause a buffer overflow as this
    function is called from call_console_drivers by passing "&LOG_BUF(cur_index)"
    where the index must be masked to do not exceed the buffer's boundary.
    
    The trick is to prepare in call_console_drivers() a buffer with the necessary
    data (PRI field of syslog message) to be safely evaluated in log_prefix().
    
    This patch can be applied to stable kernel branches 3.0.y, 3.2.y and 3.4.y.
    
    Without this patch, one can freeze a server running this loop from shell :
      $ export DUMMY=`cat /dev/urandom | tr -dc '12345AZERTYUIOPQSDFGHJKLMWXCVBNazertyuiopqsdfghjklmwxcvbn' | head -c255`
      $ while true do ; echo $DUMMY > /dev/kmsg ; done
    
    The "server freeze" depends on where memblock_alloc does allocate printk buffer :
    if the buffer overflow is inside another kernel allocation the problem may not
    be revealed, else the server may hangs up.
    
    Signed-off-by: Alexandre SIMON <Alexandre.Simon@univ-lorraine.fr>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>