Prevent inconsistent CPU state after sequence of dlclose/dlopen
Florian Weimer
fweimer@redhat.com
Fri Jan 10 17:04:25 GMT 2025
* Mathieu Desnoyers:
> I was discussing with Mark Rutland recently, and he pointed out that a
> sequence of dlclose/dlopen mapping new code at the same addresses in
> multithreaded environments is an issue on ARM, and possibly on Intel/AMD
> with the newer TLB broadcast maintenance.
>
> I maintain the membarrier(2) system call, which provides a
> MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE command for this
> purpose. It's been there since Linux 4.16. It can be configured
> out (CONFIG_MEMBARRIER=n), but it's enabled by default.
>
> Calling this after dlclose() in glibc would prevent this issue.
>
> Is it handled in some other way, or should we open a bugzilla
> entry to track this ?
There is nothing special about dlopen/dlclose, we just use mmap/munmap.
If there is a synchronization problem, we'd have to add to add barriers
to mmap and munmap.
But why isn't it up to the kernel to handle this correctly?
Thanks,
Florian
More information about the Libc-alpha
mailing list