From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,HTML_MESSAGE,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 30286 invoked from network); 11 Jan 2022 13:10:31 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 11 Jan 2022 13:10:31 -0000 Received: (qmail 30602 invoked by uid 550); 11 Jan 2022 13:09:46 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 9370 invoked from network); 11 Jan 2022 11:50:56 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=KxLwOv9JbDClClroffHRzVrZ3PyMi1OtJDRsxGgmOFA=; b=MINrcaPTXZqIp28Kw/6ris7Hd1wNlWSSIktltBfKJ7xmwDYjsyJg7DgqRQJ/sW0BUo mFnADiLilXpRTaBQTVZlTZyATwESFzh67h69hYrKlwAxly0BbABuLprV/uZs6ea+b6M1 b66EsdLvYUj0rvn4QG5Fq6QHEqEwrqW3I1S+zpqPvydXLtute8GSV9Z2Wl3yuBijz8ee +CMzP2nRDw08t+vGiV5pJYqzPs2fm0d4e4UIfLtEL+LeMltEzjEm9ZBt2NWpshMVG0/C 6icyotPFg6NADY4Cf2LgS2FV8/qcOsybV2WX5YQzXZvnGnsmOWrjAZaq0KXCcpkAYR+V IKJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=KxLwOv9JbDClClroffHRzVrZ3PyMi1OtJDRsxGgmOFA=; b=a8uNTj7HjDhM2+uqfgbyQk/jpEJKcvAGCO48SNjUbIQmj6nTKe6m8z5WKwuWGnQUpx zPyKxHEqIQ+h+gVpnFcUGoKU4q358ZSGC9x9RzK2rtJyy/YKnoLeG+t/1gt2DLo8tO7B QLoHLEPzBemquo4Qeq4Cux4yULM0hZ3/gWTTtxpsFvzwaDImoq1B/HyxGEnqUpieJUWf C9weH8wHH75sDgQJJTGGrgneI8oDXYOd1ziaCpn0ubtD7IpawGFcATma5ZCv/SGMhRPj Cz/6nIgiKphXRIA2Wiu0apJ3ig3aSfraKU1o0/0Czas2aS7fqezfqXIuByi875uBCRwm nzrQ== X-Gm-Message-State: AOAM5325wcnOgLNtilC+Vo5B6wZ2WYo3/o4TNK5vuUOSXzn57xtfuZIY 0xTNpvs2UBgkQiLgYgcGAnLoRAZQPxlGhc1MXH9K6i17En9jOw== X-Google-Smtp-Source: ABdhPJxlm/cI1I8FdL3YYcWL2YoTTQVzcFvN0XwbYSRZx7Etp+s3GgGVgnb9SYcbgZcu7D39g+UjDw/YAl5FROJI3Dc= X-Received: by 2002:a25:2f93:: with SMTP id v141mr5130860ybv.86.1641901844237; Tue, 11 Jan 2022 03:50:44 -0800 (PST) MIME-Version: 1.0 From: Ilia K Date: Tue, 11 Jan 2022 12:50:33 +0100 Message-ID: To: musl@lists.openwall.com Content-Type: multipart/alternative; boundary="0000000000002e915605d54d1097" Subject: [musl] Cannot dlopen() an already loaded shared library by its SONAME name --0000000000002e915605d54d1097 Content-Type: text/plain; charset="UTF-8" Hi! It turns out that `dlopen()` in musl cannot find the already loaded shared library using the library soname from the dynamic section, unlike glibc. Here is a simple demo app: ``` # cat main.c #include #include #define SOMELIB_DIR "/root/dlopen_file_name_test/somelib/" #define SOMELIB_NAME "libsomelib.so" int main() { void* library_handle = dlopen(SOMELIB_DIR SOMELIB_NAME, RTLD_LAZY | RTLD_LOCAL); printf("dlopen first load: %p\n", library_handle); { void* library_handle2 = dlopen(SOMELIB_DIR SOMELIB_NAME, RTLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD); printf("dlopen by file path: %p\n", library_handle2); if (library_handle2) dlclose(library_handle2); } { void* library_handle3 = dlopen(SOMELIB_NAME, RTLD_LAZY | RTLD_LOCAL); // RTLD_NOLOAD doesn't work either printf("dlopen by file name: %p %s\n", library_handle3, library_handle3 ? NULL : dlerror()); if (library_handle3) dlclose(library_handle3); } if (library_handle) dlclose(library_handle); return 0; } # cat somelib.c int somelib_func() { return 0; } # cat Makefile all: mkdir -p somelib gcc -shared somelib.c -Wl,-soname,libsomelib.so -o somelib/libsomelib.so gcc main.c -o main -ldl ``` Compile & run: ``` # make mkdir -p somelib gcc -shared somelib.c -Wl,-soname,libsomelib.so -o somelib/libsomelib.so gcc main.c -o main -ldl # ./main dlopen first load: 0x7f06a28a4ca0 dlopen by file path: 0x7f06a28a4ca0 dlopen by file name: 0 Error loading shared library libsomelib.so: No such file or directory ``` Do you have any plans to support it? -- - Ilia --0000000000002e915605d54d1097 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi!

