Skip to content
  • Andy Lutomirski's avatar
    x86/vdso: Error out in vdso2c if DT_RELA is present · 6a89d710
    Andy Lutomirski authored
    
    
    vdso2c was checking for various types of relocations to detect when
    the vdso had undefined symbols or was otherwise dependent on
    relocation at load time.  Undefined symbols in the vdso would fail if
    accessed at runtime, and certain implementation errors (e.g. branch
    profiling or incorrect symbol visibilities) could result in data
    access through the GOT that requires relocations.  This could be
    as simple as:
    
        extern char foo;
        return foo;
    
    Without some kind of visibility control, the compiler would assume
    that foo could be interposed at load time and would generate a
    relocation.
    
    x86-64 and x32 (as opposed to i386) use explicit-addent (RELA) instead
    of implicit-addent (REL) relocations for data access, and vdso2c
    forgot to detect those.
    
    Whether these bad relocations would actually fail at runtime depends
    on what the linker sticks in the unrelocated references.  Nonetheless,
    these relocations have no business existing in the vDSO and should be
    fixed rather than silently ignored.
    
    This error could trigger on some configurations due to branch
    profiling.  The previous patch fixed that.
    
    Signed-off-by: default avatarAndy Lutomirski <luto@amacapital.net>
    Link: http://lkml.kernel.org/r/74ef0c00b4d2a3b573e00a4113874e62f772e348.1403642755.git.luto@amacapital.net
    
    
    Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
    6a89d710