public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [RFC][PATCH v8 00/20] Implementation of RTLD_SHARED for dlmopen
@ 2021-02-09 17:18 Vivek Das Mohapatra
  2021-02-09 17:18 ` [RFC][PATCH v8 01/20] Declare and describe the dlmopen RTLD_SHARED flag Vivek Das Mohapatra
                   ` (22 more replies)
  0 siblings, 23 replies; 78+ messages in thread
From: Vivek Das Mohapatra @ 2021-02-09 17:18 UTC (permalink / raw)
  To: libc-alpha

This is a revision of a previous patchset that I posted here
regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 

Introduction:

=======================================================================
  As discussed in the URL above dlmopen requires a mechanism for
  [optionally] sharing some objects between more than one namespace.

  The following patchset provides an implementation for this: If an
  object is loaded with the new RTLD_SHARED flag we instead ensure
  that a "master" copy exists (and is flagged as no-delete) in the
  main namespace and a thin wrapper or clone is placed in the target
  namespace.

  This patch series should address all the comments received on the
  earlier (v1) series, and fixes a bug in the previous (v2) series
  which left the r_debug struct in an inconsistent state when creating
  a proxy triggered the initial load of a DSO into the main namespace.
=======================================================================

In addition this patch series implements the following:

 - dlmopen will implicitly apply RTLD_SHARED to the libc/libpthread group
   (requires a patched binutils/ld so that the libc family DSOs can
   be flagged as requiring this behaviour)

   - binutils patchset accepted upstream;
   - https://sourceware.org/git/?p=binutils-gdb.git
   - commit 8a87b2791181eb7fc1533ffaeb95df8d87d41493

 - LD_AUDIT paths will NOT apply this implict sharing rule:
   audit libraries will continue to be completely isolated.

 - The mechanism for tagging DSOs as implicitly shared has been changed
   from a DT_FLAGS_1 flag to a DT_VALRNGHI/LO range dynamic section tag.
   (Based on feedback on the binutils side of this patch series).

  - DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE

 - A flag RTLD_ISOLATE which is used inernally to suppress RTLD_SHARED
   behaviour when audit libraries are being loaded, and is also made available
   to users who really want a completely separate copy of glibc in their new
   namespace.

 - Tests for the new dlmopen behaviour

 - Adds the unique dso flag to htl/libpthread.so as well as nptl

I have not yet implemented, but plan to address once this series is
accepted/acceptable:

 - Sensible RTLD_GLOBAL semantics for dlmopened DSOs in non-base namespaces

 - dl_iterate_ns_phdr (cf dl_iterate_phdr but taking a namespace argument)

