Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 08 May 2021 07:10:55 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 255698] dlerror() returns non-NULL after a successful call to dlopen()/dlsym()
Message-ID:  <bug-255698-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D255698

            Bug ID: 255698
           Summary: dlerror() returns non-NULL after a successful call to
                    dlopen()/dlsym()
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: astralblue@gmail.com

dlerror() used to return NULL after a successful call to other dl family of
functions, such as dlopen() and dlsym().  Starting recently, dlerror() star=
ted
returning non-NULL message after such successful calls.  The message is
initially an empty string, or an error message most recently seen=E2=80=94e=
ven if the
most recent dlXXXX() call was successful.

Test program:

#include <dlfcn.h>
#include <stdio.h>

#define PRINT_DLERROR() do { \
        char const *err =3D dlerror(); \
        printf("dlerror()=3D%p", err); \
        if (err) printf(" (%s)", err); \
        printf("\n"); \
} while (0)

void
test_dlopen(char const *path)
{
        void *handle =3D dlopen(path, RTLD_NOW);
        printf("dlopen(%s, RTLD_NOW)=3D%p\n", path, handle);
        PRINT_DLERROR();
        PRINT_DLERROR();
        if (handle)
                dlclose(handle);
}

int
main()
{
        PRINT_DLERROR();
        PRINT_DLERROR();
        test_dlopen("/foobar.so");
        test_dlopen("/usr/lib/libm.so");
        return 0;
}

Expected result (taken on a 12.2-RELEASE-p2 jail, note dlerror() returns NU=
LL
upon a successful dlopen()):

dlerror()=3D0x0
dlerror()=3D0x0
dlopen(/foobar.so, RTLD_NOW)=3D0x0
dlerror()=3D0x8002296c0 (Cannot open "/foobar.so")
dlerror()=3D0x0
dlopen(/usr/lib/libm.so, RTLD_NOW)=3D0x80022e800
dlerror()=3D0x0
dlerror()=3D0x0

Actual result (taken on a -CURRENT system, built from main branch commit
34abb05be77a32a2b2673fb4b85eaa53a3d1446e, note dlerror() returns non-NULL on
the first dlerror() call, even after a successful dlopen() and also before =
the
first dlopen(), also note the dlerror() message after a successful dlopen()=
 is
from the previous failure):

34abb05be77a32a2b2673fb4b85eaa53a3d1446e

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-255698-227>