From 17796419b5fd694348cceb65c3f77601faae082c Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Tue, 7 Jul 2020 10:49:11 +0100 Subject: rtld: Account static TLS surplus for audit modules The new static TLS surplus size computation is surplus_tls = 192 * (nns-1) + 144 * nns + 512 where nns is controlled via the rtld.nns tunable. This commit accounts audit modules too so nns = rtld.nns + audit modules. rtld.nns should only include the namespaces required by the application, namespaces for audit modules are accounted on top of that so audit modules don't use up the static TLS that is reserved for the application. This allows loading many audit modules without tuning rtld.nns or using up static TLS, and it fixes FAIL: elf/tst-auditmany Note that DL_NNS is currently a hard upper limit for nns, and if rtld.nns + audit modules go over the limit that's a fatal error. By default rtld.nns is 4 which allows 12 audit modules. Counting the audit modules is based on existing audit string parsing code, we cannot use GLRO(dl_naudit) before the modules are actually loaded. --- csu/libc-tls.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'csu') diff --git a/csu/libc-tls.c b/csu/libc-tls.c index e2603157e8..a67cc1dd4f 100644 --- a/csu/libc-tls.c +++ b/csu/libc-tls.c @@ -126,8 +126,8 @@ __libc_setup_tls (void) break; } - /* Calculate the size of the static TLS surplus. */ - _dl_tls_static_surplus_init (); + /* Calculate the size of the static TLS surplus, with 0 auditors. */ + _dl_tls_static_surplus_init (0); /* We have to set up the TCB block which also (possibly) contains 'errno'. Therefore we avoid 'malloc' which might touch 'errno'. -- cgit 1.4.1