Vivek Das Mohapatra (20):
  Declare and describe the dlmopen RTLD_SHARED flag
  include/link.h: Update the link_map struct to allow proxies
  elf/dl-object.c: Implement a helper function to proxy link_map entries
  elf/dl-load.c, elf-dl-open.c: Implement RTLD_SHARED dlmopen proxying
  elf/dl-fini.c: Handle proxy link_map entries in the shutdown path
  elf/dl-init.c: Skip proxied link map entries in the dl init path
  elf/dl-open.c: Don't try libc linit in namespaces with no libc mapping
  elf/dl-open.c: when creating a proxy check the libc_map in NS 0
  Define a new dynamic section tag - DT_GNU_FLAGS_1
  Abstract the loaded-DSO search code into a private helper function
  Compare loaded DSOs by file ID and check for DF_GNU_1_UNIQUE
  Use the new DSO finder helper function since we have it
  Use the DSO search helper to check for preloaded DT_GNU_UNIQUE DSOs
  When loading DSOs into alternate namespaces check for DT_GNU_UNIQUE
  Suppress audit calls when a (new) namespace is empty
  Suppress inter-namespace DSO sharing for audit libraries
  dlsym, dlvsym should be able to look up symbols via DSO proxies
  Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE dynamic section+flag to glibc DSOs
  Add dlmopen / RTLD_SHARED tests
  Restore separate libc loading for the TLS/namespace storage test

 Makeconfig                           |    1 +
 Makerules                            |    2 +-
 bits/dlfcn.h                         |   10 +
 elf/Makefile                         |   97 ++-
 elf/dl-close.c                       |   43 +-
 elf/dl-fini.c                        |    6 +-
 elf/dl-init.c                        |    4 +-
 elf/dl-load.c                        |  227 +++++-
 elf/dl-object.c                      |   84 +++
 elf/dl-open.c                        |  109 ++-
 elf/dl-sym.c                         |   14 +
 elf/elf.h                            |    7 +-
 elf/get-dynamic-info.h               |   12 +
 elf/rtld.c                           |    2 +-
 elf/tst-dlmopen-auditmod.c           |   23 +
 elf/tst-dlmopen-common.h             |   33 +
 elf/tst-dlmopen-main.h               | 1022 ++++++++++++++++++++++++++
 elf/tst-dlmopen-modules.h            |   20 +
 elf/tst-dlmopen-rtld-audit-shared1.c |   11 +
 elf/tst-dlmopen-rtld-audit-shared2.c |   11 +
 elf/tst-dlmopen-rtld-audit-shared3.c |   11 +
 elf/tst-dlmopen-rtld-audit-shared4.c |   11 +
 elf/tst-dlmopen-rtld-audit-shared5.c |   11 +
 elf/tst-dlmopen-rtld-audit-shared6.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique1.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique2.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique3.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique4.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique5.c |   11 +
 elf/tst-dlmopen-rtld-audit-unique6.c |   11 +
 elf/tst-dlmopen-rtld-shared1.c       |   11 +
 elf/tst-dlmopen-rtld-shared1.h       |   65 ++
 elf/tst-dlmopen-rtld-shared2.c       |   11 +
 elf/tst-dlmopen-rtld-shared2.h       |   67 ++
 elf/tst-dlmopen-rtld-shared3.c       |   11 +
 elf/tst-dlmopen-rtld-shared3.h       |   44 ++
 elf/tst-dlmopen-rtld-shared4.c       |   11 +
 elf/tst-dlmopen-rtld-shared4.h       |   15 +
 elf/tst-dlmopen-rtld-shared5.c       |   11 +
 elf/tst-dlmopen-rtld-shared5.h       |   26 +
 elf/tst-dlmopen-rtld-shared6.c       |   11 +
 elf/tst-dlmopen-rtld-shared6.h       |   37 +
 elf/tst-dlmopen-rtld-unique1.c       |   11 +
 elf/tst-dlmopen-rtld-unique1.h       |   87 +++
 elf/tst-dlmopen-rtld-unique2.c       |   11 +
 elf/tst-dlmopen-rtld-unique2.h       |   26 +
 elf/tst-dlmopen-rtld-unique3.c       |   11 +
 elf/tst-dlmopen-rtld-unique3.h       |   14 +
 elf/tst-dlmopen-rtld-unique4.c       |   11 +
 elf/tst-dlmopen-rtld-unique4.h       |   15 +
 elf/tst-dlmopen-rtld-unique5.c       |   11 +
 elf/tst-dlmopen-rtld-unique5.h       |   59 ++
 elf/tst-dlmopen-rtld-unique6.c       |   11 +
 elf/tst-dlmopen-rtld-unique6.h       |   52 ++
 elf/tst-dlmopen-sharedmod-norm.c     |   11 +
 elf/tst-dlmopen-sharedmod-uniq.c     |   11 +
 elf/tst-dlmopen-std-do-test.h        |   11 +
 elf/tst-tls-ie-dlmopen.c             |    4 +-
 htl/Makefile                         |    2 +-
 iconvdata/Makefile                   |    1 +
 include/elf.h                        |    2 +
 include/link.h                       |    7 +-
 nptl/Makefile                        |    2 +-
 sysdeps/generic/ldsodefs.h           |    9 +
 sysdeps/mips/bits/dlfcn.h            |   10 +
 65 files changed, 2494 insertions(+), 63 deletions(-)
 create mode 100644 elf/tst-dlmopen-auditmod.c
 create mode 100644 elf/tst-dlmopen-common.h
 create mode 100644 elf/tst-dlmopen-main.h
 create mode 100644 elf/tst-dlmopen-modules.h
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared1.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared2.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared3.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared4.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared5.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-shared6.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique1.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique2.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique3.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique4.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique5.c
 create mode 100644 elf/tst-dlmopen-rtld-audit-unique6.c
 create mode 100644 elf/tst-dlmopen-rtld-shared1.c
 create mode 100644 elf/tst-dlmopen-rtld-shared1.h
 create mode 100644 elf/tst-dlmopen-rtld-shared2.c
 create mode 100644 elf/tst-dlmopen-rtld-shared2.h
 create mode 100644 elf/tst-dlmopen-rtld-shared3.c
 create mode 100644 elf/tst-dlmopen-rtld-shared3.h
 create mode 100644 elf/tst-dlmopen-rtld-shared4.c
 create mode 100644 elf/tst-dlmopen-rtld-shared4.h
 create mode 100644 elf/tst-dlmopen-rtld-shared5.c
 create mode 100644 elf/tst-dlmopen-rtld-shared5.h
 create mode 100644 elf/tst-dlmopen-rtld-shared6.c
 create mode 100644 elf/tst-dlmopen-rtld-shared6.h
 create mode 100644 elf/tst-dlmopen-rtld-unique1.c
 create mode 100644 elf/tst-dlmopen-rtld-unique1.h
 create mode 100644 elf/tst-dlmopen-rtld-unique2.c
 create mode 100644 elf/tst-dlmopen-rtld-unique2.h
 create mode 100644 elf/tst-dlmopen-rtld-unique3.c
 create mode 100644 elf/tst-dlmopen-rtld-unique3.h
 create mode 100644 elf/tst-dlmopen-rtld-unique4.c
 create mode 100644 elf/tst-dlmopen-rtld-unique4.h
 create mode 100644 elf/tst-dlmopen-rtld-unique5.c
 create mode 100644 elf/tst-dlmopen-rtld-unique5.h
 create mode 100644 elf/tst-dlmopen-rtld-unique6.c
 create mode 100644 elf/tst-dlmopen-rtld-unique6.h
 create mode 100644 elf/tst-dlmopen-sharedmod-norm.c
 create mode 100644 elf/tst-dlmopen-sharedmod-uniq.c
 create mode 100644 elf/tst-dlmopen-std-do-test.h

