[PATCH v2 08/14] elf: Fix DTV gap reuse logic [BZ #27135]
Szabolcs Nagy
szabolcs.nagy@arm.com
Thu Jun 24 18:58:17 GMT 2021
The 06/24/2021 14:27, Florian Weimer wrote:
> * Florian Weimer:
>
> > * Szabolcs Nagy via Libc-alpha:
> >
> >> For some reason only dlopen failure caused dtv gaps to be reused.
> >>
> >> It is possible that the intent was to never reuse modids for a
> >> different module, but after dlopen failure all gaps are reused
> >> not just the ones caused by the unfinished dlopened.
> >>
> >> So the code has to handle reused modids already which seems to
> >> work, however the data races at thread creation and tls access
> >> (see bug 19329 and bug 27111) may be more severe if slots are
> >> reused so this is scheduled after those fixes. I think fixing
> >> the races are not simpler if reuse is disallowed and reuse has
> >> other benefits, so set GL(dl_tls_dtv_gaps) whenever entries are
> >> removed from the middle of the slotinfo list. The value does
> >> not have to be correct: incorrect true value causes the next
> >> modid query to do a slotinfo walk, incorrect false will leave
> >> gaps and new entries are added at the end.
> >>
> >> Fixes bug 27135.
> >> ---
> >> elf/dl-close.c | 6 +++++-
> >> elf/dl-open.c | 10 ----------
> >> elf/dl-tls.c | 5 +----
> >> 3 files changed, 6 insertions(+), 15 deletions(-)
> >
> > Apparently this broke GNOME Shell:
> >
> > <https://bugzilla.redhat.com/show_bug.cgi?id=1974970>
> >
> > I'm trying to figure out why.
>
> The bug is that if there is a gap, _dl_next_tls_modid does not update
> the slotinfo list to mark the modid to be returned as reserved, so
> multiple calls in a single dlopen operation keep returning the same
> modid.
>
> I'm not yet sure what the proper fix is for that.
this patch is not critical for the other tls issues i fixed
for 2.34, so it should be safe to revert.
this might have been the reason why gap reuse was not enabled.
but if _dl_next_tls_modid is broken then likely a failed
dlopen can trigger that on old glibc too, so a fix would be
nice.
thanks for debugging this.
More information about the Libc-alpha
mailing list