lkml.org 
[lkml]   [2019]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 29/59] r8152: Set memory to all 0xFFs on failed reg reads
    Date
    From: Prashant Malani <pmalani@chromium.org>

    [ Upstream commit f53a7ad189594a112167efaf17ea8d0242b5ac00 ]

    get_registers() blindly copies the memory written to by the
    usb_control_msg() call even if the underlying urb failed.

    This could lead to junk register values being read by the driver, since
    some indirect callers of get_registers() ignore the return values. One
    example is:
    ocp_read_dword() ignores the return value of generic_ocp_read(), which
    calls get_registers().

    So, emulate PCI "Master Abort" behavior by setting the buffer to all
    0xFFs when usb_control_msg() fails.

    This patch is copied from the r8152 driver (v2.12.0) published by
    Realtek (www.realtek.com).

    Signed-off-by: Prashant Malani <pmalani@chromium.org>
    Acked-by: Hayes Wang <hayeswang@realtek.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/usb/r8152.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
    index 66beff4d76467..455eec3c46942 100644
    --- a/drivers/net/usb/r8152.c
    +++ b/drivers/net/usb/r8152.c
    @@ -787,8 +787,11 @@ int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
    ret = usb_control_msg(tp->udev, usb_rcvctrlpipe(tp->udev, 0),
    RTL8152_REQ_GET_REGS, RTL8152_REQT_READ,
    value, index, tmp, size, 500);
    + if (ret < 0)
    + memset(data, 0xff, size);
    + else
    + memcpy(data, tmp, size);

    - memcpy(data, tmp, size);
    kfree(tmp);

    return ret;
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-09-20 00:31    [W:3.751 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site