-- 
2.20.1


^ permalink raw reply	[flat|nested] 78+ messages in thread

end of thread, other threads:[~2021-03-04 18:27 UTC | newest]

Thread overview: 78+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-09 17:18 [RFC][PATCH v8 00/20] Implementation of RTLD_SHARED for dlmopen Vivek Das Mohapatra
2021-02-09 17:18 ` [RFC][PATCH v8 01/20] Declare and describe the dlmopen RTLD_SHARED flag Vivek Das Mohapatra
2021-02-15 13:08   ` Adhemerval Zanella
2021-02-15 13:29     ` Andreas Schwab
2021-02-15 13:31       ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 02/20] include/link.h: Update the link_map struct to allow proxies Vivek Das Mohapatra
2021-02-15 13:11   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 03/20] elf/dl-object.c: Implement a helper function to proxy link_map entries Vivek Das Mohapatra
2021-02-15 13:30   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 04/20] elf/dl-load.c, elf-dl-open.c: Implement RTLD_SHARED dlmopen proxying Vivek Das Mohapatra
2021-02-15 14:53   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 05/20] elf/dl-fini.c: Handle proxy link_map entries in the shutdown path Vivek Das Mohapatra
2021-02-15 17:08   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 06/20] elf/dl-init.c: Skip proxied link map entries in the dl init path Vivek Das Mohapatra
2021-02-15 17:52   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 07/20] elf/dl-open.c: Don't try libc linit in namespaces with no libc mapping Vivek Das Mohapatra
2021-02-15 17:54   ` Adhemerval Zanella
2021-02-17 15:39     ` Vivek Das Mohapatra
2021-02-17 16:17       ` Adhemerval Zanella
2021-02-17 18:32         ` Vivek Das Mohapatra
2021-02-17 20:52           ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 08/20] elf/dl-open.c: when creating a proxy check the libc_map in NS 0 Vivek Das Mohapatra
2021-02-15 17:55   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 09/20] Define a new dynamic section tag - DT_GNU_FLAGS_1 Vivek Das Mohapatra
2021-02-15 18:42   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 10/20] Abstract the loaded-DSO search code into a private helper function Vivek Das Mohapatra
2021-02-15 19:25   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 11/20] Compare loaded DSOs by file ID and check for DF_GNU_1_UNIQUE Vivek Das Mohapatra
2021-02-18 20:45   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 12/20] Use the new DSO finder helper function since we have it Vivek Das Mohapatra
2021-02-19 14:39   ` Adhemerval Zanella
2021-02-19 19:50     ` Adhemerval Zanella
2021-02-22 18:44     ` Vivek Das Mohapatra
2021-02-22 18:51       ` Adhemerval Zanella
2021-02-22 23:50         ` Vivek Das Mohapatra
2021-02-09 17:18 ` [RFC][PATCH v8 13/20] Use the DSO search helper to check for preloaded DT_GNU_UNIQUE DSOs Vivek Das Mohapatra
2021-02-19 17:26   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 14/20] When loading DSOs into alternate namespaces check for DT_GNU_UNIQUE Vivek Das Mohapatra
2021-02-19 18:11   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 15/20] Suppress audit calls when a (new) namespace is empty Vivek Das Mohapatra
2021-02-19 19:45   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 16/20] Suppress inter-namespace DSO sharing for audit libraries Vivek Das Mohapatra
2021-02-19 20:39   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 17/20] dlsym, dlvsym should be able to look up symbols via DSO proxies Vivek Das Mohapatra
2021-02-22 18:51   ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 18/20] Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE dynamic section+flag to glibc DSOs Vivek Das Mohapatra
2021-02-22 20:39   ` Adhemerval Zanella
2021-02-22 21:19     ` Florian Weimer
2021-02-22 21:53       ` Adhemerval Zanella
2021-02-23  3:26         ` Alan Modra
2021-02-23 11:57           ` Adhemerval Zanella
2021-02-23 10:00         ` Florian Weimer
2021-02-23 11:58           ` Adhemerval Zanella
2021-02-23 12:12             ` Florian Weimer
2021-02-23  0:17     ` Vivek Das Mohapatra
2021-02-23 12:02       ` Adhemerval Zanella
2021-02-23 13:24         ` Adhemerval Zanella
2021-02-23 18:46           ` Vivek Das Mohapatra
2021-02-23 18:48             ` Adhemerval Zanella
2021-02-23 19:01               ` Florian Weimer
2021-02-23 19:06                 ` Adhemerval Zanella
2021-02-09 17:18 ` [RFC][PATCH v8 19/20] Add dlmopen / RTLD_SHARED tests Vivek Das Mohapatra
2021-02-26 19:50   ` Adhemerval Zanella
2021-02-26 20:26   ` Andreas Schwab
2021-02-09 17:18 ` [RFC][PATCH v8 20/20] Restore separate libc loading for the TLS/namespace storage test Vivek Das Mohapatra
2021-02-09 19:01 ` [RFC][PATCH v8 00/20] Implementation of RTLD_SHARED for dlmopen Joseph Myers
2021-02-10 12:25   ` Vivek Das Mohapatra
2021-02-10 18:32     ` Joseph Myers
2021-02-12 18:52 ` Adhemerval Zanella
2021-02-12 18:56   ` Florian Weimer
2021-02-12 19:01     ` Adhemerval Zanella
2021-02-12 19:29       ` Florian Weimer
2021-02-18 14:41   ` Vivek Das Mohapatra
2021-02-18 15:02     ` Florian Weimer
2021-02-18 15:05       ` Vivek Das Mohapatra
2021-02-19  8:57         ` Florian Weimer
2021-02-19 15:08           ` Vivek Das Mohapatra
2021-03-04 18:27 ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).