From c9648aa659bb1acfc7dc214e75900734e011be6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 1 Apr 2016 09:07:17 -0400 Subject: [PATCH 01/11] man: move KillSignal in the right section in directives list --- man/systemd.nspawn.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/systemd.nspawn.xml b/man/systemd.nspawn.xml index 5ec878512a..ce900a5db1 100644 --- a/man/systemd.nspawn.xml +++ b/man/systemd.nspawn.xml @@ -224,7 +224,7 @@ - + KillSignal= Specify the process signal to send to the container's PID 1 when nspawn itself receives SIGTERM, in From af640dca6e5aa1c5264dd90a419f0b63bfdea7b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 1 Apr 2016 09:19:11 -0400 Subject: [PATCH 02/11] rpm triggers: add note about minimum supported version --- src/core/triggers.systemd.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/triggers.systemd.in b/src/core/triggers.systemd.in index 9e18a39a67..0d8c303136 100644 --- a/src/core/triggers.systemd.in +++ b/src/core/triggers.systemd.in @@ -18,6 +18,8 @@ # along with systemd; If not, see . # The contents of this are an example to be copied into systemd.spec. +# +# Minimum rpm version supported: 4.13.0 %transfiletriggerin -P 900900 -p -- @systemunitdir@ /etc/systemd/system -- This script will run after any package is initially installed or From 0f8aeac2557e5ef41b68569890c81ba1d5e92136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 10:02:41 -0400 Subject: [PATCH 03/11] coredumpctl: grammaro fix Mentioned in #2901. --- src/coredump/coredumpctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c index dac800ebef..27b1e0fb3f 100644 --- a/src/coredump/coredumpctl.c +++ b/src/coredump/coredumpctl.c @@ -664,7 +664,7 @@ static int save_core(sd_journal *j, int fd, char **path, bool *unlink_temp) { #endif } else { if (r == -ENOENT) - log_error("Cannot retrieve coredump from journal nor disk."); + log_error("Cannot retrieve coredump from journal or disk."); else log_error_errno(r, "Failed to retrieve COREDUMP field: %m"); goto error; From f396232996b5d347cd743ff1d181ed6e5b7209f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 10:40:09 -0400 Subject: [PATCH 04/11] man: add more cross-references to coredump.conf(5) and systemd-coredump(8) Fixes #2901. --- man/coredump.conf.xml | 9 ++++++++- man/systemd-coredump.xml | 34 ++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml index a0a497b467..2064a96523 100644 --- a/man/coredump.conf.xml +++ b/man/coredump.conf.xml @@ -60,7 +60,14 @@ These files configure the behavior of systemd-coredump8, - a handler for core dumps invoked by the kernel. + a handler for core dumps invoked by the kernel. Whether systemd-coredump is used + is determined by the kernel's + kernel.core_pattern sysctl8 + setting. See + systemd-coredump8 + and + core5 + pages for the details. diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml index f1598461ef..0d3115094c 100644 --- a/man/systemd-coredump.xml +++ b/man/systemd-coredump.xml @@ -60,12 +60,13 @@ signal and dumps core. For it to be used in this capacity, it must be specified by the kernel.core_pattern sysctl8 - setting. Systemd installs - /usr/lib/sysctl.d/50-coredump.conf which - configures kernel.core_pattern to invoke - systemd-coredump. This file may be masked or - overridden to use a different setting following normal - sysctl.d5 rules. + setting. The syntax of this setting is explained in + core5. + Systemd installs /usr/lib/sysctl.d/50-coredump.conf which configures + kernel.core_pattern to invoke systemd-coredump. + This file may be masked or overridden to use a different setting following normal + sysctl.d5 + rules. The behavior of a specific program upon reception of a signal is governed by a few factors which are described in detail @@ -77,18 +78,19 @@ systemd.exec5). - systemd-coredump will log the coredump - including a backtrace if possible, and store the core (contents of - process' memory contents) in an external file on disk in - /var/lib/systemd/coredump, or directly in - the journal. This behavior may be modified using - coredump.conf5. + The behaviour of systemd-coredump is configured through + /etc/systemd/coredump.conf and other configuration files. See + coredump.conf5 + for details. By default, systemd-coredump will log the coredump including a + backtrace if possible, and store the core (contents of process' memory contents) in an external + file on disk in /var/lib/systemd/coredump. - Apart from the - journalctl1 - log viewer, + The log entry and a backtrace are stored in the journal, and can be viewed with + journalctl1. coredumpctl1 - may be used to list and extract coredumps. + may be used to list and extract coredumps or load them in + gdb1. + From 7382a3cc232a0b60f1cd4604ce8fa9ae79f654e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 11:05:11 -0400 Subject: [PATCH 05/11] man: describe how to reload sysctl configuration Also fixes option name (s/--path/--prefix/). --- man/systemd-coredump.xml | 9 +++++ man/systemd-sysctl.service.xml | 69 +++++++++++++++++++++++++++++----- 2 files changed, 68 insertions(+), 10 deletions(-) diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml index 0d3115094c..aa352448b2 100644 --- a/man/systemd-coredump.xml +++ b/man/systemd-coredump.xml @@ -91,6 +91,15 @@ may be used to list and extract coredumps or load them in gdb1. + + The coredump helper is invoked anew each time. Therefore, any configuration + changes will take effect on the invocation of systemd-coredump. + If the sysctl configuration is modified, it must be updated in the kernel before + it takes effect, see + systemd-sysctl8 + and + sysctl8. + diff --git a/man/systemd-sysctl.service.xml b/man/systemd-sysctl.service.xml index 9027ff0f3f..686b2cdef4 100644 --- a/man/systemd-sysctl.service.xml +++ b/man/systemd-sysctl.service.xml @@ -62,24 +62,29 @@ systemd-sysctl.service is an early boot service that configures sysctl8 - kernel parameters. + kernel parameters by invoking /usr/lib/systemd/systemd-sysctl. - If invoked with no arguments, it applies all directives from - all configuration files in - sysctl.d5 - are searched for a matching file. If one or more filenames are passed on - the command line, only the directives in these files are applied. - + When invoked with no arguments, /usr/lib/systemd/systemd-sysctl applies + all directives from configuration files listed in + sysctl.d5. + If one or more filenames are passed on the command line, only the directives in these files are + applied. + + In addition, option may be used to limit which sysctl + settings are applied. See sysctl.d5 - for information about the configuration of this service. + for information about the configuration of sysctl settings. After sysctl configuration is + changed on disk, it must be written to the files in /proc/sys before it + takes effect. It is possible to update specific settings, or simply to reload all configuration, + see Examples below. Options - - + + Only apply rules with the specified prefix. @@ -91,6 +96,50 @@ + + Examples + + + Reset all sysctl settings + + systemctl restart systemd-sysctl + + + + View coredump handler configuration + + # sysctl kernel.core_pattern +kernel.core_pattern = |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t %P %I + + + + + Update coredump handler configuration + + # /usr/lib/systemd/systemd-sysctl --prefix kernel.core_pattern + + This searches all the directories listed in + sysctl.d5 + for configuration files and writes /proc/sys/kernel/core_pattern. + + + + Update coredump handler configuration according to a specific file + + # /usr/lib/systemd/systemd-sysctl 50-coredump.conf + + This applies all the settings found in 50-coredump.conf. + Either /etc/sysctl.d/50-coredump.conf, or + /run/sysctl.d/50-coredump.conf, or + /usr/lib/sysctl.d/50-coredump.conf will be used, in the order + of preference. + + + See + sysctl8 + for various ways to directly apply sysctl settings. + + See Also From e7f376c2e8b0495345c6b8f8e93ee9bfdc6f350d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 11:50:30 -0400 Subject: [PATCH 06/11] sd-lldp.h: remove double newline For #2898. --- src/systemd/sd-lldp.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/systemd/sd-lldp.h b/src/systemd/sd-lldp.h index 4f2a3b50c0..fa6ab9ad3b 100644 --- a/src/systemd/sd-lldp.h +++ b/src/systemd/sd-lldp.h @@ -100,7 +100,6 @@ enum { SD_LLDP_SYSTEM_CAPABILITIES_SVLAN| \ SD_LLDP_SYSTEM_CAPABILITIES_TPMR)) - #define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 } #define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f } From 1a112b52734316085eb430df1785279a2ab6f083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 11:52:44 -0400 Subject: [PATCH 07/11] Add networkd-gperf.c to gitignore For #2915. --- src/network/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/src/network/.gitignore b/src/network/.gitignore index 8858596489..aca55206b7 100644 --- a/src/network/.gitignore +++ b/src/network/.gitignore @@ -1,2 +1,3 @@ /networkd-network-gperf.c /networkd-netdev-gperf.c +/networkd-gperf.c From 7c2da2ca8824693c7eeb83e4b22174c33b2a480a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 17:46:49 -0400 Subject: [PATCH 08/11] test-compress-benchmark: fix argument parsing on 32bit The patch is not minimal, but a function to parse size_t is probably going to come in handy in other places, so I think it's nicer to define a proper parsing function than to open-code the cast. --- src/basic/copy.c | 2 +- src/basic/parse-util.h | 12 ++++++++++++ src/journal/test-compress-benchmark.c | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/basic/copy.c b/src/basic/copy.c index 41dc8ca79a..10c03a8b52 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -71,7 +71,7 @@ static ssize_t try_copy_file_range(int fd_in, loff_t *off_in, int copy_bytes(int fdf, int fdt, uint64_t max_bytes, bool try_reflink) { bool try_cfr = true, try_sendfile = true, try_splice = true; int r; - size_t m = SSIZE_MAX; /* that the maximum that sendfile and c_f_r accept */ + size_t m = SSIZE_MAX; /* that is the maximum that sendfile and c_f_r accept */ assert(fdf >= 0); assert(fdt >= 0); diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h index d8dc26a36e..c407263e16 100644 --- a/src/basic/parse-util.h +++ b/src/basic/parse-util.h @@ -90,6 +90,18 @@ static inline int safe_atoli(const char *s, long int *ret_u) { } #endif +#if SIZE_MAX == UINT_MAX +static inline int safe_atozu(const char *s, size_t *ret_u) { + assert_cc(sizeof(size_t) == sizeof(unsigned)); + return safe_atou(s, ret_u); +} +#else +static inline int safe_atozu(const char *s, size_t *ret_u) { + assert_cc(sizeof(size_t) == sizeof(long unsigned)); + return safe_atolu(s, ret_u); +} +#endif + int safe_atod(const char *s, double *ret_d); int parse_fractional_part_u(const char **s, size_t digits, unsigned *res); diff --git a/src/journal/test-compress-benchmark.c b/src/journal/test-compress-benchmark.c index 0ef6d36a50..6f6d71435d 100644 --- a/src/journal/test-compress-benchmark.c +++ b/src/journal/test-compress-benchmark.c @@ -164,7 +164,7 @@ int main(int argc, char *argv[]) { arg_duration = x * USEC_PER_SEC; } if (argc == 3) - (void) safe_atolu(argv[2], &arg_start); + (void) safe_atozu(argv[2], &arg_start); else arg_start = getpid(); From d219849e60db7096bfb111c9ec2555d825bf0c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 18:20:12 -0400 Subject: [PATCH 09/11] basic/copy: remove unnecessary cast Both types are unsigned, so the cast to the longer type is automatic. --- src/basic/copy.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/basic/copy.c b/src/basic/copy.c index 10c03a8b52..e2db4be9ff 100644 --- a/src/basic/copy.c +++ b/src/basic/copy.c @@ -94,8 +94,8 @@ int copy_bytes(int fdf, int fdt, uint64_t max_bytes, bool try_reflink) { if (max_bytes <= 0) return 1; /* return > 0 if we hit the max_bytes limit */ - if ((uint64_t) m > max_bytes) - m = (size_t) max_bytes; + if (m > max_bytes) + m = max_bytes; } /* First try copy_file_range(), unless we already tried */ From 8e170d29091464caead7b2c989a50bf0e6f1c605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 2 Apr 2016 18:51:16 -0400 Subject: [PATCH 10/11] compress: fix gcc warnings about void* used in arithmetic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/journal/compress.c: In function ‘compress_blob_lz4’: src/journal/compress.c:115:49: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] r = LZ4_compress_limitedOutput(src, dst + 8, src_size, (int) dst_alloc_size - 8); ^ src/journal/compress.c: In function ‘decompress_blob_xz’: src/journal/compress.c:179:35: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] s.next_out = *dst + used; ^ src/journal/compress.c: In function ‘decompress_blob_lz4’: src/journal/compress.c:218:37: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] r = LZ4_decompress_safe(src + 8, out, src_size - 8, size); ^ src/journal/compress.c: In function ‘decompress_startswith_xz’: src/journal/compress.c:294:38: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] s.next_out = *buffer + *buffer_size - s.avail_out; ^ src/journal/compress.c:294:53: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] s.next_out = *buffer + *buffer_size - s.avail_out; ^ src/journal/compress.c: In function ‘decompress_startswith_lz4’: src/journal/compress.c:327:45: warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith] r = LZ4_decompress_safe_partial(src + 8, *buffer, src_size - 8, ^ LZ4 and XZ functions use char* and unsigned char*, respectively, so keep void* in our internal APIs and add casts. --- src/journal/compress.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/journal/compress.c b/src/journal/compress.c index c43849c46a..ba734b5561 100644 --- a/src/journal/compress.c +++ b/src/journal/compress.c @@ -112,7 +112,7 @@ int compress_blob_lz4(const void *src, uint64_t src_size, if (src_size < 9) return -ENOBUFS; - r = LZ4_compress_limitedOutput(src, dst + 8, src_size, (int) dst_alloc_size - 8); + r = LZ4_compress_limitedOutput(src, (char*)dst + 8, src_size, (int) dst_alloc_size - 8); if (r <= 0) return -ENOBUFS; @@ -176,7 +176,7 @@ int decompress_blob_xz(const void *src, uint64_t src_size, return -ENOMEM; s.avail_out = space - used; - s.next_out = *dst + used; + s.next_out = *(uint8_t**)dst + used; } *dst_size = space - s.avail_out; @@ -215,7 +215,7 @@ int decompress_blob_lz4(const void *src, uint64_t src_size, } else out = *dst; - r = LZ4_decompress_safe(src + 8, out, src_size - 8, size); + r = LZ4_decompress_safe((char*)src + 8, out, src_size - 8, size); if (r < 0 || r != size) return -EBADMSG; @@ -291,7 +291,7 @@ int decompress_startswith_xz(const void *src, uint64_t src_size, if (!(greedy_realloc(buffer, buffer_size, *buffer_size * 2, 1))) return -ENOMEM; - s.next_out = *buffer + *buffer_size - s.avail_out; + s.next_out = *(uint8_t**)buffer + *buffer_size - s.avail_out; } #else @@ -324,7 +324,7 @@ int decompress_startswith_lz4(const void *src, uint64_t src_size, if (!(greedy_realloc(buffer, buffer_size, ALIGN_8(prefix_len + 1), 1))) return -ENOMEM; - r = LZ4_decompress_safe_partial(src + 8, *buffer, src_size - 8, + r = LZ4_decompress_safe_partial((char*)src + 8, *buffer, src_size - 8, prefix_len + 1, *buffer_size); if (r >= 0) size = (unsigned) r; From 6dfde7acf1405adbb7adb2adc6969c4eb3c0990a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 5 Apr 2016 21:00:10 -0400 Subject: [PATCH 11/11] man: also mention systemd-coredump@.service and systemd-coredump.socket Added in 3c171f0b1e. --- Makefile-man.am | 12 +++++++++++- man/systemd-coredump.xml | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Makefile-man.am b/Makefile-man.am index a7e348b1f1..db9b090432 100644 --- a/Makefile-man.am +++ b/Makefile-man.am @@ -1849,11 +1849,21 @@ MANPAGES += \ man/coredumpctl.1 \ man/systemd-coredump.8 MANPAGES_ALIAS += \ - man/coredump.conf.d.5 + man/coredump.conf.d.5 \ + man/systemd-coredump.socket.8 \ + man/systemd-coredump@.service.8 man/coredump.conf.d.5: man/coredump.conf.5 +man/systemd-coredump.socket.8: man/systemd-coredump.8 +man/systemd-coredump@.service.8: man/systemd-coredump.8 man/coredump.conf.d.html: man/coredump.conf.html $(html-alias) +man/systemd-coredump.socket.html: man/systemd-coredump.html + $(html-alias) + +man/systemd-coredump@.service.html: man/systemd-coredump.html + $(html-alias) + endif if ENABLE_EFI diff --git a/man/systemd-coredump.xml b/man/systemd-coredump.xml index aa352448b2..51dc27e8d3 100644 --- a/man/systemd-coredump.xml +++ b/man/systemd-coredump.xml @@ -45,11 +45,15 @@ systemd-coredump + systemd-coredump.socket + systemd-coredump@.service Log and store core dumps /usr/lib/systemd/systemd-coredump + systemd-coredump@.service + systemd-coredump.socket @@ -85,6 +89,13 @@ backtrace if possible, and store the core (contents of process' memory contents) in an external file on disk in /var/lib/systemd/coredump. + When the kernel invokes systemd-coredump to handle a coredump, + it will connect to the socket created by the systemd-coredump.socket + unit, which in turn will spawn a systemd-coredump@.service instance + to process the coredump. Hence systemd-coredump.socket + and systemd-coredump@.service are helper units which do the actual + processing of coredumps and are subject to normal service management. + The log entry and a backtrace are stored in the journal, and can be viewed with journalctl1. coredumpctl1