lkml.org 
[lkml]   [2020]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.8 26/29] usb: cdns3: gadget: suspicious implicit sign extension
    Date
    From: Peter Chen <peter.chen@nxp.com>

    [ Upstream commit 5fca3f062879f8e5214c56f3e3e2be6727900f5d ]

    The code:
    trb->length = cpu_to_le32(TRB_BURST_LEN(priv_ep->trb_burst_size)
    | TRB_LEN(length));

    TRB_BURST_LEN(priv_ep->trb_burst_size) may be overflow for int 32 if
    priv_ep->trb_burst_size is equal or larger than 0x80;

    Below is the Coverity warning:
    sign_extension: Suspicious implicit sign extension: priv_ep->trb_burst_size
    with type u8 (8 bits, unsigned) is promoted in priv_ep->trb_burst_size << 24
    to type int (32 bits, signed), then sign-extended to type unsigned long
    (64 bits, unsigned). If priv_ep->trb_burst_size << 24 is greater than 0x7FFFFFFF,
    the upper bits of the result will all be 1.

    To fix it, it needs to add an explicit cast to unsigned int type for ((p) << 24).

    Reviewed-by: Jun Li <jun.li@nxp.com>
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/usb/cdns3/gadget.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/usb/cdns3/gadget.h b/drivers/usb/cdns3/gadget.h
    index 52765b098b9e1..28c4f6aca6891 100644
    --- a/drivers/usb/cdns3/gadget.h
    +++ b/drivers/usb/cdns3/gadget.h
    @@ -1067,7 +1067,7 @@ struct cdns3_trb {
    #define TRB_TDL_SS_SIZE_GET(p) (((p) & GENMASK(23, 17)) >> 17)

    /* transfer_len bitmasks - bits 31:24 */
    -#define TRB_BURST_LEN(p) (((p) << 24) & GENMASK(31, 24))
    +#define TRB_BURST_LEN(p) ((unsigned int)((p) << 24) & GENMASK(31, 24))
    #define TRB_BURST_LEN_GET(p) (((p) & GENMASK(31, 24)) >> 24)

    /* Data buffer pointer bitmasks*/
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-11-03 02:25    [W:2.556 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site