• Robin Murphy's avatar
    coresight: tpiu: Fix disabling timeouts · ccff2dfa
    Robin Murphy authored
    Probing the TPIU driver under UBSan triggers an out-of-bounds shift
    warning in coresight_timeout():
    
    ...
    [    5.677530] UBSAN: Undefined behaviour in drivers/hwtracing/coresight/coresight.c:929:16
    [    5.685542] shift exponent 64 is too large for 64-bit type 'long unsigned int'
    ...
    
    On closer inspection things are exponentially out of whack because we're
    passing a bitmask where a bit number should be. Amusingly, it seems that
    both calls will find their expected values by sheer luck and appear to
    succeed: 1 << FFCR_FON_MAN ends up at bit 64 which whilst undefined
    evaluates as zero in practice, while 1 << FFSR_FT_STOPPED finds bit 2
    (TCPresent) which apparently is usually tied high.
    
    Following the examples of other drivers, define separate FOO and FOO_BIT
    macros for masks vs. indices, and put things right.
    
    CC: Robert Walker <robert.walker@arm.com>
    CC: Mike Leach <mike.leach@linaro.org>
    CC: Mathieu Poirier <mathieu.poirier@linaro.org>
    Fixes: 11595db8 ("coresight: Fix disabling of CoreSight TPIU")
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ccff2dfa
coresight-tpiu.c 5.13 KB