lkml.org 
[lkml]   [2019]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 054/132] mISDN: Fix type of switch control variable in ctrl_teimanager
    Date
    From: Nathan Chancellor <natechancellor@gmail.com>

    [ Upstream commit aeb5e02aca91522733eb1db595ac607d30c87767 ]

    Clang warns (trimmed for brevity):

    drivers/isdn/mISDN/tei.c:1193:7: warning: overflow converting case value
    to switch condition type (2147764552 to 18446744071562348872) [-Wswitch]
    case IMHOLD_L1:
    ^
    drivers/isdn/mISDN/tei.c:1187:7: warning: overflow converting case value
    to switch condition type (2147764550 to 18446744071562348870) [-Wswitch]
    case IMCLEAR_L2:
    ^
    2 warnings generated.

    The root cause is that the _IOC macro can generate really large numbers,
    which don't find into type int. My research into how GCC and Clang are
    handling this at a low level didn't prove fruitful and surveying the
    kernel tree shows that aside from here and a few places in the scsi
    subsystem, everything that uses _IOC is at least of type 'unsigned int'.
    Make that change here because as nothing in this function cares about
    the signedness of the variable and it removes ambiguity, which is never
    good when dealing with compilers.

    While we're here, remove the unnecessary local variable ret (just return
    -EINVAL and 0 directly).

    Link: https://github.com/ClangBuiltLinux/linux/issues/67
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/isdn/mISDN/tei.c | 7 +++----
    1 file changed, 3 insertions(+), 4 deletions(-)

    diff --git a/drivers/isdn/mISDN/tei.c b/drivers/isdn/mISDN/tei.c
    index 592f597d89518..8261afbbafb05 100644
    --- a/drivers/isdn/mISDN/tei.c
    +++ b/drivers/isdn/mISDN/tei.c
    @@ -1180,8 +1180,7 @@ static int
    ctrl_teimanager(struct manager *mgr, void *arg)
    {
    /* currently we only have one option */
    - int *val = (int *)arg;
    - int ret = 0;
    + unsigned int *val = (unsigned int *)arg;

    switch (val[0]) {
    case IMCLEAR_L2:
    @@ -1197,9 +1196,9 @@ ctrl_teimanager(struct manager *mgr, void *arg)
    test_and_clear_bit(OPTION_L1_HOLD, &mgr->options);
    break;
    default:
    - ret = -EINVAL;
    + return -EINVAL;
    }
    - return ret;
    + return 0;
    }

    /* This function does create a L2 for fixed TEI in NT Mode */
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-11-27 21:36    [W:4.044 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site