lkml.org 
[lkml]   [2021]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 117/121] tty: hvc: replace BUG_ON() with negative return value
    Date
    From: Juergen Gross <jgross@suse.com>

    commit e679004dec37566f658a255157d3aed9d762a2b7 upstream.

    Xen frontends shouldn't BUG() in case of illegal data received from
    their backends. So replace the BUG_ON()s when reading illegal data from
    the ring page with negative return values.

    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Link: https://lore.kernel.org/r/20210707091045.460-1-jgross@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/tty/hvc/hvc_xen.c | 17 ++++++++++++++---
    1 file changed, 14 insertions(+), 3 deletions(-)

    --- a/drivers/tty/hvc/hvc_xen.c
    +++ b/drivers/tty/hvc/hvc_xen.c
    @@ -86,7 +86,11 @@ static int __write_console(struct xencon
    cons = intf->out_cons;
    prod = intf->out_prod;
    mb(); /* update queue values before going on */
    - BUG_ON((prod - cons) > sizeof(intf->out));
    +
    + if ((prod - cons) > sizeof(intf->out)) {
    + pr_err_once("xencons: Illegal ring page indices");
    + return -EINVAL;
    + }

    while ((sent < len) && ((prod - cons) < sizeof(intf->out)))
    intf->out[MASK_XENCONS_IDX(prod++, intf->out)] = data[sent++];
    @@ -114,7 +118,10 @@ static int domU_write_console(uint32_t v
    */
    while (len) {
    int sent = __write_console(cons, data, len);
    -
    +
    + if (sent < 0)
    + return sent;
    +
    data += sent;
    len -= sent;

    @@ -138,7 +145,11 @@ static int domU_read_console(uint32_t vt
    cons = intf->in_cons;
    prod = intf->in_prod;
    mb(); /* get pointers before reading ring */
    - BUG_ON((prod - cons) > sizeof(intf->in));
    +
    + if ((prod - cons) > sizeof(intf->in)) {
    + pr_err_once("xencons: Illegal ring page indices");
    + return -EINVAL;
    + }

    while (cons != prod && recv < len)
    buf[recv++] = intf->in[MASK_XENCONS_IDX(cons++, intf->in)];

    \
     
     \ /
      Last update: 2021-11-29 19:36    [W:4.015 / U:0.472 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site