Message ID | 20210322154111.24798-1-vivek@collabora.com |
---|---|
Headers |
Return-Path: <libc-alpha-bounces@sourceware.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9119C3851C0A; Mon, 22 Mar 2021 15:41:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9119C3851C0A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1616427683; bh=oP/7FkrR/25baHuD5BanGT7vhdOwG6l5YLNF+y++ODc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=AUJgkmRlH5PEoHkVNQTzDLaoVhqjv3bwoafTUhY2TJDlmO5iB8HDrjvZjJ+yIq/ax A0+v9P0mLyH8/mWi0W0IO6a8JyD/fXQe1wttCGbfgIvBAlG68FabpUPQH3YeYTxFcc dSuAIS8QTYvRbatr/C4hgIdmPT9c0WoRJ1r1f7IY= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by sourceware.org (Postfix) with ESMTPS id 48CA53854808 for <libc-alpha@sourceware.org>; Mon, 22 Mar 2021 15:41:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 48CA53854808 Received: from noise.cbg.collabora.co.uk (unknown [IPv6:2001:4d48:ad5c:ef00:8e70:5aff:fe59:c29c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vivek) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 6A1731F44E74 for <libc-alpha@sourceware.org>; Mon, 22 Mar 2021 15:41:18 +0000 (GMT) To: libc-alpha@sourceware.org Subject: [RFC][PATCH v10 0/7] Implementation of RTLD_SHARED for dlmopen Date: Mon, 22 Mar 2021 15:41:04 +0000 Message-Id: <20210322154111.24798-1-vivek@collabora.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, KAM_ASCII_DIVIDERS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list <libc-alpha.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=subscribe> From: =?utf-8?q?Vivek_Das=C2=A0Mohapatra_via_Libc-alpha?= <libc-alpha@sourceware.org> Reply-To: =?utf-8?q?Vivek_Das=C2=A0Mohapatra?= <vivek@collabora.com> Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" <libc-alpha-bounces@sourceware.org> |
Series |
Implementation of RTLD_SHARED for dlmopen
|
|
Message
Vivek Dasmohapatra
March 22, 2021, 3:41 p.m. UTC
This is a revision of a previous patchset that I posted here regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 The only changes from v9 are the rewording of a mislocated comment and the removal of © in favour of (C) in copyright comments. 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-v8) series. This series (v9) also lifts the requirement for an ld which supports -z unique / DT_GNU_FLAGS_1+DF_GNU_1_UNIQUE directly. If lack of support is detected the new dynamic flag section is added via linker scripts and a dummy dynamic-notes.os object instead. ======================================================================= 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 (7): Define a new dynamic section tag - DT_GNU_FLAGS_1 (bug 22745) Abstract loaded-DSO search code into a helper function Use the new DSO finder helper function Add DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE to glibc DSOs (bug 22745) Implement dlmopen RTLD_SHARED flag (bug 22745) Add dlmopen / RTLD_SHARED tests Restore separate libc loading for the TLS/namespace storage test Makeconfig | 3 + Makerules | 19 +- bits/dlfcn.h | 10 + config.make.in | 1 + configure | 54 +- configure.ac | 32 +- dynamic-notes.c | 4 + elf/Makefile | 104 +++- elf/dl-close.c | 43 +- elf/dl-fini.c | 6 +- elf/dl-init.c | 4 +- elf/dl-load.c | 221 ++++++- elf/dl-object.c | 78 +++ 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 | 32 + elf/tst-dlmopen-main.h | 873 +++++++++++++++++++++++++++ elf/tst-dlmopen-modules.h | 21 + elf/tst-dlmopen-rtld-audit-shared1.c | 8 + elf/tst-dlmopen-rtld-audit-shared2.c | 8 + elf/tst-dlmopen-rtld-audit-shared3.c | 7 + elf/tst-dlmopen-rtld-audit-shared4.c | 8 + elf/tst-dlmopen-rtld-audit-shared5.c | 8 + elf/tst-dlmopen-rtld-audit-shared6.c | 8 + elf/tst-dlmopen-rtld-audit-unique1.c | 7 + elf/tst-dlmopen-rtld-audit-unique2.c | 7 + elf/tst-dlmopen-rtld-audit-unique3.c | 7 + elf/tst-dlmopen-rtld-audit-unique4.c | 7 + elf/tst-dlmopen-rtld-audit-unique5.c | 7 + elf/tst-dlmopen-rtld-audit-unique6.c | 7 + elf/tst-dlmopen-rtld-shared1.c | 7 + elf/tst-dlmopen-rtld-shared1.h | 64 ++ elf/tst-dlmopen-rtld-shared2.c | 7 + elf/tst-dlmopen-rtld-shared2.h | 66 ++ elf/tst-dlmopen-rtld-shared3.c | 7 + elf/tst-dlmopen-rtld-shared3.h | 43 ++ elf/tst-dlmopen-rtld-shared4.c | 7 + elf/tst-dlmopen-rtld-shared4.h | 14 + elf/tst-dlmopen-rtld-shared5.c | 7 + elf/tst-dlmopen-rtld-shared5.h | 25 + elf/tst-dlmopen-rtld-shared6.c | 7 + elf/tst-dlmopen-rtld-shared6.h | 36 ++ elf/tst-dlmopen-rtld-unique1.c | 7 + elf/tst-dlmopen-rtld-unique1.h | 86 +++ elf/tst-dlmopen-rtld-unique2.c | 7 + elf/tst-dlmopen-rtld-unique2.h | 25 + elf/tst-dlmopen-rtld-unique3.c | 7 + elf/tst-dlmopen-rtld-unique3.h | 13 + elf/tst-dlmopen-rtld-unique4.c | 7 + elf/tst-dlmopen-rtld-unique4.h | 14 + elf/tst-dlmopen-rtld-unique5.c | 7 + elf/tst-dlmopen-rtld-unique5.h | 58 ++ elf/tst-dlmopen-rtld-unique6.c | 7 + elf/tst-dlmopen-rtld-unique6.h | 51 ++ elf/tst-dlmopen-sharedmod-norm.c | 11 + elf/tst-dlmopen-sharedmod-uniq.c | 11 + elf/tst-dlmopen-std-do-test.c | 12 + elf/tst-tls-ie-dlmopen.c | 4 +- extra-lib.mk | 3 + htl/Makefile | 3 + iconvdata/Makefile | 3 + iconvdata/extra-module.mk | 4 + include/elf.h | 2 + include/link.h | 7 +- nptl/Makefile | 3 + sysdeps/generic/ldsodefs.h | 9 + sysdeps/mips/bits/dlfcn.h | 10 + 71 files changed, 2355 insertions(+), 67 deletions(-) create mode 100644 dynamic-notes.c 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.c
Comments
On Mon, 22 Mar 2021, Vivek Das Mohapatra via Libc-alpha wrote: > This is a revision of a previous patchset that I posted here > regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 > > The only changes from v9 are the rewording of a mislocated comment > and the removal of © in favour of (C) in copyright comments. Any further comments? I'm keeping the rebase up to date and making sure the tests continue to pass so the branch doesn't bitrot.
On Mon, 22 Mar 2021, Vivek Das Mohapatra via Libc-alpha wrote: > This is a revision of a previous patchset that I posted here > regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 Pinging top keep this on the radar.
On Tue, 13 Apr 2021, Vivek Das Mohapatra via Libc-alpha wrote: > On Mon, 22 Mar 2021, Vivek Das Mohapatra via Libc-alpha wrote: > >> This is a revision of a previous patchset that I posted here >> regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 Any chance this will be on the radar in the next couple of weeks?
On Thu, 29 Apr 2021, Vivek Das Mohapatra via Libc-alpha wrote: >>> This is a revision of a previous patchset that I posted here >>> regarding https://sourceware.org/bugzilla/show_bug.cgi?id=22745 Pinging to keep this on the radar.