From: kaf24@firebug.cl.cam.ac.uk Date: Mon, 12 Jun 2006 09:05:55 +0000 (+0100) Subject: [XEN] Fix read_console_ring() when passed a small buffer. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15972^2~11 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d25cfced9221ae9da24a8040166c13fbe64c3f49;p=xen.git [XEN] Fix read_console_ring() when passed a small buffer. From: Akio Takebe Signed-off-by: Keir Fraser --- diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index f3a547038e..9e474d94cf 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -230,7 +230,7 @@ long read_console_ring(XEN_GUEST_HANDLE(char) str, u32 *pcount, int clear) sofar = 0; c = conringc; - while ( c != conringp ) + while ( (c != conringp) && (sofar < max) ) { idx = CONRING_IDX_MASK(c); len = conringp - c; @@ -247,7 +247,10 @@ long read_console_ring(XEN_GUEST_HANDLE(char) str, u32 *pcount, int clear) if ( clear ) { spin_lock_irqsave(&console_lock, flags); - conringc = conringp; + if ( (conringp - c) > CONRING_SIZE ) + conringc = conringp - CONRING_SIZE; + else + conringc = c; spin_unlock_irqrestore(&console_lock, flags); }