Re: [PATCH] mISDN: Fix type of switch control variable in ctrl_teimanager
From: David Miller
Date: Mon Oct 22 2018 - 22:30:52 EST
From: Nathan Chancellor <natechancellor@xxxxxxxxx>
Date: Fri, 19 Oct 2018 11:00:30 -0700
> 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@xxxxxxxxx>