public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Szabolcs Nagy <szabolcs.nagy@arm.com>
To: libc-alpha@sourceware.org
Subject: [PATCH v2 00/14] Dynamic TLS related data race fixes
Date: Tue, 13 Apr 2021 09:17:42 +0100	[thread overview]
Message-ID: <cover.1618301209.git.szabolcs.nagy@arm.com> (raw)

This series is trying to address some long standing dynamic
linker races:

19329 - race between tls access, pthread_create and dlopen
27111 - race between tls access, pthread_create and dlclose
27137 - x86: lazy tlsdesc relocation is racy

and there are a number of related issues fixed:

27135 - dtv gaps are not reused
27136 - dtv off-by-1 error
19924 - slow tls access after dlopen
27721 - x86: ld audit does not work with bind now tlsdesc

there are related issues that are not fixed, but tried to
not make the situation worse:

16133 - tls access is not as-safe
16134 - tls allocation aborts on oom
27112 - generation count may overflow on 32 bit targets

some of the patches can be handled independently.

The set is also available in the nsz/bug19329-v2 branch.

A common theme between the races is that the GL(dl_load_lock)
lock protects various dynamic linker shared global state that
are written under that lock, but in various situations (lazy
binding, tls access, thread creation) they are read without
the lock.

There seems to be consensus to not require relaxed atomic loads
for non-racy reads of objects that may be accessed atomically
elsewhere. The wiki with the concurrency rules have not been
updated yet. In this patch relaxed atomics is used if an access
is racy but synchronization is only missing when that is not
relied on (e.g. tls access must be synchronized with dlopen by
the user so unsynchronized dtv updates are not relied on).

I ran the glibc tests on x86_64, i386 and aarch64 linux (but
this may not cover the x86 tlsdesc changes completely).

v2:
- committed the fix for bug 27403 (arch64 memleak on dlclose)
- committed the fix for bug 21349 (a lazy symbol binding race)
- added an RFC fix for bug 19924 (slow tls after dlopen)
- reordered test patches after bug fixes.
- addressed previous review comments (see individual patches).

