From nobody Thu Dec 7 00:27:25 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Slw8G20rVz53Fs9; Thu, 7 Dec 2023 00:27:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Slw8G0vsfz4LpF; Thu, 7 Dec 2023 00:27:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701908846; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kXQHZZRZL3+To3lBLvhdb9BVz5sSdGA1Yi3z7mJKzwY=; b=QTI7cAj47lhcW9GT6vSSstc9zAB0nt+y/xC0y31k/t0QM2MUDEKGzHrkT4nNGs6hbcV6e9 UaVS7PPcKbwYWIt//O94S50gagjIU3qQqi1Uwy4k7cWooWFy0G2roquPvVagyoVhZ8cDNP rvQbucK9Wx5KkVjO69NyNi2/acED2T2eLIL6D5rA9ANDMVQ9U0oXvCWzedWPCnzE41TPXq mH5BlecPEb2IaOhDH93rT9mBvraFn2PfrsL/d7frTMA5zOrLElA7YP3g6BKLaJ0x/omAf6 g22Lc+mJI6U2oLCIDdIQesZUeszGOGbFnpm7Oehod2dWApbZnwHsE77ON3lL/w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1701908846; a=rsa-sha256; cv=none; b=nRERygFUc0HFhCAtSqbNb0Fn+keWEvyO7Uf93NrV9u/9sW3QG93/cfZbDrZaeutebI2tv8 4P9UzL+0V9SlKTCyPDQJ34uBeu7AiBuwJXft7N1+zc8yCqsgRzMLJFxdVpEGCSSc0CfelH 04Njs11mbmk4+RJubzAs54RVUUQttg8T4JqGIraagCGLHHqjnIYHvV7taCe72OZc1ebCoW J68lvlHun1mLZPAs32EWCXIZDKfBnQt7xiA0LUCgM+xfLO8gC1wGrjvkrwytjmQVhBtH/U WGIVMwIa4/SFTnZPC5LZJcBLeiPa1HFJGey/DKRhbR4CbQyWpvuPGNNUXn1NoA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1701908846; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=kXQHZZRZL3+To3lBLvhdb9BVz5sSdGA1Yi3z7mJKzwY=; b=YFMNnXWezhc6vtKBX/WwLx0i/erxL9PnL06U/sBwo8fiwBBAWtiGU7Ko9dnhpUtSGPQY4H uipWmt/3LZfYDH6d7LX7W/aQ2eE8VMGbDxsIfJYPhz0LLC5BJccmK7GbLYuCj3L0FQ2UrW 48YmrWaU7lfLlEY58O+7yoTLLo61jT3REdeL6e+BkCvVVLr7e52DioWOlS4ZBaXo7y+/w0 VVjNHAUlvlKVcEZSvCyVzlB74HaP5V1hGnNdWWA4lmHPJvH5FXHmmW4BVvUBX8TRz6tzm+ FsWaGEHB42wrmqsPkUmUbvru9UnCA6B2iVVIAluBn1sd4ebBLOl5WqNtYJb7Nw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Slw8F6v5pz19F; Thu, 7 Dec 2023 00:27:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 3B70RPAw023299; Thu, 7 Dec 2023 00:27:25 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 3B70RPCc023297; Thu, 7 Dec 2023 00:27:25 GMT (envelope-from git) Date: Thu, 7 Dec 2023 00:27:25 GMT Message-Id: <202312070027.3B70RPCc023297@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 8d0740e8b9dd - stable/14 - RTLD_DEEPBIND: make lookup not just symbolic, but walk all refobj' DAGs List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 8d0740e8b9dd05513ef23e2dee7194f32551df13 Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=8d0740e8b9dd05513ef23e2dee7194f32551df13 commit 8d0740e8b9dd05513ef23e2dee7194f32551df13 Author: Konstantin Belousov AuthorDate: 2023-11-29 18:30:59 +0000 Commit: Konstantin Belousov CommitDate: 2023-12-07 00:27:19 +0000 RTLD_DEEPBIND: make lookup not just symbolic, but walk all refobj' DAGs PR: 275393 (cherry picked from commit 9daf6cd0f46416d9c6eb0411ea6042cd42b8a9bc) --- libexec/rtld-elf/rtld.c | 8 ++++++-- libexec/rtld-elf/rtld.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index f8c4c18b5d5e..0bbd8104e11b 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -3745,7 +3745,7 @@ dlopen_object(const char *name, int fd, Obj_Entry *refobj, int lo_flags, if (!obj->init_done) { /* We loaded something new and have to init something. */ if ((lo_flags & RTLD_LO_DEEPBIND) != 0) - obj->symbolic = true; + obj->deepbind = true; result = 0; if ((lo_flags & (RTLD_LO_EARLY | RTLD_LO_IGNSTLS)) == 0 && obj->static_tls && !allocate_tls_offset(obj)) { @@ -4571,7 +4571,8 @@ symlook_default(SymLook *req, const Obj_Entry *refobj) if (refobj->symbolic || req->defobj_out != NULL) donelist_check(&donelist, refobj); - symlook_global(req, &donelist); + if (!refobj->deepbind) + symlook_global(req, &donelist); /* Search all dlopened DAGs containing the referencing object. */ STAILQ_FOREACH(elm, &refobj->dldags, link) { @@ -4587,6 +4588,9 @@ symlook_default(SymLook *req, const Obj_Entry *refobj) } } + if (refobj->deepbind) + symlook_global(req, &donelist); + /* * Search the dynamic linker itself, and possibly resolve the * symbol from there. This is how the application links to diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h index 7fe9d837d6f1..c2676f59f32d 100644 --- a/libexec/rtld-elf/rtld.h +++ b/libexec/rtld-elf/rtld.h @@ -239,6 +239,7 @@ typedef struct Struct_Obj_Entry { bool ver_checked : 1; /* True if processed by rtld_verify_object_versions */ bool textrel : 1; /* True if there are relocations to text seg */ bool symbolic : 1; /* True if generated with "-Bsymbolic" */ + bool deepbind : 1; /* True if loaded with RTLD_DEEPBIND" */ bool bind_now : 1; /* True if all relocations should be made first */ bool traced : 1; /* Already printed in ldd trace output */ bool jmpslots_done : 1; /* Already have relocated the jump slots */