• Helge Deller's avatar
    kernel/signal.c: add compile-time check for __ARCH_SI_PREAMBLE_SIZE · 41b27154
    Helge Deller authored
    The value of __ARCH_SI_PREAMBLE_SIZE defines the size (including
    padding) of the part of the struct siginfo that is before the union, and
    it is then used to calculate the needed padding (SI_PAD_SIZE) to make
    the size of struct siginfo equal to 128 (SI_MAX_SIZE) bytes.
    
    Depending on the target architecture and word width it equals to either
    3 or 4 times sizeof int.
    
    Since the very beginning we had __ARCH_SI_PREAMBLE_SIZE wrong on the
    parisc architecture for the 64bit kernel build.  It's even more
    frustrating, because it can easily be checked at compile time if the
    value was defined correctly.
    
    This patch adds such a check for the correctness of
    __ARCH_SI_PREAMBLE_SIZE in the hope that it will prevent existing and
    future architectures from running into the same problem.
    
    I refrained from replacing __ARCH_SI_PREAMBLE_SIZE by offsetof() in
    copy_siginfo() in include/asm-generic/siginfo.h, because a) it doesn't
    make any difference and b) it's used in the Documentation/kmemcheck.txt
    example.
    
    I ran this patch through the 0-DAY kernel test infrastructure and only
    the parisc architecture triggered as expected.  That means that this
    patch should be OK for all major architectures.
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    41b27154
signal.c 94.2 KB