Szabolcs Nagy (14):
  elf: Fix a DTV setup issue [BZ #27136]
  elf: Add a DTV setup test [BZ #27136]
  elf: Fix comments and logic in _dl_add_to_slotinfo
  elf: Refactor _dl_update_slotinfo to avoid use after free
  elf: Fix data races in pthread_create and TLS access [BZ #19329]
  elf: Use relaxed atomics for racy accesses [BZ #19329]
  elf: Add test case for [BZ #19329]
  elf: Fix DTV gap reuse logic [BZ #27135]
  x86_64: Avoid lazy relocation of tlsdesc [BZ #27137]
  i386: Avoid lazy relocation of tlsdesc [BZ #27137]
  x86_64: Remove lazy tlsdesc relocation related code
  i386: Remove lazy tlsdesc relocation related code
  elf: Remove lazy tlsdesc relocation related code
  RFC elf: Fix slow tls access after dlopen [BZ #19924]

 elf/Makefile                |  15 ++-
 elf/dl-close.c              |  26 ++--
 elf/dl-open.c               |  21 ++--
 elf/dl-reloc.c              |   5 +-
 elf/dl-tls.c                | 161 ++++++++++++++-----------
 elf/tlsdeschtab.h           |  53 +--------
 elf/tst-tls20.c             |  98 +++++++++++++++
 elf/tst-tls20mod-bad.c      |   2 +
 elf/tst-tls21.c             |  68 +++++++++++
 elf/tst-tls21mod.c          |   1 +
 sysdeps/aarch64/tlsdesc.c   |   1 -
 sysdeps/arm/tlsdesc.c       |   1 -
 sysdeps/generic/ldsodefs.h  |   3 +-
 sysdeps/i386/dl-machine.h   |  76 ++++++------
 sysdeps/i386/dl-tlsdesc.S   | 156 ------------------------
 sysdeps/i386/dl-tlsdesc.h   |   6 +-
 sysdeps/i386/tlsdesc.c      | 230 ------------------------------------
 sysdeps/x86_64/dl-machine.h |  23 ++--
 sysdeps/x86_64/dl-tls.c     |   5 +-
 sysdeps/x86_64/dl-tlsdesc.S | 104 ----------------
 sysdeps/x86_64/dl-tlsdesc.h |   4 +-
 sysdeps/x86_64/tlsdesc.c    | 108 -----------------
 22 files changed, 361 insertions(+), 806 deletions(-)
 create mode 100644 elf/tst-tls20.c
 create mode 100644 elf/tst-tls20mod-bad.c
 create mode 100644 elf/tst-tls21.c
 create mode 100644 elf/tst-tls21mod.c

-- 
2.17.1


             reply	other threads:[~2021-04-13  8:18 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-13  8:17 Szabolcs Nagy [this message]
2021-04-13  8:18 ` [PATCH v2 01/14] elf: Fix a DTV setup issue [BZ #27136] Szabolcs Nagy
2021-04-13  8:36   ` Andreas Schwab
2021-04-13  9:35     ` Szabolcs Nagy
2021-04-13 10:22       ` Andreas Schwab
2021-04-13 10:34         ` Szabolcs Nagy
2021-04-13 10:51           ` Andreas Schwab
2021-04-13  8:18 ` [PATCH v2 02/14] elf: Add a DTV setup test " Szabolcs Nagy
2021-04-14 18:06   ` Adhemerval Zanella
2021-04-15  9:53     ` Szabolcs Nagy
2021-04-13  8:18 ` [PATCH v2 03/14] elf: Fix comments and logic in _dl_add_to_slotinfo Szabolcs Nagy
2021-04-14 18:12   ` Adhemerval Zanella
2021-04-13  8:18 ` [PATCH v2 04/14] elf: Refactor _dl_update_slotinfo to avoid use after free Szabolcs Nagy
2021-04-14 18:20   ` Adhemerval Zanella
2021-04-13  8:19 ` [PATCH v2 05/14] elf: Fix data races in pthread_create and TLS access [BZ #19329] Szabolcs Nagy
2021-04-15 17:44   ` Adhemerval Zanella
2021-04-13  8:19 ` [PATCH v2 06/14] elf: Use relaxed atomics for racy accesses " Szabolcs Nagy
2021-04-15 18:21   ` Adhemerval Zanella
2021-04-16  9:12     ` Szabolcs Nagy
2021-05-11  2:56       ` Carlos O'Donell
2021-05-11  9:31         ` Szabolcs Nagy
2021-05-11 16:19           ` Szabolcs Nagy
2021-05-12 20:33           ` Carlos O'Donell
2021-04-13  8:19 ` [PATCH v2 07/14] elf: Add test case for " Szabolcs Nagy
2021-04-15 19:21   ` Adhemerval Zanella
2021-04-13  8:20 ` [PATCH v2 08/14] elf: Fix DTV gap reuse logic [BZ #27135] Szabolcs Nagy
2021-04-15 19:45   ` Adhemerval Zanella
2021-06-24  9:48   ` Florian Weimer
2021-06-24 12:27     ` Florian Weimer
2021-06-24 12:57       ` Adhemerval Zanella
2021-06-24 14:20         ` Florian Weimer
2021-06-24 18:58       ` Szabolcs Nagy
2021-04-13  8:20 ` [PATCH v2 09/14] x86_64: Avoid lazy relocation of tlsdesc [BZ #27137] Szabolcs Nagy
2021-04-13 14:02   ` H.J. Lu
2021-04-13  8:20 ` [PATCH v2 10/14] i386: " Szabolcs Nagy
2021-04-13 14:02   ` H.J. Lu
2021-04-13  8:21 ` [PATCH v2 11/14] x86_64: Remove lazy tlsdesc relocation related code Szabolcs Nagy
2021-04-13 14:03   ` H.J. Lu
2021-04-13  8:21 ` [PATCH v2 12/14] i386: " Szabolcs Nagy
2021-04-13 14:04   ` H.J. Lu
2021-04-13  8:21 ` [PATCH v2 13/14] elf: " Szabolcs Nagy
2021-04-15 19:52   ` Adhemerval Zanella
2021-04-13  8:21 ` [PATCH v2 14/14] RFC elf: Fix slow tls access after dlopen [BZ #19924] Szabolcs Nagy
2022-09-16  9:54   ` Carlos O'Donell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1618301209.git.szabolcs.nagy@arm.com \
    --to=szabolcs.nagy@arm.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).