Red Hat Bugzilla – Bug 1032628
Symbol lookup in elf/dl-lookup.c results in returning wrong values
Last modified: 2016-11-24 07:12:06 EST
Description of problem: Symbol lookup in elf/dl-lookup.c (dl_lookup_x) incorrectly handles combination of STB_GNU_UNIQUE binding and ELF_RTYPE_CLASS_COPY relocation resulting in returning wrong values, leading to copy relocation effectively not being made. This bug was reported earlier was fixed in glibc-2.13 https://sourceware.org/bugzilla/show_bug.cgi?id=12510 Version-Release number of selected component (if applicable): Red Hat Enterprise Linux 6.4 glibc-2.12-1.107.el6_4.4.x86_64 How reproducible: Always Steps to Reproduce: $ cat lib.h template<typename T> struct S { static int i; }; $ cat lib.cc #include "lib.h" template<typename T> int S<T>::i = 1; static int i = S<char>::i; $ cat test.cc #include "lib.h" #include <cstdio> int main() { std::printf("%d\n", S<char>::i); return 0; } $ gcc -shared -fPIC -o lib.so lib.cc $ gcc -o test test.cc lib.so -lstdc++ Actual results: $ LD_LIBRARY_PATH=. ./test 0 Expected results: $ LD_LIBRARY_PATH=. ./test 1 Additional info: This issue was reported by our customer. The test cases performed at their end are attached. I have tested the patch at my end by rebuilding glibc and could find that the patch fixes the issue. # Without patch /lib64/ld-linux-x86-64.so.2 --library-path .:/lib64:/usr/lib64 ./test 0 # With patch included /opt/glibc/lib64/ld-linux-x86-64.so.2 --library-path .:/lib64:/usr/lib64 ./test 1 The patch is also attached to this bug report.
Created attachment 826658 [details] Customer Test Case
Created attachment 826659 [details] Patch
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHSA-2014-1391.html