• Jason A. Donenfeld's avatar
    kbuild: treat char as always unsigned · 3bc753c0
    Jason A. Donenfeld authored
    Recently, some compile-time checking I added to the clamp_t family of
    functions triggered a build error when a poorly written driver was
    compiled on ARM, because the driver assumed that the naked `char` type
    is signed, but ARM treats it as unsigned, and the C standard says it's
    architecture-dependent.
    
    I doubt this particular driver is the only instance in which
    unsuspecting authors make assumptions about `char` with no `signed` or
    `unsigned` specifier. We were lucky enough this time that that driver
    used `clamp_t(char, negative_value, positive_value)`, so the new
    checking code found it, and I've sent a patch to fix it, but there are
    likely other places lurking that won't be so easily unearthed.
    
    So let's just eliminate this particular variety of heisensign bugs
    entirely. Set `-funsigned-char` globally, so that gcc makes the type
    unsigned on all architectures.
    
    This will break things in some places and fix things in others, so this
    will likely cause a bit of churn while reconciling the type misuse.
    
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://lore.kernel.org/lkml/202210190108.ESC3pc3D-lkp@intel.com/Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    3bc753c0
Makefile 69 KB