]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mempool: only enable mempool use when linked to libsystemd-shared.so
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 9 Oct 2018 14:02:55 +0000 (16:02 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 11 Oct 2018 09:10:37 +0000 (11:10 +0200)
Mempool use is enabled or disabled based on the mempool_use_allowed symbol that
is linked in.

Should fix assert crashes in external programs caused by #9792.
Replaces #10286.

v2:
- use two different source files instead of a gcc constructor

meson.build
src/basic/mempool.c
src/basic/mempool.h
src/libsystemd/disable-mempool.c [new file with mode: 0644]
src/libsystemd/meson.build
src/shared/enable-mempool.c [new file with mode: 0644]
src/shared/meson.build

index 1ef07ae1a31f79c1559160b7ab5dd73688e4af31..09986d58dcde635cd67425f2ac426ffd8aabaff1 100644 (file)
@@ -1380,6 +1380,7 @@ libjournal_core = static_library(
 libsystemd_sym_path = '@0@/@1@'.format(meson.current_source_dir(), libsystemd_sym)
 libsystemd = shared_library(
         'systemd',
+        disable_mempool_c,
         version : libsystemd_version,
         include_directories : includes,
         link_args : ['-shared',
@@ -1461,6 +1462,7 @@ subdir('test')
 test_dlopen = executable(
         'test-dlopen',
         test_dlopen_c,
+        disable_mempool_c,
         include_directories : includes,
         link_with : [libbasic],
         dependencies : [libdl],
@@ -1481,6 +1483,7 @@ foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
                 nss = shared_library(
                         'nss_' + module,
                         'src/nss-@0@/nss-@0@.c'.format(module),
+                        disable_mempool_c,
                         version : '2',
                         include_directories : includes,
                         # Note that we link NSS modules with '-z nodelete' so that mempools never get orphaned
index 9f17b77e472df3ac1cb8e555cf5f86c10b271b07..159c963377888dc822c5e2faf4d395c0f53fa7f3 100644 (file)
@@ -78,6 +78,8 @@ bool mempool_enabled(void) {
         if (!is_main_thread())
                 return false;
 
+        if (!mempool_use_allowed)
+                b = false;
         if (b < 0)
                 b = getenv_bool("SYSTEMD_MEMPOOL") != 0;
 
index d3ad63628f9d04da635c8895cac6df9643a4008b..0eecca0f92a9062d3cb46bab223b7215c7e71644 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1+ */
 #pragma once
 
+#include <stdbool.h>
 #include <stddef.h>
 
 struct pool;
@@ -22,6 +23,7 @@ static struct mempool pool_name = { \
         .at_least = alloc_at_least, \
 }
 
+extern const bool mempool_use_allowed;
 bool mempool_enabled(void);
 
 #if VALGRIND
diff --git a/src/libsystemd/disable-mempool.c b/src/libsystemd/disable-mempool.c
new file mode 100644 (file)
index 0000000..034bd24
--- /dev/null
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "mempool.h"
+
+const bool mempool_use_allowed = false;
index e3716a68d87bc527b90ce175f39124ed26e67a54..d95406e7acb74dc415d427a36866c5f28439158d 100644 (file)
@@ -81,6 +81,8 @@ libsystemd_sources = files('''
         sd-utf8/sd-utf8.c
 '''.split()) + id128_sources + sd_daemon_c + sd_event_c + sd_login_c
 
+disable_mempool_c = files('disable-mempool.c')
+
 libsystemd_c_args = ['-fvisibility=default']
 
 libsystemd_static = static_library(
diff --git a/src/shared/enable-mempool.c b/src/shared/enable-mempool.c
new file mode 100644 (file)
index 0000000..a571b43
--- /dev/null
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "mempool.h"
+
+const bool mempool_use_allowed = true;
index 498b73c7504caecee9a3837da548752c290f7409..84d52a37eb2d230d2ac09df1010b52943831c61b 100644 (file)
@@ -36,6 +36,7 @@ shared_sources = files('''
         dropin.h
         efivars.c
         efivars.h
+        enable-mempool.c
         fdset.c
         fdset.h
         firewall-util.h