bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/28875] ld should warn or error out about creating copy relocs &


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/28875] ld should warn or error out about creating copy relocs & direct external references for protected symbols
Date: Fri, 11 Feb 2022 18:33:18 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=28875

--- Comment #7 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The binutils-2_38-branch branch has been updated by H.J. Lu
<hjl@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=caa6172de4b5100c9b45fd03eae714167a6085c1

commit caa6172de4b5100c9b45fd03eae714167a6085c1
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Feb 9 15:51:22 2022 -0800

    x86: Disallow invalid relocation against protected symbol

    I am checking this into master and will backport it to 2.38 branch.

    H.J
    ----
    On x86, GCC 12 supports -mno-direct-extern-access to enable canonical
    reference to protected function and disable copy relocation.  With
    -mno-direct-extern-access, the canonical protected function symbols must
    be accessed via canonical reference and the protected data symbols in
    shared libraries are non-copyable. Under glibc 2.35, non-canonical
    reference to the canonical protected function will get the run-time error:

    ./y: internal_f: ./libfoo.so: non-canonical reference to canonical
protected function

    and copy relocations against the non-copyable protected symbols will get
    the run-time error:

    ./x: internal_i: ./libfoo.so: copy relocation against non-copyable
protected symbol

    Update x86 linker to disallow non-canonical reference to the canonical
    protected function:

    ld: plt.o: non-canonical reference to canonical protected function
`internal_f' in libfoo.so
    ld: failed to set dynamic section sizes: bad value

    and copy relocation against the non-copyable protected symbol:

    ld: main.o: copy relocation against non-copyable protected symbol
`internal_i' in libfoo.so

    at link-time.

    bfd/

            PR ld/28875
            * elf-properties.c (_bfd_elf_parse_gnu_properties): Don't skip
            shared libraries for GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS.
            * elf32-i386.c (elf_i386_scan_relocs): Disallow non-canonical
            reference to canonical protected function.
            * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
            * elfxx-x86.c (elf_x86_allocate_dynrelocs): Don't allow copy
            relocation against non-copyable protected symbol.

    ld/

            PR ld/28875
            * testsuite/ld-i386/i386.exp: Check non-canonical reference to
            canonical protected function and check copy relocation against
            non-copyable protected symbol.
            * testsuite/ld-i386/pr21997-1.err: New file.
            * testsuite/ld-i386/pr28875.err: Likewise.
            * testsuite/ld-i386/pr28875a.c: Likewise.
            * testsuite/ld-i386/pr28875b.c: Likewise.
            * testsuite/ld-x86-64/pr21997-1a.err: Updated.
            * testsuite/ld-x86-64/pr21997-1b.err: Likewise.
            * testsuite/ld-x86-64/pr28875-data.err: New file.
            * testsuite/ld-x86-64/pr28875-func.err: Likewise.
            * testsuite/ld-x86-64/x86-64.exp: Check non-canonical reference
            to canonical protected function and check copy relocation against
            non-copyable protected symbol.

    (cherry picked from commit ebb191adac4ab45498dec0bfaac62f0a33537ba4)

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]