Bug 1748194 - glibc: Permit moving versioned symbols between different sonames
Summary: glibc: Permit moving versioned symbols between different sonames
Status: CLOSED DUPLICATE of bug 1764231
Alias: None
Product: Red Hat Enterprise Linux 8
Classification: Red Hat
Component: glibc
Version: 8.2
Hardware: All
OS: Linux
Target Milestone: pre-dev-freeze
: 8.2
Assignee: glibc team
QA Contact: qe-baseos-tools-bugs
Depends On: 1473680
Blocks: 1738779 1748197
TreeView+ depends on / blocked
Reported: 2019-09-03 07:06 UTC by Florian Weimer
Modified: 2021-09-17 12:20 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Last Closed: 2019-11-15 18:29:15 UTC
Type: Bug
Target Upstream Version:

Attachments (Terms of Use)

System ID Private Priority Status Summary Last Updated
Sourceware 24741 0 'P2' 'RESOLVED' 'ld.so should not require that a versioned symbol is always implemented in the same library' 2019-11-15 18:25:45 UTC

Description Florian Weimer 2019-09-03 07:06:01 UTC
The glibc dynamic linker currently prevents moving a symbol from one soname to another if the symbol is versioned.  This is an artifact of the way symbol-specific versioning is implemented in glibc.  There is no fundamental technical reason to disallow this, and glibc 2.30 upstream lifts this restriction.

Upstream commit:

commit f0b2132b35248c1f4a80f62a2c38cddcc802aa8c
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri Jun 28 10:12:50 2019 +0200

    ld.so: Support moving versioned symbols between sonames [BZ #24741]
    This change should be fully backwards-compatible because the old
    code aborted the load if a soname mismatch was encountered
    (instead of searching further for a matching symbol).  This means
    that no different symbols are found.
    The soname check was explicitly disabled for the skip_map != NULL
    case.  However, this only happens with dl(v)sym and RTLD_NEXT,
    and those lookups do not come with a verneed entry that could be used
    for the check.
    The error check was already explicitly disabled for the skip_map !=
    NULL case, that is, when dl(v)sym was called with RTLD_NEXT.  But
    _dl_vsym always sets filename in the struct r_found_version argument
    to NULL, so the check was not active anyway.  This means that
    symbol lookup results for the skip_map != NULL case do not change,

Comment 2 Carlos O'Donell 2019-11-15 18:29:15 UTC

*** This bug has been marked as a duplicate of bug 1764231 ***

Note You need to log in before you can comment on or make changes to this bug.