• Kees Cook's avatar
    locking/refcounts, x86/asm: Use unique .text section for refcount exceptions · 564c9cc8
    Kees Cook authored
    Using .text.unlikely for refcount exceptions isn't safe because gcc may
    move entire functions into .text.unlikely (e.g. in6_dev_dev()), which
    would cause any uses of a protected refcount_t function to stay inline
    with the function, triggering the protection unconditionally:
    
            .section        .text.unlikely,"ax",@progbits
            .type   in6_dev_get, @function
    in6_dev_getx:
    .LFB4673:
            .loc 2 4128 0
            .cfi_startproc
    ...
            lock; incl 480(%rbx)
            js 111f
            .pushsection .text.unlikely
    111:    lea 480(%rbx), %rcx
    112:    .byte 0x0f, 0xff
    .popsection
    113:
    
    This creates a unique .text..refcount section and adds an additional
    test to the exception handler to WARN in the case of having none of OF,
    SF, nor ZF set so we can see things like this more easily in the future.
    
    The double dot for the section name keeps it out of the TEXT_MAIN macro
    namespace, to avoid collisions and so it can be put at the end with
    text.unlikely to keep the cold code together.
    
    See commit:
    
      cb87481e ("kbuild: linker script do not match C names unless LD_DEAD_CODE_DATA_ELIMINATION is configured")
    
    ... which matches C names: [a-zA-Z0-9_] but not ".".
    Reported-by: default avatarMike Galbraith <efault@gmx.de>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Elena <elena.reshetova@intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-arch <linux-arch@vger.kernel.org>
    Fixes: 7a46ec0e ("locking/refcounts, x86/asm: Implement fast refcount overflow protection")
    Link: http://lkml.kernel.org/r/1504382986-49301-2-git-send-email-keescook@chromium.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    564c9cc8
vmlinux.lds.h 28 KB