Revert "core: set RLIMIT_CORE to unlimited by default"
authorMartin Pitt <martin.pitt@ubuntu.com>
Sat, 27 Feb 2016 11:27:06 +0000 (12:27 +0100)
committerLuca Boccassi <bluca@debian.org>
Tue, 27 Feb 2024 17:43:55 +0000 (17:43 +0000)
Partially revert commit 15a900327ab as this completely breaks core dumps
without systemd-coredump. It's also contradicting core(8), and it's not
systemd's place to redefine the kernel definitions of core files.

Commit bdfd7b2c now honours the process' RLIMIT_CORE for systemd-coredump. This
isn't what RLIMIT_CORE is supposed to do (it limits the size of the core
*file*, but the kernel deliberately ignores it for piping), so set a static
2^63 core size limit for systemd-coredump to go back to the previous behaviour
(otherwise the change above would break systemd-coredump).

Bug-Debian: https://bugs.debian.org/815020

Gbp-Pq: Topic debian
Gbp-Pq: Name Revert-core-set-RLIMIT_CORE-to-unlimited-by-default.patch

src/core/main.c
sysctl.d/50-coredump.conf.in

index 3f71cc094795c9e9be0677c8c253b1c153f4703a..876c7d587a177a19ff5bb0034678b8bd4a1cfcc2 100644 (file)
@@ -1653,22 +1653,6 @@ static void cmdline_take_random_seed(void) {
                    "This functionality should not be used outside of testing environments.");
 }
 
-static void initialize_coredump(bool skip_setup) {
-        if (getpid_cached() != 1)
-                return;
-
-        /* Don't limit the core dump size, so that coredump handlers such as systemd-coredump (which honour
-         * the limit) will process core dumps for system services by default. */
-        if (setrlimit(RLIMIT_CORE, &RLIMIT_MAKE_CONST(RLIM_INFINITY)) < 0)
-                log_warning_errno(errno, "Failed to set RLIMIT_CORE: %m");
-
-        /* But at the same time, turn off the core_pattern logic by default, so that no coredumps are stored
-         * until the systemd-coredump tool is enabled via sysctl. However it can be changed via the kernel
-         * command line later so core dumps can still be generated during early startup and in initrd. */
-        if (!skip_setup)
-                disable_coredumps();
-}
-
 static void initialize_core_pattern(bool skip_setup) {
         int r;
 
@@ -2922,8 +2906,6 @@ int main(int argc, char *argv[]) {
                         kernel_timestamp = DUAL_TIMESTAMP_NULL;
                 }
 
-                initialize_coredump(skip_setup);
-
                 r = fixup_environment();
                 if (r < 0) {
                         log_struct_errno(LOG_EMERG, r,
index 90c080bdfefafd1a28eb29d3a616fe207b1ea9bf..17308415b1f8c8c352e82c492d9370c74cd90b72 100644 (file)
@@ -13,7 +13,7 @@
 # the core dump.
 #
 # See systemd-coredump(8) and core(5).
-kernel.core_pattern=|{{LIBEXECDIR}}/systemd-coredump %P %u %g %s %t %c %h
+kernel.core_pattern=|{{LIBEXECDIR}}/systemd-coredump %P %u %g %s %t 9223372036854775808 %h
 
 # Allow 16 coredumps to be dispatched in parallel by the kernel.
 # We collect metadata from /proc/%P/, and thus need to make sure the crashed