From nobody Sun Aug 20 12:31:40 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 4RTFND2Wr8z4r8jj; Sun, 20 Aug 2023 12:31:40 +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 4RTFND24Q8z3d96; Sun, 20 Aug 2023 12:31:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692534700; 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=54nmi58d+lLvQsd2A5eOU0449q6mREqY75hl8JETOqE=; b=Qc9tLjaQVFaX9p0bw5h3Mleh6eVOFfWCWuCtzZs6UClMFybbm2V+azVC/yHhEw2OEbmPhQ 7uScgNDYMDW452ZVxDzqdLwC7KWABdPbuxETWkoqaUjVj8BrMMgN8VCE+2pucVArrhMEDz +K/2aoafwiF/Ed4Okj0RkYjfvs6KAprAqvZ2pbXBq34m+rYRajxvLlxZodph7fBksSSa63 SmxRzJZEebyQLni8Xt6zv83HNbY08QqNhAgurRnZQgET6DPtaqsiL9q9+tHqJr6JlfitCM Eeazh9imqxDCyYv1Bxcmxq3WUbOs2Tg17IYKe7ZPvv+tpXdGg9Uh4Zd554imWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692534700; 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=54nmi58d+lLvQsd2A5eOU0449q6mREqY75hl8JETOqE=; b=q29Bxai9Y8jKWJorE7kfOLnxi6xUSMuaT3QduRAVQXxSv1nMJ3UmuPl7zLTB6RxVsZUlov Q1+VxZG1ArRLUXtBY7MN9T9gZmVdOzTrTbXQc0VvlGWKAvgWqG49n+hphQBeQ+FtPwNlYk V9u+M3c5DMdCWPF6ulDXim2NRTw+1+mNrqjlQgM2qtZXfKyv363dHubB7u8de0xq6dWZMs /yHU+7IBDshOIWAA/vvfDdEaTv66B0N5g4n4iXKZXxYmPL0noGmW3tAnoT8BWOyZs5uAel i8h58YbzarK1Do9OG0eoFJCtprN+NHrj3xyutjx2URmrMIIgaJOpy9lNQc9N8w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1692534700; a=rsa-sha256; cv=none; b=Zj5cXOvRlY+Xdcze1g8waP7UoqyVkZS8kceoahN8e+FrvGlQ19InV5Lpzw4ELH2OpTcxeM xI/T/xZ/jDqVRxULC0bO/6t6vuzkPew7qu9y8eiWAowa7OqfZ1U/EauzVevwAYE4gcrL3J 0KJV+kBfCyjXFFK4Am9M72K6ar67bVHSzzFTImjfbWrAylldzhYCiYjr938r2NrKI0WK7Y 0Qk1jJPETg3ERCL8lsR8WGStTzzR2bgtoAYQkShaYpy+F3j8BoRHdDwax75oFtgZ9FwY75 nncJgI9DuB2dQEH5umNb+kksBso8eV3lT12jCim0dtSxIHfCTban0fxfJHIgGQ== 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 4RTFND17bQzfN1; Sun, 20 Aug 2023 12:31:40 +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 37KCVe4e044376; Sun, 20 Aug 2023 12:31:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 37KCVeKW044373; Sun, 20 Aug 2023 12:31:40 GMT (envelope-from git) Date: Sun, 20 Aug 2023 12:31:40 GMT Message-Id: <202308201231.37KCVeKW044373@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: b1d3e2b77155 - main - rtld: unlock bind lock when calling into crt __pthread_distribute_static_tls method 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/main X-Git-Reftype: branch X-Git-Commit: b1d3e2b771552af071bf0964233cc5a76ea25542 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b1d3e2b771552af071bf0964233cc5a76ea25542 commit b1d3e2b771552af071bf0964233cc5a76ea25542 Author: Konstantin Belousov AuthorDate: 2023-08-18 19:52:24 +0000 Commit: Konstantin Belousov CommitDate: 2023-08-20 12:30:13 +0000 rtld: unlock bind lock when calling into crt __pthread_distribute_static_tls method The method might require resolving and binding symbols, which means recursing on the bind lock. It is safe to unlock the bind lock, since we operate on the private object list, and user attempting to unload an object from the list of not yet fully loaded objects caused self-inflicted race. It is similar to how we treat user' init/fini methods. Reported by: stevek Sponsored by: The FreeBSD Foundation MFC after: 1 week --- libexec/rtld-elf/rtld.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 886758a5a484..feef5dd0bb5d 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -5897,8 +5897,10 @@ distribute_static_tls(Objlist *list, RtldLockState *lockstate) obj = elm->obj; if (obj->marker || !obj->tls_static || obj->static_tls_copied) continue; + lock_release(rtld_bind_lock, lockstate); distrib(obj->tlsoffset, obj->tlsinit, obj->tlsinitsize, obj->tlssize); + wlock_acquire(rtld_bind_lock, lockstate); obj->static_tls_copied = true; } }