• Arnd Bergmann's avatar
    x86/boot/tboot: Avoid Wstringop-overread-warning · cdc34cb8
    Arnd Bergmann authored
    gcc-11 warns about using string operations on pointers that are
    defined at compile time as offsets from a NULL pointer. Unfortunately
    that also happens on the result of fix_to_virt(), which is a
    compile-time constant for a constant input:
    
      arch/x86/kernel/tboot.c: In function 'tboot_probe':
      arch/x86/kernel/tboot.c:70:13: error: '__builtin_memcmp_eq' specified bound 16 exceeds source size 0 [-Werror=stringop-overread]
         70 |         if (memcmp(&tboot_uuid, &tboot->uuid, sizeof(tboot->uuid))) {
            |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    I hope this can get addressed in gcc-11 before the release.
    
    As a workaround, split up the tboot_probe() function in two halves
    to separate the pointer generation from the usage. This is a bit
    ugly, and hopefully gcc understands that the code is actually correct
    before it learns to peek into the noinline function.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Martin Sebor <msebor@gmail.com>
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578
    Link: https://lore.kernel.org/r/20210322160253.4032422-3-arnd@kernel.org
    cdc34cb8
tboot.c 12.8 KB