[llvm-dev] Wrong relocation emitted when building shared libraries with Control Flow Integrity

Artem Dinaburg via llvm-dev llvm-dev at lists.llvm.org
Sat Feb 4 21:53:18 PST 2017


Hi Peter,

Thanks for the help! I can confirm its fixed in the 4.0 release (tested with clang version 4.0.0-svn293947-1~exp1).

Thanks,
Artem

> On Feb 4, 2017, at 5:04 PM, Peter Collingbourne <peter at pcc.me.uk> wrote:
> 
> Hi Artem,
> 
> Can you please try LLVM trunk (or the upcoming 4.0 release)? I believe that your bug was fixed by r286611.
> 
> Peter
> 
> On Fri, Feb 3, 2017 at 11:02 PM, Artem Dinaburg via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
> Hello,
> 
> I am encountering a linking failure when using Control Flow Integrity while building a shared library. It looks like the wrong relocation type is being emitted for functions referenced via the PLT. I am using clang 3.9.
> 
> The error message I get is:
> 
> /usr/bin/ld.gold: error: /tmp/lto-llvm-df723d.o: requires dynamic R_X86_64_PC32 reloc against 'free' which may overflow at runtime; recompile with -fPIC
> 
> Recompiling with -fPIC does not actually help. I've managed to create a minimal reproducible testcase. Full command line and code to reproduce are below.
> 
> --- hello.c ---
> #include <stdio.h>
> #include <stdlib.h>
> 
> typedef void(*freeptr)(void*);
> 
> int getval(freeptr fp) {
>     void *m = malloc(sizeof(int));
>     if(m) {
>         fp(m);
>     }
>     return 42;
> }
> 
> int export() {
>     printf("Test: %d\n", getval(free));
>     return 0;
> }
> ---
> 
> --- command line ---
> clang-3.9 -shared -fuse-ld=gold -flto -fsanitize=cfi-icall -fPIC -o libhello.so hello.c
> ---
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
> 
> 
> 
> 
> -- 
> -- 
> Peter

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170205/c45752a6/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3970 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170205/c45752a6/attachment.bin>


More information about the llvm-dev mailing list