From nobody Fri May 02 18:08:18 2025 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 4ZpzS32KQ1z5tq5L; Fri, 02 May 2025 18:08:19 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZpzS26ndBz3qgG; Fri, 02 May 2025 18:08:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746209299; 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=ZZKAIb+P+J5DcWamKYAj06hDoDaxx0lQpvrB+1hbpvY=; b=Ad2xTimgQfRImIp3HK2F4GMmF4My9PWx0bv/T0aODKeOs4OsIxzre280aPIjpK5oaUmY3L EHKmdyixPP0bD2tiDtirYkhSvORl4qkWAl8XQqg4+wuFA7YkvBSnj+UXYObZNnvRQGx8FK 3tTNaX5xMgCBnuRhKZzaDjBfyYsJT18/cobeMegIC/IqDOa0Ng/W0GtzqcLMLIwkA6i2B8 sY0bcF2MsdIN6GNnweEhqx8U03A36j6G8eviRZwObBiZ61VavGNBA9rRa44a8q2KmR1dQK +nInJHNSn03ibY9OrKHAa5XCDDsvs+BDLez/yWLHlbyJiEqr8yL8vS+onFt/KQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746209299; 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=ZZKAIb+P+J5DcWamKYAj06hDoDaxx0lQpvrB+1hbpvY=; b=piydKIcwV5S5Wfwhy+AL8mKCiHW0brhfy2vn/WFuC/JbfYH+685Rn1wQ0d3/5ZlS/MbDOD ThSbPG6/s809qOO6CADbGUehtaFnwUQe8EwSE98Kx+KU2qBGMOlXOk06Tq7Vf+/iZPMVyg Q7HN2P793OA+DQbgU/Y5JnrpXnqHljbyEdEPtNqd8qQQb36HZhVtvFknhkKkvi5e4OB3gr 7Fck59TD8eJRgWJKqCNI9Ag80YQQNq4TxVfSIvr9/b2WAmev/06Ew/OHZJurk4KPzJxuHM T5TQS3Z1mWaiQF3Lr95uGaRkKoU0rjtQDZe5jKoB2X80tlIpdZb4adIq380mNQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746209299; a=rsa-sha256; cv=none; b=NCf1hWBhatoL9MZZVLqF2059mtoNSVCIx2QfThzPbayGK/O5h0la3CHe6fUZi7dZXtuzGz AQ7Ju+6UDcMmKAzpLqVUHsk+MhmLIqkaNsT5xp0FzWEv7FCg5Bl6TtuceLtWhwk77cMmZu ysG0l9RE0n+KVhAy1VFQYurM2di5UCRVlirLNaMAGAJ/9LEI30J8vFAQ8Rdz2qahVhIOul QhqdffWh57JoTFWsLyrdy8fcVAhq5omryMhYQ+rkhoFLYrlkrtYZj42cr9GmRclKyjbL30 GJn5jb7YpQVcBDktW6zTkXmGOiPxnK9HC6thIfLyifqdeos7yaureiGzIdZVdQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4ZpzS26HgKz1MKc; Fri, 02 May 2025 18:08:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 542I8I0m061847; Fri, 2 May 2025 18:08:18 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 542I8I3s061845; Fri, 2 May 2025 18:08:18 GMT (envelope-from git) Date: Fri, 2 May 2025 18:08:18 GMT Message-Id: <202505021808.542I8I3s061845@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: c66c0a8479e6 - main - rtld: do not call into ifunc resolvers with the bind lock write-locked 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-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/main X-Git-Reftype: branch X-Git-Commit: c66c0a8479e62f3e3e085252839cddace4d4bbf5 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c66c0a8479e62f3e3e085252839cddace4d4bbf5 commit c66c0a8479e62f3e3e085252839cddace4d4bbf5 Author: Konstantin Belousov AuthorDate: 2025-05-01 15:44:12 +0000 Commit: Konstantin Belousov CommitDate: 2025-05-02 18:08:09 +0000 rtld: do not call into ifunc resolvers with the bind lock write-locked If filter needs to be loader, we restart after the lock upgrade. But possible binds in the resolver itself would try to recurse on the lock, which can be only done for the read locks. PR: 286502 Sponsored by: The FreeBSD Foundation MFC after: 1 week --- libexec/rtld-elf/rtld.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 3a9a3e800831..59d29888d93d 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -1040,6 +1040,7 @@ _rtld_bind(Obj_Entry *obj, Elf_Size reloff) Elf_Addr target; RtldLockState lockstate; +relock: rlock_acquire(rtld_bind_lock, &lockstate); if (sigsetjmp(lockstate.env, 0) != 0) lock_upgrade(rtld_bind_lock, &lockstate); @@ -1053,10 +1054,15 @@ _rtld_bind(Obj_Entry *obj, Elf_Size reloff) NULL, &lockstate); if (def == NULL) rtld_die(); - if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) + if (ELF_ST_TYPE(def->st_info) == STT_GNU_IFUNC) { + if (lockstate_wlocked(&lockstate)) { + lock_release(rtld_bind_lock, &lockstate); + goto relock; + } target = (Elf_Addr)rtld_resolve_ifunc(defobj, def); - else + } else { target = (Elf_Addr)(defobj->relocbase + def->st_value); + } dbg("\"%s\" in \"%s\" ==> %p in \"%s\"", defobj->strtab + def->st_name, obj->path == NULL ? NULL : basename(obj->path), (void *)target,