0

I am about to fix this issue. I read several queries regarding dlopen but still not clear. It seems dlopen is allocating memory by either calloc or malloc. But how to deallocate this memory?

Similar code pointing leak problem here for "dl"

(snip)
Event alloc_fn: Called allocation function "dlopen"
Event var_assign: Assigned variable "dl" to storage returned from "dlopen(&"libc.so.6",1)"
261             dl = dlopen("libc.so.6", RTLD_LAZY);
At conditional (1): "dl" taking true path
262             if (dl) {
Event noescape: Variable "dl" not freed or pointed-to in function "dlsym"
263                 func = dlsym(dl, "fdopen");
264             }
265             assert(func != NULL);
266         }
Event leaked_storage: Variable "dl" goes out of scope
267         return (*func)(fd, mode);
(snip)

Is it a bug or we need to ignore this? If I need to fix, could any one please guide me to fix it?

Thanks, Boobesh

1 Answers1

1

Read carefully dlopen(3) man page. Read also Drepper's paper How To Write Shared Libraries which gives a lot of interesting explanations.

You can release the resources acquired by dlopen by calling dlclose

Be careful about resources used or provided by the plugin that you have dlopen-ed. The plugin might have so called constructor or destructor functions, e.g. functions declared with the GCC function attribute constructor etc....

You could also not care, and not bother to call dlclose hence accepting some leakage. In practice, on Linux, you can call many hundred thousands times dlopen without pain (only your address space will grow), see my manydl.c example.

Basile Starynkevitch
  • 223,805
  • 18
  • 296
  • 547