From nobody Wed Apr 23 18:56:12 2025 X-Original-To: current@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 4ZjSxV6CFWz5tlJG for ; Wed, 23 Apr 2025 18:56:14 +0000 (UTC) (envelope-from avg@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (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 "smtp.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZjSxV4hmRz3d30; Wed, 23 Apr 2025 18:56:14 +0000 (UTC) (envelope-from avg@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745434574; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=xvoYRHtXHi7VCSo50aW4U1LhHfo0jpgyLRLpcsvPdjQ=; b=XE9glCeNhQnUy5uoiLnArek+96v69oVx3LWkI468/v9VMmOYAxQOrZuYFNfXx/5BEhGxzb HPdXyDHhKKp67njouZe3pnGbIzvDB5lOXu8uc+xp4Mex3ZH8S4tWPIWjY6zGTq8xWHlidU tkGaqhh1JCCMfgcO1+WqL3x+y58tUueBc5WyVVcZ7ZB3w55eC2y7lZCodpmuMwsoPKRjfW bUIokADXCxXILkQ+oyhcdGsyebRfBQwvXgsKapKJRUsvSRXeTLP8K4j3V1u58HPIrhg7+b yE1hFNyQehG/267QkpOlXtOApVFhCkEcC1N0NQ5frV0ufwsKGP7DgUXEZTqvng== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745434574; a=rsa-sha256; cv=none; b=o8iyTxs8n7tSxq/DfaEZviFn4mUcEvOJA/2L/IzTi/P+IfvKTvbeljouu46V6xPzqrd+ue WomKZSJXtnzltz3K9wJi9n2gHi5sgy4uRvsKK/3/rEDXgnDenxKNh34UvViakRU5Ru00X9 YnRs0dFlkd87J5hlfesJpTEo8Wtd53FIOJRU2qkDX5OH2cVaxRdBy6U7i+4crXlS0ZfRIi 8Ul2D0fpNBg5WtQsGiXTIsJAAF46aUWJi4da5hb4l7td4nH9UEepumXlrw76JRx0Rl6tn8 WF5rQ6MWSP4pf44Xv9ylhFqNwxZLqoLSnUcGZP2cFkcN+Sb9ZeBwNN4LV/oeNg== 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=1745434574; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=xvoYRHtXHi7VCSo50aW4U1LhHfo0jpgyLRLpcsvPdjQ=; b=YIcYuq3oCNl+M1C+sLjPms69YfGcCvjZFZyDDqYl78ADdfmVQJLZYJ2Tw2BdWlcmcvLTD9 on03lWIZSgDgNGwp3saqWQnVJil2+5ZCFAJ1O8+Dj3MEr95FxofpG4clziY1Ys/hJbBcS2 7pIJ+zkxxde6+n4l00OjzWSzfxVqOt8XpW8Tz7S0DmkvP5Q3zvR7IboaoSGIayOMRQuTQl grSOQdHJd+I21kneLZlkZG4ZvCAvCtiI6pFWKYM2xaRNqU//hLI6aX3Ljdsc0yjZto7WHO 9ACKX7/1246YrK4r0qpFd63HlqLQQEBo/lWafAXeRLa6EYfB7qwUO/gVc8HPWA== Received: from [192.168.0.88] (unknown [93.188.39.137]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: avg/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4ZjSxV1NgqzngL; Wed, 23 Apr 2025 18:56:14 +0000 (UTC) (envelope-from avg@freebsd.org) Message-ID: Date: Wed, 23 Apr 2025 21:56:12 +0300 List-Id: Discussions about the use of FreeBSD-current List-Archive: https://lists.freebsd.org/archives/freebsd-current List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-current@FreeBSD.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Andriy Gapon Subject: Re: RTLD_DEEPBIND question To: Konstantin Belousov Cc: FreeBSD Current References: <0b3dda4e-53e4-40e5-9484-8b5ffb84e658@FreeBSD.org> <900c8521-559a-47b5-acaa-ae941f6852c4@freebsd.org> <7c4e1682-d797-493c-8326-08d51dde3359@FreeBSD.org> Content-Language: en-US Autocrypt: addr=avg@freebsd.org; keydata= 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 gpPTjT15L8xGftEjQXF6 In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 19/04/2025 13:38, Konstantin Belousov wrote: > And there is the version with the recursive marking by deepbind: I think that this patch would help with my case (haven't tested yet). But I am not sure if it would be "correct". First, as you have rightfully asked, it's not clear that deepbind should be recursive. But even if it should be, there could be some edge case where the same library is a dependency of more than one dlopen-ed object where one dlopen uses RTLD_DEEPBIND and another doesn't. I am not sure how that case should be hadled. BTW, I've been wondering how illumos avoids the problem even though they do not use any special dlopen flags. It turns out that they link almost all system shared libraries with -Bdirect option (which is Solaris/illumos specific). It's somewhat similar to, but different from, -Bsymbolic. https://docs.oracle.com/cd/E23824_01/html/819-0690/aehzq.html#scrolltoc https://docs.oracle.com/cd/E36784_01/html/E36857/gejfe.html I think that on FreeBSD we should use symbol visibility attributes or a symbol map to hide (make local) symbols that are not expected to be interposed or have a high chance to be interposed by accident. IMO, yyparse should definitely get that treatment. I think that approach would be better than magic rtld tricks. Especially because the tricks do not work with the current rtld. I'd rather make a change to libdtrace.so than to rtld. > diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c > index 2346c6eae9f6..9767c8e7016c 100644 > --- a/libexec/rtld-elf/rtld.c > +++ b/libexec/rtld-elf/rtld.c > @@ -3824,27 +3824,26 @@ dlopen_object(const char *name, int fd, Obj_Entry *refobj, int lo_flags, > if ((lo_flags & (RTLD_LO_EARLY | RTLD_LO_IGNSTLS)) == > 0 && > obj->static_tls && !allocate_tls_offset(obj)) { > - _rtld_error("%s: No space available " > - "for static Thread Local Storage", > + _rtld_error( > + "%s: No space available for static Thread Local Storage", > obj->path); > result = -1; > } > if (result != -1) > result = load_needed_objects(obj, > - lo_flags & > - (RTLD_LO_DLOPEN | RTLD_LO_EARLY | > - RTLD_LO_IGNSTLS | RTLD_LO_TRACE)); > + lo_flags & (RTLD_LO_DLOPEN | RTLD_LO_EARLY | > + RTLD_LO_IGNSTLS | RTLD_LO_TRACE | > + RTLD_LO_DEEPBIND)); > init_dag(obj); > ref_dag(obj); > if (result != -1) > result = rtld_verify_versions(&obj->dagmembers); > if (result != -1 && ld_tracing) > goto trace; > - if (result == -1 || > - relocate_object_dag(obj, > - (mode & RTLD_MODEMASK) == RTLD_NOW, &obj_rtld, > - (lo_flags & RTLD_LO_EARLY) ? SYMLOOK_EARLY : 0, > - lockstate) == -1) { > + if (result == -1 || relocate_object_dag(obj, > + (mode & RTLD_MODEMASK) == RTLD_NOW, &obj_rtld, > + (lo_flags & RTLD_LO_EARLY) ? SYMLOOK_EARLY : 0, > + lockstate) == -1) { > dlopen_cleanup(obj, lockstate); > obj = NULL; > } else if (lo_flags & RTLD_LO_EARLY) { > @@ -4679,12 +4678,13 @@ symlook_default(SymLook *req, const Obj_Entry *refobj) > */ > res = symlook_obj(&req1, refobj); > if (res == 0 && (refobj->symbolic || > - ELF_ST_VISIBILITY(req1.sym_out->st_other) == STV_PROTECTED)) { > + ELF_ST_VISIBILITY(req1.sym_out->st_other) == STV_PROTECTED || > + refobj->deepbind)) { > req->sym_out = req1.sym_out; > req->defobj_out = req1.defobj_out; > assert(req->defobj_out != NULL); > } > - if (refobj->symbolic || req->defobj_out != NULL) > + if (refobj->symbolic || req->defobj_out != NULL || refobj->deepbind) > donelist_check(&donelist, refobj); > > if (!refobj->deepbind) -- Andriy Gapon