Hi,
I'm wondering about the way Ganesha loads the FSAL
in load_fsal we have
#if defined(LINUX) && !defined(SANITIZE_ADDRESS)
dl = dlopen(path, RTLD_NOW | RTLD_LOCAL | RTLD_DEEPBIND);
#elif defined(FREEBSD) || defined(SANITIZE_ADDRESS)
dl = dlopen(path, RTLD_NOW | RTLD_LOCAL);
#endif
On my system Ganesha is built with jemalloc but my FSAL is not (it's not using the same build chain)
My FSAL is using malloc_usable_size.
Ganesha does not use this symbol so it is resolved during dlopen.
Because the RTLD_DEEPBIND flag is used, the libc version of malloc_usable_size is instead of the jemalloc one which ultimately leads to a crash.
I could make sure both are built with the same allocator but this also happens when I try to dynamically change the memory allocator (LD_PRELOAD tcmalloc).
Looking to the history (back in 2012) the RTLD_DEEPBIND flags has been introduced / removed and finally kept.
Can somebody remember the reason why it is needed ?
Did someone else had this kind of issue with LD_PRELOAD ?
Thanks for your help,
Regards,
Olivier