It turns out that `dlopen()` in mus= l cannot find the already loaded shared library using the library soname fr= om the dynamic section, unlike glibc. Here is a simple demo app:
=
```
# cat main.c
#include <dlfcn.h>
#include <stdio.= h>

#define SOMELIB_DIR =C2=A0"/root/dlopen_file_name_test/so= melib/"
#define SOMELIB_NAME "libsomelib.so"

int m= ain() {
=C2=A0 =C2=A0 void* library_handle =3D dlopen(SOMELIB_DIR SOMELI= B_NAME, RTLD_LAZY | RTLD_LOCAL);
=C2=A0 =C2=A0 printf("dlopen first= load: %p\n", library_handle);

=C2=A0 =C2=A0 {
=C2=A0 =C2=A0= =C2=A0 =C2=A0 void* library_handle2 =3D dlopen(SOMELIB_DIR SOMELIB_NAME, R= TLD_LAZY | RTLD_LOCAL | RTLD_NOLOAD);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 printf= ("dlopen by file path: %p\n", library_handle2);
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 if (library_handle2) dlclose(library_handle2);
=C2=A0 =C2= =A0 }

=C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 void* library_h= andle3 =3D dlopen(SOMELIB_NAME, RTLD_LAZY | RTLD_LOCAL); =C2=A0// RTLD_NOLO= AD doesn't work either
=C2=A0 =C2=A0 =C2=A0 =C2=A0 printf("dlop= en by file name: %p %s\n", library_handle3, library_handle3 ? NULL : d= lerror());
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (library_handle3) dlclose(libr= ary_handle3);
=C2=A0 =C2=A0 }

=C2=A0 =C2=A0 if (library_handle) d= lclose(library_handle);
=C2=A0 =C2=A0 return 0;
}
# cat somelib.c<= br>int somelib_func() { return 0; }
# cat Makefile
all:
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 mkdir -p somelib
=C2=A0 =C2=A0 =C2=A0 =C2=A0 gcc -shar= ed somelib.c -Wl,-soname,libsomelib.so -o somelib/libsomelib.so
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 gcc main.c -o main -ldl
```

Compile & ru= n:
```
# make
mkdir -p somelib
gcc -shared somelib.c -Wl,-sonam= e,libsomelib.so -o somelib/libsomelib.so
gcc main.c -o main -ldl
# ./= main
dlopen first load: 0x7f06a28a4ca0
dlopen by file path: 0x7f06a28= a4ca0
dlopen by file name: 0 Error loading shared library libsomelib.so:= No such file or directory
```

Do you have any plans to support i= t?

--
- Ilia
--0000000000002e915605d54d1097--