diff --git a/Makefile-man.am b/Makefile-man.am index a4835a533f..7514e6a24f 100644 --- a/Makefile-man.am +++ b/Makefile-man.am @@ -1850,11 +1850,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/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..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 @@ -60,12 +64,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 +82,35 @@ 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, + 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 - may be used to list and extract coredumps. + 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 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 diff --git a/src/basic/copy.c b/src/basic/copy.c index 41dc8ca79a..e2db4be9ff 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); @@ -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 */ 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/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 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; 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; 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(); 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 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 }