Assorted bugfixes and backports
Most notably revert of
743970d2ea
Resolves: #1170765,#1202598
This commit is contained in:
parent
f72f2e475e
commit
fb7efbf012
|
@ -0,0 +1,40 @@
|
|||
From df676a819f84b230f4aa3eb600083fe357c674c8 Mon Sep 17 00:00:00 2001
|
||||
From: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
|
||||
Date: Wed, 24 Jun 2015 12:01:26 +0900
|
||||
Subject: [PATCH 01/47] selinux: fix missing SELinux unit access check
|
||||
|
||||
Currently, SELinux unit access check is not performed if a given unit
|
||||
file has not been registered in a hash table. This is because function
|
||||
manager_get_unit() only tries to pick up a Unit object from a Unit
|
||||
hash table. Instead, we use function manager_load_unit() searching
|
||||
Unit file pathes for the given Unit file.
|
||||
---
|
||||
src/core/selinux-access.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
|
||||
index e9a9a02..50a90b0 100644
|
||||
--- a/src/core/selinux-access.c
|
||||
+++ b/src/core/selinux-access.c
|
||||
@@ -302,12 +302,12 @@ int mac_selinux_unit_access_check_strv(
|
||||
int r;
|
||||
|
||||
STRV_FOREACH(i, units) {
|
||||
- u = manager_get_unit(m, *i);
|
||||
- if (u) {
|
||||
- r = mac_selinux_unit_access_check(u, message, permission, error);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
- }
|
||||
+ r = manager_load_unit(m, *i, NULL, error, &u);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+ r = mac_selinux_unit_access_check(u, message, permission, error);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
From 3838f0fac7c2ea7b778b70ce64d449f8b9d1667a Mon Sep 17 00:00:00 2001
|
||||
From: Michal Sekletar <msekleta@redhat.com>
|
||||
Date: Thu, 25 Jun 2015 16:44:22 +0200
|
||||
Subject: [PATCH 02/47] install: make unit_file_get_list aware of
|
||||
UNIT_FILE_INDIRECT
|
||||
|
||||
Commit aedd401 introduced new unit file state, UNIT_FILE_INDIRECT. Unit file is
|
||||
said to have indirect state if it contains [Install] section which has only
|
||||
Also= directive. Thus, if enable of such unit file is requested then some other
|
||||
unit file gets enabled.
|
||||
|
||||
Whether or not unit file is in indirect state can be determined by calling
|
||||
unit_file_can_install. Function unit_file_get_list populates list of unit files
|
||||
present in given lookup location. So far it did call unit_file_can_install in a
|
||||
way that would prevent finding out about unit files in indirect state. Such unit
|
||||
file would be incorrectly marked as static.
|
||||
|
||||
Fixes following assertion in test-install,
|
||||
|
||||
Assertion 'p->state == s' failed at src/test/test-install.c:59, function main(). Aborting.
|
||||
[1] 26868 abort (core dumped) ./test-install
|
||||
---
|
||||
src/shared/install.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/shared/install.c b/src/shared/install.c
|
||||
index c37cf19..3d2b5ae 100644
|
||||
--- a/src/shared/install.c
|
||||
+++ b/src/shared/install.c
|
||||
@@ -2190,6 +2190,7 @@ int unit_file_get_list(
|
||||
_cleanup_(unit_file_list_free_onep) UnitFileList *f = NULL;
|
||||
struct dirent *de;
|
||||
_cleanup_free_ char *path = NULL;
|
||||
+ bool also = false;
|
||||
|
||||
errno = 0;
|
||||
de = readdir(d);
|
||||
@@ -2243,7 +2244,7 @@ int unit_file_get_list(
|
||||
if (!path)
|
||||
return -ENOMEM;
|
||||
|
||||
- r = unit_file_can_install(&paths, root_dir, path, true, NULL);
|
||||
+ r = unit_file_can_install(&paths, root_dir, path, true, &also);
|
||||
if (r == -EINVAL || /* Invalid setting? */
|
||||
r == -EBADMSG || /* Invalid format? */
|
||||
r == -ENOENT /* Included file not found? */)
|
||||
@@ -2253,7 +2254,7 @@ int unit_file_get_list(
|
||||
else if (r > 0)
|
||||
f->state = UNIT_FILE_DISABLED;
|
||||
else
|
||||
- f->state = UNIT_FILE_STATIC;
|
||||
+ f->state = also ? UNIT_FILE_INDIRECT : UNIT_FILE_STATIC;
|
||||
|
||||
found:
|
||||
r = hashmap_put(h, basename(f->path), f);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From ab050366e780ba7e2ecda2c60689f21d0aee3b9e Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Tue, 7 Jul 2015 17:21:03 -0400
|
||||
Subject: [PATCH 03/47] journal-gatewayd: fix tmpfile logic
|
||||
|
||||
"rw" is not a valid mode string for f*open(). This got broken in
|
||||
cc02a7b33049 ("journal-gatewayd: factor out opening of temp
|
||||
file").
|
||||
---
|
||||
src/journal-remote/journal-gatewayd.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c
|
||||
index d9450ae..9a09f40 100644
|
||||
--- a/src/journal-remote/journal-gatewayd.c
|
||||
+++ b/src/journal-remote/journal-gatewayd.c
|
||||
@@ -132,7 +132,7 @@ static int request_meta_ensure_tmp(RequestMeta *m) {
|
||||
if (fd < 0)
|
||||
return fd;
|
||||
|
||||
- m->tmp = fdopen(fd, "rw");
|
||||
+ m->tmp = fdopen(fd, "w+");
|
||||
if (!m->tmp) {
|
||||
safe_close(fd);
|
||||
return -errno;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From e53d6affb53497c39fb41d139ab00e1a27c65e4c Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
Date: Wed, 8 Jul 2015 13:52:48 +0200
|
||||
Subject: [PATCH 04/47] resolved: fix marshalling of RRSIG records
|
||||
|
||||
The key tag is 16, not 8 bits.
|
||||
---
|
||||
src/resolve/resolved-dns-packet.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c
|
||||
index bb74b18..47cc975 100644
|
||||
--- a/src/resolve/resolved-dns-packet.c
|
||||
+++ b/src/resolve/resolved-dns-packet.c
|
||||
@@ -691,7 +691,7 @@ int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, size_t *star
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
- r = dns_packet_append_uint8(p, rr->rrsig.key_tag, NULL);
|
||||
+ r = dns_packet_append_uint16(p, rr->rrsig.key_tag, NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
From 53003ef7b748e005a01687337bb36763f60d4adc Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Blume <Thomas.Blume@suse.com>
|
||||
Date: Mon, 29 Jun 2015 11:26:27 +0200
|
||||
Subject: [PATCH 05/47] Reload manager defaults at daemon-reload
|
||||
|
||||
"systemctl daemon-reload" should also update the manager defaults from
|
||||
/etc/systemd/system.conf.
|
||||
For details, see:
|
||||
http://lists.freedesktop.org/archives/systemd-devel/2015-June/033062.html
|
||||
|
||||
Amended to use manager_set_defaults() as common function.
|
||||
---
|
||||
src/core/main.c | 42 ++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 28 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/src/core/main.c b/src/core/main.c
|
||||
index 523f0ce..186cfdd 100644
|
||||
--- a/src/core/main.c
|
||||
+++ b/src/core/main.c
|
||||
@@ -685,6 +685,26 @@ static int parse_config_file(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void manager_set_defaults(Manager *m) {
|
||||
+
|
||||
+ assert(m);
|
||||
+
|
||||
+ m->default_timer_accuracy_usec = arg_default_timer_accuracy_usec;
|
||||
+ m->default_std_output = arg_default_std_output;
|
||||
+ m->default_std_error = arg_default_std_error;
|
||||
+ m->default_timeout_start_usec = arg_default_timeout_start_usec;
|
||||
+ m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
|
||||
+ m->default_restart_usec = arg_default_restart_usec;
|
||||
+ m->default_start_limit_interval = arg_default_start_limit_interval;
|
||||
+ m->default_start_limit_burst = arg_default_start_limit_burst;
|
||||
+ m->default_cpu_accounting = arg_default_cpu_accounting;
|
||||
+ m->default_blockio_accounting = arg_default_blockio_accounting;
|
||||
+ m->default_memory_accounting = arg_default_memory_accounting;
|
||||
+
|
||||
+ manager_set_default_rlimits(m, arg_default_rlimit);
|
||||
+ manager_environment_add(m, NULL, arg_default_environment);
|
||||
+}
|
||||
+
|
||||
static int parse_argv(int argc, char *argv[]) {
|
||||
|
||||
enum {
|
||||
@@ -1630,28 +1650,15 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
|
||||
m->confirm_spawn = arg_confirm_spawn;
|
||||
- m->default_timer_accuracy_usec = arg_default_timer_accuracy_usec;
|
||||
- m->default_std_output = arg_default_std_output;
|
||||
- m->default_std_error = arg_default_std_error;
|
||||
- m->default_restart_usec = arg_default_restart_usec;
|
||||
- m->default_timeout_start_usec = arg_default_timeout_start_usec;
|
||||
- m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
|
||||
- m->default_start_limit_interval = arg_default_start_limit_interval;
|
||||
- m->default_start_limit_burst = arg_default_start_limit_burst;
|
||||
- m->default_cpu_accounting = arg_default_cpu_accounting;
|
||||
- m->default_blockio_accounting = arg_default_blockio_accounting;
|
||||
- m->default_memory_accounting = arg_default_memory_accounting;
|
||||
m->runtime_watchdog = arg_runtime_watchdog;
|
||||
m->shutdown_watchdog = arg_shutdown_watchdog;
|
||||
-
|
||||
m->userspace_timestamp = userspace_timestamp;
|
||||
m->kernel_timestamp = kernel_timestamp;
|
||||
m->initrd_timestamp = initrd_timestamp;
|
||||
m->security_start_timestamp = security_start_timestamp;
|
||||
m->security_finish_timestamp = security_finish_timestamp;
|
||||
|
||||
- manager_set_default_rlimits(m, arg_default_rlimit);
|
||||
- manager_environment_add(m, NULL, arg_default_environment);
|
||||
+ manager_set_defaults(m);
|
||||
manager_set_show_status(m, arg_show_status);
|
||||
manager_set_first_boot(m, empty_etc);
|
||||
|
||||
@@ -1763,6 +1770,13 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
case MANAGER_RELOAD:
|
||||
log_info("Reloading.");
|
||||
+
|
||||
+ r = parse_config_file();
|
||||
+ if (r < 0)
|
||||
+ log_error("Failed to parse config file.");
|
||||
+
|
||||
+ manager_set_defaults(m);
|
||||
+
|
||||
r = manager_reload(m);
|
||||
if (r < 0)
|
||||
log_error_errno(r, "Failed to reload: %m");
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
From f0bb84f7db0af57520521846ff782871fbbd6020 Mon Sep 17 00:00:00 2001
|
||||
From: cee1 <fykcee1@gmail.com>
|
||||
Date: Thu, 9 Jul 2015 13:52:16 +0800
|
||||
Subject: [PATCH 06/47] basic/util.c fopen_temporary(): close fd if failed
|
||||
|
||||
---
|
||||
src/basic/util.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/basic/util.c b/src/basic/util.c
|
||||
index aa912bd..100facb 100644
|
||||
--- a/src/basic/util.c
|
||||
+++ b/src/basic/util.c
|
||||
@@ -2535,6 +2535,7 @@ int fopen_temporary(const char *path, FILE **_f, char **_temp_path) {
|
||||
if (!f) {
|
||||
unlink(t);
|
||||
free(t);
|
||||
+ safe_close(fd);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From 4ce4ea9a73c6118618c4dc7100523dab3bdc55d4 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 9 Jul 2015 18:43:55 -0300
|
||||
Subject: [PATCH 07/47] tmpfiles: don't recursively descend into journal
|
||||
directories in /var
|
||||
|
||||
Do so only in /run. We shouldn't alter ACLs for existing files in /var,
|
||||
but only for new files. If the admin made changes to the ACLs they
|
||||
shouls stay in place.
|
||||
|
||||
We should still do recursive ACL changes for files in /run, since those
|
||||
are not persistent, and will hence lack ACLs on every boot.
|
||||
|
||||
Also, /var/log/journal might be quit large, /run/log/journal is usually
|
||||
not, hence we should avoid the recursive descending on /var, but not on
|
||||
/run.
|
||||
|
||||
Fixes #534
|
||||
---
|
||||
tmpfiles.d/systemd.conf.m4 | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tmpfiles.d/systemd.conf.m4 b/tmpfiles.d/systemd.conf.m4
|
||||
index b447b01..d9d51af 100644
|
||||
--- a/tmpfiles.d/systemd.conf.m4
|
||||
+++ b/tmpfiles.d/systemd.conf.m4
|
||||
@@ -35,7 +35,7 @@ z /var/log/journal 2755 root systemd-journal - -
|
||||
z /var/log/journal/%m 2755 root systemd-journal - -
|
||||
m4_ifdef(`HAVE_ACL',``
|
||||
a+ /var/log/journal/%m - - - - d:group:adm:r-x,d:group:wheel:r-x
|
||||
-A+ /var/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
|
||||
+a+ /var/log/journal/%m - - - - group:adm:r-x,group:wheel:r-x
|
||||
'')m4_dnl
|
||||
|
||||
d /var/lib/systemd 0755 root root -
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From efe9f80f5e99abdddad320e8771da236eada169f Mon Sep 17 00:00:00 2001
|
||||
From: Martin Pitt <martin.pitt@ubuntu.com>
|
||||
Date: Thu, 9 Jul 2015 16:25:00 +0200
|
||||
Subject: [PATCH 08/47] units: emergency.service: wait for plymouth to shut
|
||||
down
|
||||
|
||||
Merely calling "plymouth quit" isn't sufficient, as plymouth needs some time to
|
||||
shut down. This needs plymouth --wait (which is a no-op when it's not running).
|
||||
|
||||
Fixes invisible emergency shell with plymouth running endlessly.
|
||||
|
||||
https://launchpad.net/bugs/1471258
|
||||
---
|
||||
units/emergency.service.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/units/emergency.service.in b/units/emergency.service.in
|
||||
index 52b9b1c..8dc3cbd 100644
|
||||
--- a/units/emergency.service.in
|
||||
+++ b/units/emergency.service.in
|
||||
@@ -16,7 +16,7 @@ Before=shutdown.target
|
||||
[Service]
|
||||
Environment=HOME=/root
|
||||
WorkingDirectory=/root
|
||||
-ExecStartPre=-/bin/plymouth quit
|
||||
+ExecStartPre=-/bin/plymouth --wait quit
|
||||
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" or ^D to\\ntry again to boot into default mode.'
|
||||
ExecStart=-/bin/sh -c "@SULOGIN@; @SYSTEMCTL@ --job-mode=fail --no-block default"
|
||||
Type=idle
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From d0bf853933a390b2152444a4d449442e696e5990 Mon Sep 17 00:00:00 2001
|
||||
From: Vito Caputo <vito.caputo@coreos.com>
|
||||
Date: Fri, 10 Jul 2015 16:40:46 -0700
|
||||
Subject: [PATCH 09/47] core: include unit in path state transition debug
|
||||
logging.
|
||||
|
||||
---
|
||||
src/core/path.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/path.c b/src/core/path.c
|
||||
index 6d26d89..20995d9 100644
|
||||
--- a/src/core/path.c
|
||||
+++ b/src/core/path.c
|
||||
@@ -426,7 +426,7 @@ static void path_set_state(Path *p, PathState state) {
|
||||
path_unwatch(p);
|
||||
|
||||
if (state != old_state)
|
||||
- log_debug("Changed %s -> %s", path_state_to_string(old_state), path_state_to_string(state));
|
||||
+ log_unit_debug(UNIT(p), "Changed %s -> %s", path_state_to_string(old_state), path_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state], true);
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 6e01dc69d385df006933c4023fae61536cd7793d Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Sat, 11 Jul 2015 14:19:36 -0300
|
||||
Subject: [PATCH 10/47] util: make sure we don't clobber errno in error path
|
||||
|
||||
---
|
||||
src/basic/util.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/basic/util.c b/src/basic/util.c
|
||||
index 100facb..dffb4a2 100644
|
||||
--- a/src/basic/util.c
|
||||
+++ b/src/basic/util.c
|
||||
@@ -2533,7 +2533,7 @@ int fopen_temporary(const char *path, FILE **_f, char **_temp_path) {
|
||||
|
||||
f = fdopen(fd, "we");
|
||||
if (!f) {
|
||||
- unlink(t);
|
||||
+ unlink_noerrno(t);
|
||||
free(t);
|
||||
safe_close(fd);
|
||||
return -errno;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From 633a012f7db23425b55f2d4154a0a710b6079f9a Mon Sep 17 00:00:00 2001
|
||||
From: David Herrmann <dh.herrmann@gmail.com>
|
||||
Date: Wed, 15 Jul 2015 11:58:03 +0200
|
||||
Subject: [PATCH 11/47] sd-boot: ignore missing /etc/machine-id
|
||||
|
||||
If /etc/machine-id is missing (eg., gold images), we should not fail
|
||||
installing sd-boot. This is a perfectly fine use-case and we should simply
|
||||
skip installing the default loader config in that case.
|
||||
---
|
||||
src/boot/bootctl.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
|
||||
index ed69fb0..faab82d 100644
|
||||
--- a/src/boot/bootctl.c
|
||||
+++ b/src/boot/bootctl.c
|
||||
@@ -888,7 +888,7 @@ static int install_loader_config(const char *esp_path) {
|
||||
|
||||
f = fopen("/etc/machine-id", "re");
|
||||
if (!f)
|
||||
- return -errno;
|
||||
+ return errno == ENOENT ? 0 : -errno;
|
||||
|
||||
if (fgets(line, sizeof(line), f) != NULL) {
|
||||
char *s;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
From 6944177d055172a4590555375fa5015c92d6fa2a Mon Sep 17 00:00:00 2001
|
||||
From: Christian Hesse <mail@eworm.de>
|
||||
Date: Thu, 23 Jul 2015 21:18:36 +0200
|
||||
Subject: [PATCH 12/47] virt: handle Virtualbox 5.0 with kvm hypervisor
|
||||
|
||||
Virtualbox 5.0 now supports kvm hypervisor. In this case cpuid
|
||||
identidies as "kvm", which breaks units depending on
|
||||
ConditionVirtualization=oracle.
|
||||
So return "oracle" even with kvm hypervisor.
|
||||
---
|
||||
src/basic/virt.c | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/basic/virt.c b/src/basic/virt.c
|
||||
index 1299a75..a8d2671 100644
|
||||
--- a/src/basic/virt.c
|
||||
+++ b/src/basic/virt.c
|
||||
@@ -188,7 +188,7 @@ int detect_vm(const char **id) {
|
||||
_cleanup_free_ char *domcap = NULL, *cpuinfo_contents = NULL;
|
||||
static thread_local int cached_found = -1;
|
||||
static thread_local const char *cached_id = NULL;
|
||||
- const char *_id = NULL;
|
||||
+ const char *_id = NULL, *_id_cpuid = NULL;
|
||||
int r;
|
||||
|
||||
if (_likely_(cached_found >= 0)) {
|
||||
@@ -234,10 +234,26 @@ int detect_vm(const char **id) {
|
||||
|
||||
/* this will set _id to "other" and return 0 for unknown hypervisors */
|
||||
r = detect_vm_cpuid(&_id);
|
||||
- if (r != 0)
|
||||
+
|
||||
+ /* finish when found a known hypervisor other than kvm */
|
||||
+ if (r < 0 || (r > 0 && !streq(_id, "kvm")))
|
||||
goto finish;
|
||||
|
||||
+ _id_cpuid = _id;
|
||||
+
|
||||
r = detect_vm_dmi(&_id);
|
||||
+
|
||||
+ /* kvm with and without Virtualbox */
|
||||
+ if (streq_ptr(_id_cpuid, "kvm")) {
|
||||
+ if (r > 0 && streq(_id, "oracle"))
|
||||
+ goto finish;
|
||||
+
|
||||
+ _id = _id_cpuid;
|
||||
+ r = 1;
|
||||
+ goto finish;
|
||||
+ }
|
||||
+
|
||||
+ /* information from dmi */
|
||||
if (r != 0)
|
||||
goto finish;
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From 559f85ce2cb5bc2f92c9c231ab1703dde817313d Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 23 Jul 2015 21:41:22 +0200
|
||||
Subject: [PATCH 13/47] copy: when we recursively copy a directory tree, copy
|
||||
everything
|
||||
|
||||
Don't ignore hidden files and directories.
|
||||
|
||||
Fixes #386
|
||||
---
|
||||
src/basic/copy.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/basic/copy.c b/src/basic/copy.c
|
||||
index 230e7e4..e2d356d 100644
|
||||
--- a/src/basic/copy.c
|
||||
+++ b/src/basic/copy.c
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "util.h"
|
||||
#include "btrfs-util.h"
|
||||
+#include "strv.h"
|
||||
#include "copy.h"
|
||||
|
||||
#define COPY_BUFFER_SIZE (16*1024)
|
||||
@@ -262,10 +263,13 @@ static int fd_copy_directory(
|
||||
(void) copy_xattr(dirfd(d), fdt);
|
||||
}
|
||||
|
||||
- FOREACH_DIRENT(de, d, return -errno) {
|
||||
+ FOREACH_DIRENT_ALL(de, d, return -errno) {
|
||||
struct stat buf;
|
||||
int q;
|
||||
|
||||
+ if (STR_IN_SET(de->d_name, ".", ".."))
|
||||
+ continue;
|
||||
+
|
||||
if (fstatat(dirfd(d), de->d_name, &buf, AT_SYMLINK_NOFOLLOW) < 0) {
|
||||
r = -errno;
|
||||
continue;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From fd17710ad438a0d6228e807936119ed451eb843a Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 23 Jul 2015 23:36:34 +0200
|
||||
Subject: [PATCH 14/47] fileio: get_status_field() don't clobber arg on OOM
|
||||
|
||||
According to our coding style guidelines we shouldn't clobber
|
||||
pass-by-ref arguments on failure, hence don't do so here either.
|
||||
---
|
||||
src/basic/fileio.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
|
||||
index 00fb6f8..eb6f3ce 100644
|
||||
--- a/src/basic/fileio.c
|
||||
+++ b/src/basic/fileio.c
|
||||
@@ -786,7 +786,7 @@ int executable_is_script(const char *path, char **interpreter) {
|
||||
*/
|
||||
int get_status_field(const char *filename, const char *pattern, char **field) {
|
||||
_cleanup_free_ char *status = NULL;
|
||||
- char *t;
|
||||
+ char *t, *f;
|
||||
size_t len;
|
||||
int r;
|
||||
|
||||
@@ -820,9 +820,10 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
|
||||
|
||||
len = strcspn(t, WHITESPACE);
|
||||
|
||||
- *field = strndup(t, len);
|
||||
- if (!*field)
|
||||
+ f = strndup(t, len);
|
||||
+ if (!f)
|
||||
return -ENOMEM;
|
||||
|
||||
+ *field = f;
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
From 357546b20df2ec0414d2ed048555ba4269859cc0 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 24 Jul 2015 01:40:44 +0200
|
||||
Subject: [PATCH 15/47] journal-verify: don't hit SIGFPE when determining
|
||||
progress
|
||||
|
||||
If we determine the progress based on a number of objects available,
|
||||
don't blindly devide by the number of objects, given that it might be 0.
|
||||
---
|
||||
src/journal/journal-verify.c | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
|
||||
index ce734d8..cf5be1f 100644
|
||||
--- a/src/journal/journal-verify.c
|
||||
+++ b/src/journal/journal-verify.c
|
||||
@@ -69,6 +69,16 @@ static void draw_progress(uint64_t p, usec_t *last_usec) {
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
+static uint64_t scale_progress(uint64_t scale, uint64_t p, uint64_t m) {
|
||||
+
|
||||
+ /* Calculates scale * p / m, but handles m == 0 safely, and saturates */
|
||||
+
|
||||
+ if (p >= m || m == 0)
|
||||
+ return scale;
|
||||
+
|
||||
+ return scale * p / m;
|
||||
+}
|
||||
+
|
||||
static void flush_progress(void) {
|
||||
unsigned n, i;
|
||||
|
||||
@@ -584,7 +594,7 @@ static int verify_hash_table(
|
||||
uint64_t last = 0, p;
|
||||
|
||||
if (show_progress)
|
||||
- draw_progress(0xC000 + (0x3FFF * i / n), last_usec);
|
||||
+ draw_progress(0xC000 + scale_progress(0x3FFF, i, n), last_usec);
|
||||
|
||||
p = le64toh(f->data_hash_table[i].head_hash_offset);
|
||||
while (p != 0) {
|
||||
@@ -726,7 +736,7 @@ static int verify_entry_array(
|
||||
Object *o;
|
||||
|
||||
if (show_progress)
|
||||
- draw_progress(0x8000 + (0x3FFF * i / n), last_usec);
|
||||
+ draw_progress(0x8000 + scale_progress(0x3FFF, i, n), last_usec);
|
||||
|
||||
if (a == 0) {
|
||||
error(a, "array chain too short at %"PRIu64" of %"PRIu64, i, n);
|
||||
@@ -863,7 +873,7 @@ int journal_file_verify(
|
||||
p = le64toh(f->header->header_size);
|
||||
while (p != 0) {
|
||||
if (show_progress)
|
||||
- draw_progress(0x7FFF * p / le64toh(f->header->tail_object_offset), &last_usec);
|
||||
+ draw_progress(scale_progress(0x7FFF, p, le64toh(f->header->tail_object_offset)), &last_usec);
|
||||
|
||||
r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o);
|
||||
if (r < 0) {
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,162 @@
|
|||
From ba94d686b53cdd4e47627006fc0cb640462571ad Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 24 Jul 2015 01:55:45 +0200
|
||||
Subject: [PATCH 16/47] journal: avoid mapping empty data and field hash tables
|
||||
|
||||
When a new journal file is created we write the header first, then sync
|
||||
and only then create the data and field hash tables in them. That means
|
||||
to other processes it might appear that the files have a valid header
|
||||
but not data and field hash tables. Our reader code should be able to
|
||||
deal with this.
|
||||
|
||||
With this change we'll not map the two hash tables right-away after
|
||||
opening a file for reading anymore (because that will of course fail if
|
||||
the objects are missing), but delay this until the first time we access
|
||||
them. On top of that, when we want to look something up in the hash
|
||||
tables and we notice they aren't initialized yet, we consider them
|
||||
empty.
|
||||
|
||||
This improves handling of some journal files reported in #487.
|
||||
---
|
||||
src/journal/journal-file.c | 37 ++++++++++++++++++++++++++-----------
|
||||
src/journal/journal-file.h | 3 +++
|
||||
src/journal/journal-verify.c | 14 ++++++++++++++
|
||||
3 files changed, 43 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||
index be6a552..f7815b2 100644
|
||||
--- a/src/journal/journal-file.c
|
||||
+++ b/src/journal/journal-file.c
|
||||
@@ -656,13 +656,16 @@ static int journal_file_setup_field_hash_table(JournalFile *f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int journal_file_map_data_hash_table(JournalFile *f) {
|
||||
+int journal_file_map_data_hash_table(JournalFile *f) {
|
||||
uint64_t s, p;
|
||||
void *t;
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
|
||||
+ if (f->data_hash_table)
|
||||
+ return 0;
|
||||
+
|
||||
p = le64toh(f->header->data_hash_table_offset);
|
||||
s = le64toh(f->header->data_hash_table_size);
|
||||
|
||||
@@ -678,13 +681,16 @@ static int journal_file_map_data_hash_table(JournalFile *f) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int journal_file_map_field_hash_table(JournalFile *f) {
|
||||
+int journal_file_map_field_hash_table(JournalFile *f) {
|
||||
uint64_t s, p;
|
||||
void *t;
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
|
||||
+ if (f->field_hash_table)
|
||||
+ return 0;
|
||||
+
|
||||
p = le64toh(f->header->field_hash_table_offset);
|
||||
s = le64toh(f->header->field_hash_table_size);
|
||||
|
||||
@@ -803,10 +809,18 @@ int journal_file_find_field_object_with_hash(
|
||||
assert(f);
|
||||
assert(field && size > 0);
|
||||
|
||||
+ /* If the field hash table is empty, we can't find anything */
|
||||
+ if (le64toh(f->header->field_hash_table_size) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Map the field hash table, if it isn't mapped yet. */
|
||||
+ r = journal_file_map_field_hash_table(f);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
osize = offsetof(Object, field.payload) + size;
|
||||
|
||||
m = le64toh(f->header->field_hash_table_size) / sizeof(HashItem);
|
||||
-
|
||||
if (m <= 0)
|
||||
return -EBADMSG;
|
||||
|
||||
@@ -866,6 +880,15 @@ int journal_file_find_data_object_with_hash(
|
||||
assert(f);
|
||||
assert(data || size == 0);
|
||||
|
||||
+ /* If there's no data hash table, then there's no entry. */
|
||||
+ if (le64toh(f->header->data_hash_table_size) <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Map the data hash table, if it isn't mapped yet. */
|
||||
+ r = journal_file_map_data_hash_table(f);
|
||||
+ if (r < 0)
|
||||
+ return r;
|
||||
+
|
||||
osize = offsetof(Object, data.payload) + size;
|
||||
|
||||
m = le64toh(f->header->data_hash_table_size) / sizeof(HashItem);
|
||||
@@ -2731,14 +2754,6 @@ int journal_file_open(
|
||||
#endif
|
||||
}
|
||||
|
||||
- r = journal_file_map_field_hash_table(f);
|
||||
- if (r < 0)
|
||||
- goto fail;
|
||||
-
|
||||
- r = journal_file_map_data_hash_table(f);
|
||||
- if (r < 0)
|
||||
- goto fail;
|
||||
-
|
||||
if (mmap_cache_got_sigbus(f->mmap, f->fd)) {
|
||||
r = -EIO;
|
||||
goto fail;
|
||||
diff --git a/src/journal/journal-file.h b/src/journal/journal-file.h
|
||||
index 403c8f7..e92b75e 100644
|
||||
--- a/src/journal/journal-file.h
|
||||
+++ b/src/journal/journal-file.h
|
||||
@@ -229,3 +229,6 @@ int journal_file_get_cutoff_realtime_usec(JournalFile *f, usec_t *from, usec_t *
|
||||
int journal_file_get_cutoff_monotonic_usec(JournalFile *f, sd_id128_t boot, usec_t *from, usec_t *to);
|
||||
|
||||
bool journal_file_rotate_suggested(JournalFile *f, usec_t max_file_usec);
|
||||
+
|
||||
+int journal_file_map_data_hash_table(JournalFile *f);
|
||||
+int journal_file_map_field_hash_table(JournalFile *f);
|
||||
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
|
||||
index cf5be1f..7d68149 100644
|
||||
--- a/src/journal/journal-verify.c
|
||||
+++ b/src/journal/journal-verify.c
|
||||
@@ -590,6 +590,13 @@ static int verify_hash_table(
|
||||
assert(last_usec);
|
||||
|
||||
n = le64toh(f->header->data_hash_table_size) / sizeof(HashItem);
|
||||
+ if (n <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ r = journal_file_map_data_hash_table(f);
|
||||
+ if (r < 0)
|
||||
+ return log_error_errno(r, "Failed to map data hash table: %m");
|
||||
+
|
||||
for (i = 0; i < n; i++) {
|
||||
uint64_t last = 0, p;
|
||||
|
||||
@@ -647,6 +654,13 @@ static int data_object_in_hash_table(JournalFile *f, uint64_t hash, uint64_t p)
|
||||
assert(f);
|
||||
|
||||
n = le64toh(f->header->data_hash_table_size) / sizeof(HashItem);
|
||||
+ if (n <= 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ r = journal_file_map_data_hash_table(f);
|
||||
+ if (r < 0)
|
||||
+ return log_error_errno(r, "Failed to map data hash table: %m");
|
||||
+
|
||||
h = hash % n;
|
||||
|
||||
q = le64toh(f->data_hash_table[h].head_hash_offset);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
From 7a7ce2cf1989d2f3ac28f2cf911862daacce18a1 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 24 Jul 2015 02:00:43 +0200
|
||||
Subject: [PATCH 17/47] journal: when verifying journal files, handle empty
|
||||
ones nicely
|
||||
|
||||
A journal file that carries no objects should be considered valid.
|
||||
---
|
||||
src/journal/journal-verify.c | 37 ++++++++++++++-----------------------
|
||||
1 file changed, 14 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
|
||||
index 7d68149..637162e 100644
|
||||
--- a/src/journal/journal-verify.c
|
||||
+++ b/src/journal/journal-verify.c
|
||||
@@ -885,7 +885,11 @@ int journal_file_verify(
|
||||
* superficial structure, headers, hashes. */
|
||||
|
||||
p = le64toh(f->header->header_size);
|
||||
- while (p != 0) {
|
||||
+ for (;;) {
|
||||
+ /* Early exit if there are no objects in the file, at all */
|
||||
+ if (le64toh(f->header->tail_object_offset) == 0)
|
||||
+ break;
|
||||
+
|
||||
if (show_progress)
|
||||
draw_progress(scale_progress(0x7FFF, p, le64toh(f->header->tail_object_offset)), &last_usec);
|
||||
|
||||
@@ -901,9 +905,6 @@ int journal_file_verify(
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- if (p == le64toh(f->header->tail_object_offset))
|
||||
- found_last = true;
|
||||
-
|
||||
n_objects ++;
|
||||
|
||||
r = journal_file_object_verify(f, p, o);
|
||||
@@ -1148,13 +1149,15 @@ int journal_file_verify(
|
||||
n_weird ++;
|
||||
}
|
||||
|
||||
- if (p == le64toh(f->header->tail_object_offset))
|
||||
- p = 0;
|
||||
- else
|
||||
- p = p + ALIGN64(le64toh(o->object.size));
|
||||
- }
|
||||
+ if (p == le64toh(f->header->tail_object_offset)) {
|
||||
+ found_last = true;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- if (!found_last) {
|
||||
+ p = p + ALIGN64(le64toh(o->object.size));
|
||||
+ };
|
||||
+
|
||||
+ if (!found_last && le64toh(f->header->tail_object_offset) != 0) {
|
||||
error(le64toh(f->header->tail_object_offset), "tail object pointer dead");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
@@ -1200,19 +1203,7 @@ int journal_file_verify(
|
||||
goto fail;
|
||||
}
|
||||
|
||||
- if (n_data_hash_tables != 1) {
|
||||
- error(0, "missing data hash table");
|
||||
- r = -EBADMSG;
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
- if (n_field_hash_tables != 1) {
|
||||
- error(0, "missing field hash table");
|
||||
- r = -EBADMSG;
|
||||
- goto fail;
|
||||
- }
|
||||
-
|
||||
- if (!found_main_entry_array) {
|
||||
+ if (!found_main_entry_array && le64toh(f->header->entry_array_offset) != 0) {
|
||||
error(0, "missing entry array");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From e9fc552926b1c663653b81a7d09645e27f425db8 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 24 Jul 2015 02:02:07 +0200
|
||||
Subject: [PATCH 18/47] journal: explain the error when we find a non-DATA
|
||||
object that is compressed
|
||||
|
||||
Only objects of type DATA may be compressed, generate a message about
|
||||
that, like we do for all other errros.
|
||||
---
|
||||
src/journal/journal-verify.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
|
||||
index 637162e..0a8f30c 100644
|
||||
--- a/src/journal/journal-verify.c
|
||||
+++ b/src/journal/journal-verify.c
|
||||
@@ -123,8 +123,10 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
* other objects. */
|
||||
|
||||
if ((o->object.flags & OBJECT_COMPRESSED_XZ) &&
|
||||
- o->object.type != OBJECT_DATA)
|
||||
+ o->object.type != OBJECT_DATA) {
|
||||
+ error(offset, "Found compressed object that isn't of type DATA, which is not allowed.");
|
||||
return -EBADMSG;
|
||||
+ }
|
||||
|
||||
switch (o->object.type) {
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,643 @@
|
|||
From 203084042c51f91f170625911b83c9908ff7eeaf Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 24 Jul 2015 02:18:13 +0200
|
||||
Subject: [PATCH 19/47] journal: uppercase first character in verify error
|
||||
messages
|
||||
|
||||
In the english language the first character of a sentence is supposed to
|
||||
be uppercase. Let's make sure this also applies to the journal
|
||||
verification error messages.
|
||||
---
|
||||
src/journal/journal-verify.c | 162 ++++++++++++++++++++-----------------------
|
||||
1 file changed, 75 insertions(+), 87 deletions(-)
|
||||
|
||||
diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c
|
||||
index 0a8f30c..eaf006d 100644
|
||||
--- a/src/journal/journal-verify.c
|
||||
+++ b/src/journal/journal-verify.c
|
||||
@@ -135,15 +135,15 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
int compression, r;
|
||||
|
||||
if (le64toh(o->data.entry_offset) == 0)
|
||||
- warning(offset, "unused data (entry_offset==0)");
|
||||
+ warning(offset, "Unused data (entry_offset==0)");
|
||||
|
||||
if ((le64toh(o->data.entry_offset) == 0) ^ (le64toh(o->data.n_entries) == 0)) {
|
||||
- error(offset, "bad n_entries: %"PRIu64, o->data.n_entries);
|
||||
+ error(offset, "Bad n_entries: %"PRIu64, o->data.n_entries);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (le64toh(o->object.size) - offsetof(DataObject, payload) <= 0) {
|
||||
- error(offset, "bad object size (<= %zu): %"PRIu64,
|
||||
+ error(offset, "Bad object size (<= %zu): %"PRIu64,
|
||||
offsetof(DataObject, payload),
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
@@ -171,7 +171,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
h2 = hash64(o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
|
||||
|
||||
if (h1 != h2) {
|
||||
- error(offset, "invalid hash (%08"PRIx64" vs. %08"PRIx64, h1, h2);
|
||||
+ error(offset, "Invalid hash (%08"PRIx64" vs. %08"PRIx64, h1, h2);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
!VALID64(o->data.next_field_offset) ||
|
||||
!VALID64(o->data.entry_offset) ||
|
||||
!VALID64(o->data.entry_array_offset)) {
|
||||
- error(offset, "invalid offset (next_hash_offset="OFSfmt", next_field_offset="OFSfmt", entry_offset="OFSfmt", entry_array_offset="OFSfmt,
|
||||
+ error(offset, "Invalid offset (next_hash_offset="OFSfmt", next_field_offset="OFSfmt", entry_offset="OFSfmt", entry_array_offset="OFSfmt,
|
||||
o->data.next_hash_offset,
|
||||
o->data.next_field_offset,
|
||||
o->data.entry_offset,
|
||||
@@ -193,7 +193,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
case OBJECT_FIELD:
|
||||
if (le64toh(o->object.size) - offsetof(FieldObject, payload) <= 0) {
|
||||
error(offset,
|
||||
- "bad field size (<= %zu): %"PRIu64,
|
||||
+ "Bad field size (<= %zu): %"PRIu64,
|
||||
offsetof(FieldObject, payload),
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
@@ -202,7 +202,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if (!VALID64(o->field.next_hash_offset) ||
|
||||
!VALID64(o->field.head_data_offset)) {
|
||||
error(offset,
|
||||
- "invalid offset (next_hash_offset="OFSfmt", head_data_offset="OFSfmt,
|
||||
+ "Invalid offset (next_hash_offset="OFSfmt", head_data_offset="OFSfmt,
|
||||
o->field.next_hash_offset,
|
||||
o->field.head_data_offset);
|
||||
return -EBADMSG;
|
||||
@@ -212,7 +212,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
case OBJECT_ENTRY:
|
||||
if ((le64toh(o->object.size) - offsetof(EntryObject, items)) % sizeof(EntryItem) != 0) {
|
||||
error(offset,
|
||||
- "bad entry size (<= %zu): %"PRIu64,
|
||||
+ "Bad entry size (<= %zu): %"PRIu64,
|
||||
offsetof(EntryObject, items),
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
@@ -220,28 +220,28 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
|
||||
if ((le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem) <= 0) {
|
||||
error(offset,
|
||||
- "invalid number items in entry: %"PRIu64,
|
||||
+ "Invalid number items in entry: %"PRIu64,
|
||||
(le64toh(o->object.size) - offsetof(EntryObject, items)) / sizeof(EntryItem));
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (le64toh(o->entry.seqnum) <= 0) {
|
||||
error(offset,
|
||||
- "invalid entry seqnum: %"PRIx64,
|
||||
+ "Invalid entry seqnum: %"PRIx64,
|
||||
le64toh(o->entry.seqnum));
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!VALID_REALTIME(le64toh(o->entry.realtime))) {
|
||||
error(offset,
|
||||
- "invalid entry realtime timestamp: %"PRIu64,
|
||||
+ "Invalid entry realtime timestamp: %"PRIu64,
|
||||
le64toh(o->entry.realtime));
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!VALID_MONOTONIC(le64toh(o->entry.monotonic))) {
|
||||
error(offset,
|
||||
- "invalid entry monotonic timestamp: %"PRIu64,
|
||||
+ "Invalid entry monotonic timestamp: %"PRIu64,
|
||||
le64toh(o->entry.monotonic));
|
||||
return -EBADMSG;
|
||||
}
|
||||
@@ -250,7 +250,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if (o->entry.items[i].object_offset == 0 ||
|
||||
!VALID64(o->entry.items[i].object_offset)) {
|
||||
error(offset,
|
||||
- "invalid entry item (%"PRIu64"/%"PRIu64" offset: "OFSfmt,
|
||||
+ "Invalid entry item (%"PRIu64"/%"PRIu64" offset: "OFSfmt,
|
||||
i, journal_file_entry_n_items(o),
|
||||
o->entry.items[i].object_offset);
|
||||
return -EBADMSG;
|
||||
@@ -264,7 +264,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if ((le64toh(o->object.size) - offsetof(HashTableObject, items)) % sizeof(HashItem) != 0 ||
|
||||
(le64toh(o->object.size) - offsetof(HashTableObject, items)) / sizeof(HashItem) <= 0) {
|
||||
error(offset,
|
||||
- "invalid %s hash table size: %"PRIu64,
|
||||
+ "Invalid %s hash table size: %"PRIu64,
|
||||
o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
@@ -274,7 +274,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if (o->hash_table.items[i].head_hash_offset != 0 &&
|
||||
!VALID64(le64toh(o->hash_table.items[i].head_hash_offset))) {
|
||||
error(offset,
|
||||
- "invalid %s hash table item (%"PRIu64"/%"PRIu64") head_hash_offset: "OFSfmt,
|
||||
+ "Invalid %s hash table item (%"PRIu64"/%"PRIu64") head_hash_offset: "OFSfmt,
|
||||
o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
|
||||
i, journal_file_hash_table_n_items(o),
|
||||
le64toh(o->hash_table.items[i].head_hash_offset));
|
||||
@@ -283,7 +283,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if (o->hash_table.items[i].tail_hash_offset != 0 &&
|
||||
!VALID64(le64toh(o->hash_table.items[i].tail_hash_offset))) {
|
||||
error(offset,
|
||||
- "invalid %s hash table item (%"PRIu64"/%"PRIu64") tail_hash_offset: "OFSfmt,
|
||||
+ "Invalid %s hash table item (%"PRIu64"/%"PRIu64") tail_hash_offset: "OFSfmt,
|
||||
o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
|
||||
i, journal_file_hash_table_n_items(o),
|
||||
le64toh(o->hash_table.items[i].tail_hash_offset));
|
||||
@@ -293,7 +293,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if ((o->hash_table.items[i].head_hash_offset != 0) !=
|
||||
(o->hash_table.items[i].tail_hash_offset != 0)) {
|
||||
error(offset,
|
||||
- "invalid %s hash table item (%"PRIu64"/%"PRIu64"): head_hash_offset="OFSfmt" tail_hash_offset="OFSfmt,
|
||||
+ "Invalid %s hash table item (%"PRIu64"/%"PRIu64"): head_hash_offset="OFSfmt" tail_hash_offset="OFSfmt,
|
||||
o->object.type == OBJECT_DATA_HASH_TABLE ? "data" : "field",
|
||||
i, journal_file_hash_table_n_items(o),
|
||||
le64toh(o->hash_table.items[i].head_hash_offset),
|
||||
@@ -308,14 +308,14 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if ((le64toh(o->object.size) - offsetof(EntryArrayObject, items)) % sizeof(le64_t) != 0 ||
|
||||
(le64toh(o->object.size) - offsetof(EntryArrayObject, items)) / sizeof(le64_t) <= 0) {
|
||||
error(offset,
|
||||
- "invalid object entry array size: %"PRIu64,
|
||||
+ "Invalid object entry array size: %"PRIu64,
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!VALID64(o->entry_array.next_entry_array_offset)) {
|
||||
error(offset,
|
||||
- "invalid object entry array next_entry_array_offset: "OFSfmt,
|
||||
+ "Invalid object entry array next_entry_array_offset: "OFSfmt,
|
||||
o->entry_array.next_entry_array_offset);
|
||||
return -EBADMSG;
|
||||
}
|
||||
@@ -324,7 +324,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
if (le64toh(o->entry_array.items[i]) != 0 &&
|
||||
!VALID64(le64toh(o->entry_array.items[i]))) {
|
||||
error(offset,
|
||||
- "invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
|
||||
+ "Invalid object entry array item (%"PRIu64"/%"PRIu64"): "OFSfmt,
|
||||
i, journal_file_entry_array_n_items(o),
|
||||
le64toh(o->entry_array.items[i]));
|
||||
return -EBADMSG;
|
||||
@@ -335,14 +335,14 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
|
||||
case OBJECT_TAG:
|
||||
if (le64toh(o->object.size) != sizeof(TagObject)) {
|
||||
error(offset,
|
||||
- "invalid object tag size: %"PRIu64,
|
||||
+ "Invalid object tag size: %"PRIu64,
|
||||
le64toh(o->object.size));
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!VALID_EPOCH(o->tag.epoch)) {
|
||||
error(offset,
|
||||
- "invalid object tag epoch: %"PRIu64,
|
||||
+ "Invalid object tag epoch: %"PRIu64,
|
||||
o->tag.epoch);
|
||||
return -EBADMSG;
|
||||
}
|
||||
@@ -415,8 +415,7 @@ static int entry_points_to_data(
|
||||
assert(entry_fd >= 0);
|
||||
|
||||
if (!contains_uint64(f->mmap, entry_fd, n_entries, entry_p)) {
|
||||
- error(data_p,
|
||||
- "data object references invalid entry at "OFSfmt, entry_p);
|
||||
+ error(data_p, "Data object references invalid entry at "OFSfmt, entry_p);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -432,8 +431,7 @@ static int entry_points_to_data(
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
- error(entry_p,
|
||||
- "data object at "OFSfmt" not referenced by linked entry", data_p);
|
||||
+ error(entry_p, "Data object at "OFSfmt" not referenced by linked entry", data_p);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -476,7 +474,7 @@ static int entry_points_to_data(
|
||||
x = z;
|
||||
}
|
||||
|
||||
- error(entry_p, "entry object doesn't exist in main entry array");
|
||||
+ error(entry_p, "Entry object doesn't exist in main entry array");
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -506,9 +504,7 @@ static int verify_data(
|
||||
|
||||
/* Entry array means at least two objects */
|
||||
if (a && n < 2) {
|
||||
- error(p,
|
||||
- "entry array present (entry_array_offset="OFSfmt", but n_entries=%"PRIu64")",
|
||||
- a, n);
|
||||
+ error(p, "Entry array present (entry_array_offset="OFSfmt", but n_entries=%"PRIu64")", a, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -528,12 +524,12 @@ static int verify_data(
|
||||
uint64_t next, m, j;
|
||||
|
||||
if (a == 0) {
|
||||
- error(p, "array chain too short");
|
||||
+ error(p, "Array chain too short");
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!contains_uint64(f->mmap, entry_array_fd, n_entry_arrays, a)) {
|
||||
- error(p, "invalid array offset "OFSfmt, a);
|
||||
+ error(p, "Invalid array offset "OFSfmt, a);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -543,8 +539,7 @@ static int verify_data(
|
||||
|
||||
next = le64toh(o->entry_array.next_entry_array_offset);
|
||||
if (next != 0 && next <= a) {
|
||||
- error(p, "array chain has cycle (jumps back from "OFSfmt" to "OFSfmt")",
|
||||
- a, next);
|
||||
+ error(p, "Array chain has cycle (jumps back from "OFSfmt" to "OFSfmt")", a, next);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -553,7 +548,7 @@ static int verify_data(
|
||||
|
||||
q = le64toh(o->entry_array.items[j]);
|
||||
if (q <= last) {
|
||||
- error(p, "data object's entry array not sorted");
|
||||
+ error(p, "Data object's entry array not sorted");
|
||||
return -EBADMSG;
|
||||
}
|
||||
last = q;
|
||||
@@ -611,8 +606,7 @@ static int verify_hash_table(
|
||||
uint64_t next;
|
||||
|
||||
if (!contains_uint64(f->mmap, data_fd, n_data, p)) {
|
||||
- error(p, "invalid data object at hash entry %"PRIu64" of %"PRIu64,
|
||||
- i, n);
|
||||
+ error(p, "Invalid data object at hash entry %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -622,14 +616,12 @@ static int verify_hash_table(
|
||||
|
||||
next = le64toh(o->data.next_hash_offset);
|
||||
if (next != 0 && next <= p) {
|
||||
- error(p, "hash chain has a cycle in hash entry %"PRIu64" of %"PRIu64,
|
||||
- i, n);
|
||||
+ error(p, "Hash chain has a cycle in hash entry %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (le64toh(o->data.hash) % n != i) {
|
||||
- error(p, "hash value mismatch in hash entry %"PRIu64" of %"PRIu64,
|
||||
- i, n);
|
||||
+ error(p, "Hash value mismatch in hash entry %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -642,7 +634,7 @@ static int verify_hash_table(
|
||||
}
|
||||
|
||||
if (last != le64toh(f->data_hash_table[i].tail_hash_offset)) {
|
||||
- error(p, "tail hash pointer mismatch in hash table");
|
||||
+ error(p, "Tail hash pointer mismatch in hash table");
|
||||
return -EBADMSG;
|
||||
}
|
||||
}
|
||||
@@ -703,16 +695,16 @@ static int verify_entry(
|
||||
h = le64toh(o->entry.items[i].hash);
|
||||
|
||||
if (!contains_uint64(f->mmap, data_fd, n_data, q)) {
|
||||
- error(p, "invalid data object of entry");
|
||||
- return -EBADMSG;
|
||||
- }
|
||||
+ error(p, "Invalid data object of entry");
|
||||
+ return -EBADMSG;
|
||||
+ }
|
||||
|
||||
r = journal_file_move_to_object(f, OBJECT_DATA, q, &u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (le64toh(u->data.hash) != h) {
|
||||
- error(p, "hash mismatch for data object of entry");
|
||||
+ error(p, "Hash mismatch for data object of entry");
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -720,7 +712,7 @@ static int verify_entry(
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0) {
|
||||
- error(p, "data object missing from hash table");
|
||||
+ error(p, "Data object missing from hash table");
|
||||
return -EBADMSG;
|
||||
}
|
||||
}
|
||||
@@ -755,12 +747,12 @@ static int verify_entry_array(
|
||||
draw_progress(0x8000 + scale_progress(0x3FFF, i, n), last_usec);
|
||||
|
||||
if (a == 0) {
|
||||
- error(a, "array chain too short at %"PRIu64" of %"PRIu64, i, n);
|
||||
+ error(a, "Array chain too short at %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
if (!contains_uint64(f->mmap, entry_array_fd, n_entry_arrays, a)) {
|
||||
- error(a, "invalid array %"PRIu64" of %"PRIu64, i, n);
|
||||
+ error(a, "Invalid array %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -770,9 +762,7 @@ static int verify_entry_array(
|
||||
|
||||
next = le64toh(o->entry_array.next_entry_array_offset);
|
||||
if (next != 0 && next <= a) {
|
||||
- error(a,
|
||||
- "array chain has cycle at %"PRIu64" of %"PRIu64" (jumps back from to "OFSfmt")",
|
||||
- i, n, next);
|
||||
+ error(a, "Array chain has cycle at %"PRIu64" of %"PRIu64" (jumps back from to "OFSfmt")", i, n, next);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -782,15 +772,13 @@ static int verify_entry_array(
|
||||
|
||||
p = le64toh(o->entry_array.items[j]);
|
||||
if (p <= last) {
|
||||
- error(a, "entry array not sorted at %"PRIu64" of %"PRIu64,
|
||||
- i, n);
|
||||
+ error(a, "Entry array not sorted at %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
last = p;
|
||||
|
||||
if (!contains_uint64(f->mmap, entry_fd, n_entries, p)) {
|
||||
- error(a, "invalid array entry at %"PRIu64" of %"PRIu64,
|
||||
- i, n);
|
||||
+ error(a, "Invalid array entry at %"PRIu64" of %"PRIu64, i, n);
|
||||
return -EBADMSG;
|
||||
}
|
||||
|
||||
@@ -878,7 +866,7 @@ int journal_file_verify(
|
||||
|
||||
for (i = 0; i < sizeof(f->header->reserved); i++)
|
||||
if (f->header->reserved[i] != 0) {
|
||||
- error(offsetof(Header, reserved[i]), "reserved field is non-zero");
|
||||
+ error(offsetof(Header, reserved[i]), "Reserved field is non-zero");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -897,12 +885,12 @@ int journal_file_verify(
|
||||
|
||||
r = journal_file_move_to_object(f, OBJECT_UNUSED, p, &o);
|
||||
if (r < 0) {
|
||||
- error(p, "invalid object");
|
||||
+ error(p, "Invalid object");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (p > le64toh(f->header->tail_object_offset)) {
|
||||
- error(offsetof(Header, tail_object_offset), "invalid tail object pointer");
|
||||
+ error(offsetof(Header, tail_object_offset), "Invalid tail object pointer");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -911,13 +899,13 @@ int journal_file_verify(
|
||||
|
||||
r = journal_file_object_verify(f, p, o);
|
||||
if (r < 0) {
|
||||
- error(p, "invalid object contents: %s", strerror(-r));
|
||||
+ error(p, "Envalid object contents: %s", strerror(-r));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ((o->object.flags & OBJECT_COMPRESSED_XZ) &&
|
||||
(o->object.flags & OBJECT_COMPRESSED_LZ4)) {
|
||||
- error(p, "objected with double compression");
|
||||
+ error(p, "Objected with double compression");
|
||||
r = -EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
@@ -950,7 +938,7 @@ int journal_file_verify(
|
||||
|
||||
case OBJECT_ENTRY:
|
||||
if (JOURNAL_HEADER_SEALED(f->header) && n_tags <= 0) {
|
||||
- error(p, "first entry before first tag");
|
||||
+ error(p, "First entry before first tag");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -960,21 +948,21 @@ int journal_file_verify(
|
||||
goto fail;
|
||||
|
||||
if (le64toh(o->entry.realtime) < last_tag_realtime) {
|
||||
- error(p, "older entry after newer tag");
|
||||
+ error(p, "Older entry after newer tag");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!entry_seqnum_set &&
|
||||
le64toh(o->entry.seqnum) != le64toh(f->header->head_entry_seqnum)) {
|
||||
- error(p, "head entry sequence number incorrect");
|
||||
+ error(p, "Head entry sequence number incorrect");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (entry_seqnum_set &&
|
||||
entry_seqnum >= le64toh(o->entry.seqnum)) {
|
||||
- error(p, "entry sequence number out of synchronization");
|
||||
+ error(p, "Entry sequence number out of synchronization");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -985,7 +973,7 @@ int journal_file_verify(
|
||||
if (entry_monotonic_set &&
|
||||
sd_id128_equal(entry_boot_id, o->entry.boot_id) &&
|
||||
entry_monotonic > le64toh(o->entry.monotonic)) {
|
||||
- error(p, "entry timestamp out of synchronization");
|
||||
+ error(p, "Entry timestamp out of synchronization");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -996,7 +984,7 @@ int journal_file_verify(
|
||||
|
||||
if (!entry_realtime_set &&
|
||||
le64toh(o->entry.realtime) != le64toh(f->header->head_entry_realtime)) {
|
||||
- error(p, "head entry realtime timestamp incorrect");
|
||||
+ error(p, "Head entry realtime timestamp incorrect");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1009,7 +997,7 @@ int journal_file_verify(
|
||||
|
||||
case OBJECT_DATA_HASH_TABLE:
|
||||
if (n_data_hash_tables > 1) {
|
||||
- error(p, "more than one data hash table");
|
||||
+ error(p, "More than one data hash table");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1026,14 +1014,14 @@ int journal_file_verify(
|
||||
|
||||
case OBJECT_FIELD_HASH_TABLE:
|
||||
if (n_field_hash_tables > 1) {
|
||||
- error(p, "more than one field hash table");
|
||||
+ error(p, "More than one field hash table");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (le64toh(f->header->field_hash_table_offset) != p + offsetof(HashTableObject, items) ||
|
||||
le64toh(f->header->field_hash_table_size) != le64toh(o->object.size) - offsetof(HashTableObject, items)) {
|
||||
- error(p, "header fields for field hash table invalid");
|
||||
+ error(p, "Header fields for field hash table invalid");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1048,7 +1036,7 @@ int journal_file_verify(
|
||||
|
||||
if (p == le64toh(f->header->entry_array_offset)) {
|
||||
if (found_main_entry_array) {
|
||||
- error(p, "more than one main entry array");
|
||||
+ error(p, "More than one main entry array");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1061,19 +1049,19 @@ int journal_file_verify(
|
||||
|
||||
case OBJECT_TAG:
|
||||
if (!JOURNAL_HEADER_SEALED(f->header)) {
|
||||
- error(p, "tag object in file without sealing");
|
||||
+ error(p, "Tag object in file without sealing");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (le64toh(o->tag.seqnum) != n_tags + 1) {
|
||||
- error(p, "tag sequence number out of synchronization");
|
||||
+ error(p, "Tag sequence number out of synchronization");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (le64toh(o->tag.epoch) < last_epoch) {
|
||||
- error(p, "epoch sequence out of synchronization");
|
||||
+ error(p, "Epoch sequence out of synchronization");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1082,7 +1070,7 @@ int journal_file_verify(
|
||||
if (f->seal) {
|
||||
uint64_t q, rt;
|
||||
|
||||
- debug(p, "checking tag %"PRIu64"...", le64toh(o->tag.seqnum));
|
||||
+ debug(p, "Checking tag %"PRIu64"...", le64toh(o->tag.seqnum));
|
||||
|
||||
rt = f->fss_start_usec + o->tag.epoch * f->fss_interval_usec;
|
||||
if (entry_realtime_set && entry_realtime >= rt + f->fss_interval_usec) {
|
||||
@@ -1129,7 +1117,7 @@ int journal_file_verify(
|
||||
goto fail;
|
||||
|
||||
if (memcmp(o->tag.tag, gcry_md_read(f->hmac, 0), TAG_LENGTH) != 0) {
|
||||
- error(p, "tag failed verification");
|
||||
+ error(p, "Tag failed verification");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1160,60 +1148,60 @@ int journal_file_verify(
|
||||
};
|
||||
|
||||
if (!found_last && le64toh(f->header->tail_object_offset) != 0) {
|
||||
- error(le64toh(f->header->tail_object_offset), "tail object pointer dead");
|
||||
+ error(le64toh(f->header->tail_object_offset), "Tail object pointer dead");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (n_objects != le64toh(f->header->n_objects)) {
|
||||
- error(offsetof(Header, n_objects), "object number mismatch");
|
||||
+ error(offsetof(Header, n_objects), "Object number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (n_entries != le64toh(f->header->n_entries)) {
|
||||
- error(offsetof(Header, n_entries), "entry number mismatch");
|
||||
+ error(offsetof(Header, n_entries), "Entry number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (JOURNAL_HEADER_CONTAINS(f->header, n_data) &&
|
||||
n_data != le64toh(f->header->n_data)) {
|
||||
- error(offsetof(Header, n_data), "data number mismatch");
|
||||
+ error(offsetof(Header, n_data), "Data number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (JOURNAL_HEADER_CONTAINS(f->header, n_fields) &&
|
||||
n_fields != le64toh(f->header->n_fields)) {
|
||||
- error(offsetof(Header, n_fields), "field number mismatch");
|
||||
+ error(offsetof(Header, n_fields), "Field number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (JOURNAL_HEADER_CONTAINS(f->header, n_tags) &&
|
||||
n_tags != le64toh(f->header->n_tags)) {
|
||||
- error(offsetof(Header, n_tags), "tag number mismatch");
|
||||
+ error(offsetof(Header, n_tags), "Tag number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays) &&
|
||||
n_entry_arrays != le64toh(f->header->n_entry_arrays)) {
|
||||
- error(offsetof(Header, n_entry_arrays), "entry array number mismatch");
|
||||
+ error(offsetof(Header, n_entry_arrays), "Entry array number mismatch");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (!found_main_entry_array && le64toh(f->header->entry_array_offset) != 0) {
|
||||
- error(0, "missing entry array");
|
||||
+ error(0, "Missing entry array");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (entry_seqnum_set &&
|
||||
entry_seqnum != le64toh(f->header->tail_entry_seqnum)) {
|
||||
- error(offsetof(Header, tail_entry_seqnum), "invalid tail seqnum");
|
||||
+ error(offsetof(Header, tail_entry_seqnum), "Invalid tail seqnum");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
@@ -1221,13 +1209,13 @@ int journal_file_verify(
|
||||
if (entry_monotonic_set &&
|
||||
(!sd_id128_equal(entry_boot_id, f->header->boot_id) ||
|
||||
entry_monotonic != le64toh(f->header->tail_entry_monotonic))) {
|
||||
- error(0, "invalid tail monotonic timestamp");
|
||||
+ error(0, "Invalid tail monotonic timestamp");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (entry_realtime_set && entry_realtime != le64toh(f->header->tail_entry_realtime)) {
|
||||
- error(0, "invalid tail realtime timestamp");
|
||||
+ error(0, "Invalid tail realtime timestamp");
|
||||
r = -EBADMSG;
|
||||
goto fail;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 0e19c2116c7bdd2f2dddc1dd2cdf9a4c350665c7 Mon Sep 17 00:00:00 2001
|
||||
From: Lidong Zhong <lzhong@suse.com>
|
||||
Date: Fri, 24 Jul 2015 16:37:17 +0800
|
||||
Subject: [PATCH 20/47] udev: fix parameter process
|
||||
|
||||
---
|
||||
src/udev/udevd.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
|
||||
index e27fb1f..0553f20 100644
|
||||
--- a/src/udev/udevd.c
|
||||
+++ b/src/udev/udevd.c
|
||||
@@ -1432,7 +1432,7 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
assert(argc >= 0);
|
||||
assert(argv);
|
||||
|
||||
- while ((c = getopt_long(argc, argv, "c:de:DtN:hV", options, NULL)) >= 0) {
|
||||
+ while ((c = getopt_long(argc, argv, "c:de:Dt:N:hV", options, NULL)) >= 0) {
|
||||
int r;
|
||||
|
||||
switch (c) {
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
From 3b2e469ea0e551f2cf7dd4f1bd597b7277ccbef0 Mon Sep 17 00:00:00 2001
|
||||
From: Karel Zak <kzak@redhat.com>
|
||||
Date: Tue, 28 Jul 2015 11:31:45 +0200
|
||||
Subject: [PATCH 21/47] mount: remove obsolete -n
|
||||
|
||||
It seems that systemd still uses legacy -n option. The option has been
|
||||
originally designed to avoid write to /etc/mtab during boot when root
|
||||
FS is not ready or read-only.
|
||||
|
||||
This is not necessary for long time, because /etc/mtab is not a real
|
||||
file (it's symlink) and write to the file is impossible. All utils
|
||||
should be able to detect the symlink and ignore mtab. This concept is
|
||||
supported for very long time before systemd.
|
||||
|
||||
The userspase mount options are currently maintained by libmount
|
||||
(mount(8) and mount.nfs) in /run/mount) which is tmpfs initialized
|
||||
during early boot.
|
||||
---
|
||||
src/core/mount.c | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/src/core/mount.c b/src/core/mount.c
|
||||
index 87c4088..6a40417 100644
|
||||
--- a/src/core/mount.c
|
||||
+++ b/src/core/mount.c
|
||||
@@ -834,8 +834,6 @@ static void mount_enter_unmounting(Mount *m) {
|
||||
m->control_command = m->exec_command + MOUNT_EXEC_UNMOUNT;
|
||||
|
||||
r = exec_command_set(m->control_command, UMOUNT_PATH, m->where, NULL);
|
||||
- if (r >= 0 && UNIT(m)->manager->running_as == MANAGER_SYSTEM)
|
||||
- r = exec_command_append(m->control_command, "-n", NULL);
|
||||
if (r < 0)
|
||||
goto fail;
|
||||
|
||||
@@ -886,8 +884,6 @@ static void mount_enter_mounting(Mount *m) {
|
||||
|
||||
r = exec_command_set(m->control_command, MOUNT_PATH,
|
||||
m->parameters_fragment.what, m->where, NULL);
|
||||
- if (r >= 0 && UNIT(m)->manager->running_as == MANAGER_SYSTEM)
|
||||
- r = exec_command_append(m->control_command, "-n", NULL);
|
||||
if (r >= 0 && m->sloppy_options)
|
||||
r = exec_command_append(m->control_command, "-s", NULL);
|
||||
if (r >= 0 && m->parameters_fragment.fstype)
|
||||
@@ -934,8 +930,6 @@ static void mount_enter_remounting(Mount *m) {
|
||||
r = exec_command_set(m->control_command, MOUNT_PATH,
|
||||
m->parameters_fragment.what, m->where,
|
||||
"-o", o, NULL);
|
||||
- if (r >= 0 && UNIT(m)->manager->running_as == MANAGER_SYSTEM)
|
||||
- r = exec_command_append(m->control_command, "-n", NULL);
|
||||
if (r >= 0 && m->sloppy_options)
|
||||
r = exec_command_append(m->control_command, "-s", NULL);
|
||||
if (r >= 0 && m->parameters_fragment.fstype)
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
From 7af9382c2dcadebd7633ed858bd6baf211f3d9c0 Mon Sep 17 00:00:00 2001
|
||||
From: Lidong Zhong <lzhong@suse.com>
|
||||
Date: Tue, 28 Jul 2015 19:07:05 +0800
|
||||
Subject: [PATCH 22/47] udev: avoid coredump when initializing udev builtins
|
||||
|
||||
If one of the macros(HAVE_BLKID/HAVE_KMOD/HAVE_ACL) is not
|
||||
defined, there will be a coredump
|
||||
---
|
||||
src/udev/udev-builtin.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
|
||||
index fabc653..88d1acf 100644
|
||||
--- a/src/udev/udev-builtin.c
|
||||
+++ b/src/udev/udev-builtin.c
|
||||
@@ -52,7 +52,7 @@ void udev_builtin_init(struct udev *udev) {
|
||||
return;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
- if (builtins[i]->init)
|
||||
+ if (builtins[i] && builtins[i]->init)
|
||||
builtins[i]->init(udev);
|
||||
|
||||
initialized = true;
|
||||
@@ -65,7 +65,7 @@ void udev_builtin_exit(struct udev *udev) {
|
||||
return;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
- if (builtins[i]->exit)
|
||||
+ if (builtins[i] && builtins[i]->exit)
|
||||
builtins[i]->exit(udev);
|
||||
|
||||
initialized = false;
|
||||
@@ -75,7 +75,7 @@ bool udev_builtin_validate(struct udev *udev) {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
- if (builtins[i]->validate && builtins[i]->validate(udev))
|
||||
+ if (builtins[i] && builtins[i]->validate && builtins[i]->validate(udev))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@@ -84,7 +84,8 @@ void udev_builtin_list(struct udev *udev) {
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
- fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help);
|
||||
+ if (builtins[i])
|
||||
+ fprintf(stderr, " %-14s %s\n", builtins[i]->name, builtins[i]->help);
|
||||
}
|
||||
|
||||
const char *udev_builtin_name(enum udev_builtin_cmd cmd) {
|
||||
@@ -105,7 +106,7 @@ enum udev_builtin_cmd udev_builtin_lookup(const char *command) {
|
||||
if (pos)
|
||||
pos[0] = '\0';
|
||||
for (i = 0; i < ELEMENTSOF(builtins); i++)
|
||||
- if (streq(builtins[i]->name, name))
|
||||
+ if (builtins[i] && streq(builtins[i]->name, name))
|
||||
return i;
|
||||
return UDEV_BUILTIN_MAX;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 1c6e7a4ab586ebb221002c8881e0b44560d1b09d Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Tue, 28 Jul 2015 13:58:40 +0200
|
||||
Subject: [PATCH 23/47] udev: check more builtins[] pointers before
|
||||
dereferencing
|
||||
|
||||
Fix some more locations where pointers from builtins[] are dereferenced
|
||||
before checking. Related to 8cacf69b1.
|
||||
---
|
||||
src/udev/udev-builtin.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
|
||||
index 88d1acf..3ebefa8 100644
|
||||
--- a/src/udev/udev-builtin.c
|
||||
+++ b/src/udev/udev-builtin.c
|
||||
@@ -89,10 +89,16 @@ void udev_builtin_list(struct udev *udev) {
|
||||
}
|
||||
|
||||
const char *udev_builtin_name(enum udev_builtin_cmd cmd) {
|
||||
+ if (!builtins[cmd])
|
||||
+ return NULL;
|
||||
+
|
||||
return builtins[cmd]->name;
|
||||
}
|
||||
|
||||
bool udev_builtin_run_once(enum udev_builtin_cmd cmd) {
|
||||
+ if (!builtins[cmd])
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
return builtins[cmd]->run_once;
|
||||
}
|
||||
|
||||
@@ -116,6 +122,9 @@ int udev_builtin_run(struct udev_device *dev, enum udev_builtin_cmd cmd, const c
|
||||
int argc;
|
||||
char *argv[128];
|
||||
|
||||
+ if (!builtins[cmd])
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
/* we need '0' here to reset the internal state */
|
||||
optind = 0;
|
||||
strscpy(arg, sizeof(arg), command);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From 45a257393eb491da230a14ea3b670e2343f3c8f0 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Tue, 28 Jul 2015 14:38:31 +0200
|
||||
Subject: [PATCH 24/47] udev: Fix udev_builtin_run_once()
|
||||
|
||||
Honour the boolean return value type.
|
||||
This was an oversight in f89d10ae4.
|
||||
---
|
||||
src/udev/udev-builtin.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
|
||||
index 3ebefa8..4f62525 100644
|
||||
--- a/src/udev/udev-builtin.c
|
||||
+++ b/src/udev/udev-builtin.c
|
||||
@@ -97,7 +97,7 @@ const char *udev_builtin_name(enum udev_builtin_cmd cmd) {
|
||||
|
||||
bool udev_builtin_run_once(enum udev_builtin_cmd cmd) {
|
||||
if (!builtins[cmd])
|
||||
- return -EOPNOTSUPP;
|
||||
+ return false;
|
||||
|
||||
return builtins[cmd]->run_once;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 81d1be927e0db5eb838d85c2a55c9ffbaafa8792 Mon Sep 17 00:00:00 2001
|
||||
From: Kay Sievers <kay@vrfy.org>
|
||||
Date: Fri, 31 Jul 2015 15:33:49 +0200
|
||||
Subject: [PATCH 25/47] timesyncd: remove RLIMIT_NPROC
|
||||
|
||||
NSS plugins might create additional threads. Remove the limit, we cannot
|
||||
really make any assumptions here.
|
||||
---
|
||||
src/timesync/timesyncd.c | 4 ----
|
||||
1 file changed, 4 deletions(-)
|
||||
|
||||
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
|
||||
index b030206..7b4178c 100644
|
||||
--- a/src/timesync/timesyncd.c
|
||||
+++ b/src/timesync/timesyncd.c
|
||||
@@ -113,10 +113,6 @@ int main(int argc, char *argv[]) {
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
|
||||
- /* We need one process for ourselves, plus one thread for the asynchronous resolver */
|
||||
- if (setrlimit(RLIMIT_NPROC, &RLIMIT_MAKE_CONST(2)) < 0)
|
||||
- log_warning_errno(errno, "Failed to lower RLIMIT_NPROC to 2: %m");
|
||||
-
|
||||
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
|
||||
|
||||
r = manager_new(&m);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From d0ccb132e6da2f3c31f17437d70745c30af1df61 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Wed, 5 Aug 2015 11:31:52 +0300
|
||||
Subject: [PATCH 26/47] journald: fix count of object meta fields
|
||||
|
||||
There are 12 object meta fields created in dispatch_message_real(), but
|
||||
we only allocated space for 11. Fix this.
|
||||
|
||||
Fixes #866.
|
||||
---
|
||||
src/journal/journald-server.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
|
||||
index 559d100..d954c51 100644
|
||||
--- a/src/journal/journald-server.h
|
||||
+++ b/src/journal/journald-server.h
|
||||
@@ -144,7 +144,7 @@ typedef struct Server {
|
||||
#define N_IOVEC_META_FIELDS 20
|
||||
#define N_IOVEC_KERNEL_FIELDS 64
|
||||
#define N_IOVEC_UDEV_FIELDS 32
|
||||
-#define N_IOVEC_OBJECT_FIELDS 11
|
||||
+#define N_IOVEC_OBJECT_FIELDS 12
|
||||
|
||||
void server_dispatch_message(Server *s, struct iovec *iovec, unsigned n, unsigned m, const struct ucred *ucred, const struct timeval *tv, const char *label, size_t label_len, const char *unit_id, int priority, pid_t object_pid);
|
||||
void server_driver_message(Server *s, sd_id128_t message_id, const char *format, ...) _printf_(3,4);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 33def8a0cd165ba77d6d88134c198ad4bbb44944 Mon Sep 17 00:00:00 2001
|
||||
From: Kay Sievers <kay@vrfy.org>
|
||||
Date: Wed, 5 Aug 2015 20:33:48 +0200
|
||||
Subject: [PATCH 27/47] udev: uaccess - do not log error when device node
|
||||
disappears
|
||||
|
||||
https://github.com/systemd/systemd/issues/875
|
||||
---
|
||||
src/udev/udev-builtin-uaccess.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/udev/udev-builtin-uaccess.c b/src/udev/udev-builtin-uaccess.c
|
||||
index 99bb91a..43bab8a 100644
|
||||
--- a/src/udev/udev-builtin-uaccess.c
|
||||
+++ b/src/udev/udev-builtin-uaccess.c
|
||||
@@ -56,7 +56,7 @@ static int builtin_uaccess(struct udev_device *dev, int argc, char *argv[], bool
|
||||
|
||||
r = devnode_acl(path, true, false, 0, true, uid);
|
||||
if (r < 0) {
|
||||
- log_error_errno(r, "Failed to apply ACL on %s: %m", path);
|
||||
+ log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, r, "Failed to apply ACL on %s: %m", path);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ finish:
|
||||
/* Better be safe than sorry and reset ACL */
|
||||
k = devnode_acl(path, true, false, 0, false, 0);
|
||||
if (k < 0) {
|
||||
- log_error_errno(k, "Failed to apply ACL on %s: %m", path);
|
||||
+ log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, k, "Failed to apply ACL on %s: %m", path);
|
||||
if (r >= 0)
|
||||
r = k;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From 7172a79bd8e8f8e04548905ccd68d3990347104d Mon Sep 17 00:00:00 2001
|
||||
From: reverendhomer <mk.43.ecko@gmail.com>
|
||||
Date: Sat, 8 Aug 2015 09:49:39 +0300
|
||||
Subject: [PATCH 28/47] Coverity #1299015
|
||||
|
||||
bus can never be NULL due to assert
|
||||
---
|
||||
src/libsystemd/sd-bus/bus-message.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
|
||||
index 983e2f6..5843886 100644
|
||||
--- a/src/libsystemd/sd-bus/bus-message.c
|
||||
+++ b/src/libsystemd/sd-bus/bus-message.c
|
||||
@@ -608,8 +608,8 @@ static sd_bus_message *message_new(sd_bus *bus, uint8_t type) {
|
||||
m->header = (struct bus_header*) ((uint8_t*) m + ALIGN(sizeof(struct sd_bus_message)));
|
||||
m->header->endian = BUS_NATIVE_ENDIAN;
|
||||
m->header->type = type;
|
||||
- m->header->version = bus ? bus->message_version : 1;
|
||||
- m->allow_fds = !bus || bus->can_fds || (bus->state != BUS_HELLO && bus->state != BUS_RUNNING);
|
||||
+ m->header->version = bus->message_version;
|
||||
+ m->allow_fds = bus->can_fds || (bus->state != BUS_HELLO && bus->state != BUS_RUNNING);
|
||||
m->root_container.need_offsets = BUS_MESSAGE_IS_GVARIANT(m);
|
||||
m->bus = sd_bus_ref(bus);
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 7693e8f755ba38797f659b32108375b1314f0dec Mon Sep 17 00:00:00 2001
|
||||
From: reverendhomer <mk.43.ecko@gmail.com>
|
||||
Date: Sat, 8 Aug 2015 09:54:10 +0300
|
||||
Subject: [PATCH 29/47] Coverity #1299013
|
||||
|
||||
event cannot be NULL due to assert
|
||||
---
|
||||
src/import/pull-tar.c | 8 +-------
|
||||
1 file changed, 1 insertion(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/import/pull-tar.c b/src/import/pull-tar.c
|
||||
index a6605d2..71b8908 100644
|
||||
--- a/src/import/pull-tar.c
|
||||
+++ b/src/import/pull-tar.c
|
||||
@@ -127,13 +127,7 @@ int tar_pull_new(
|
||||
|
||||
i->grow_machine_directory = path_startswith(i->image_root, "/var/lib/machines");
|
||||
|
||||
- if (event)
|
||||
- i->event = sd_event_ref(event);
|
||||
- else {
|
||||
- r = sd_event_default(&i->event);
|
||||
- if (r < 0)
|
||||
- return r;
|
||||
- }
|
||||
+ i->event = sd_event_ref(event);
|
||||
|
||||
r = curl_glue_new(&i->glue, i->event);
|
||||
if (r < 0)
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
From 3be473032ef69c211b56bcfb9a558837d4ad8334 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mack <daniel@zonque.org>
|
||||
Date: Tue, 18 Aug 2015 16:26:11 +0200
|
||||
Subject: [PATCH 30/47] journal: fix json output of unicode characters
|
||||
|
||||
---
|
||||
src/shared/logs-show.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
|
||||
index 068da46..8550f10 100644
|
||||
--- a/src/shared/logs-show.c
|
||||
+++ b/src/shared/logs-show.c
|
||||
@@ -575,7 +575,6 @@ void json_escape(
|
||||
assert(p);
|
||||
|
||||
if (!(flags & OUTPUT_SHOW_ALL) && l >= JSON_THRESHOLD)
|
||||
-
|
||||
fputs("null", f);
|
||||
|
||||
else if (!utf8_is_printable(p, l)) {
|
||||
@@ -605,8 +604,8 @@ void json_escape(
|
||||
fputc(*p, f);
|
||||
} else if (*p == '\n')
|
||||
fputs("\\n", f);
|
||||
- else if (*p < ' ')
|
||||
- fprintf(f, "\\u%04x", *p);
|
||||
+ else if ((uint8_t) *p < ' ')
|
||||
+ fprintf(f, "\\u%04x", (uint8_t) *p);
|
||||
else
|
||||
fputc(*p, f);
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From 612d18e4b329cb362d494ddf28553ae82406f01d Mon Sep 17 00:00:00 2001
|
||||
From: "Owen W. Taylor" <otaylor@fishsoup.net>
|
||||
Date: Tue, 18 Aug 2015 14:41:24 -0400
|
||||
Subject: [PATCH 31/47] logind: use open_terminal() instead of open()
|
||||
|
||||
The open_terminal() function adds retries in case a terminal
|
||||
is in the process of being closed when we open it, and should
|
||||
generally be used to open a terminal. We especially need it
|
||||
for code that a subsequent commit adds that reopens the terminal
|
||||
at session shut-down time; such races would be more likely in
|
||||
that case.
|
||||
|
||||
Found by Ray Strode.
|
||||
---
|
||||
src/login/logind-session.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
|
||||
index 6a450b0..a8e667b 100644
|
||||
--- a/src/login/logind-session.c
|
||||
+++ b/src/login/logind-session.c
|
||||
@@ -975,7 +975,7 @@ static int session_open_vt(Session *s) {
|
||||
return s->vtfd;
|
||||
|
||||
sprintf(path, "/dev/tty%u", s->vtnr);
|
||||
- s->vtfd = open(path, O_RDWR | O_CLOEXEC | O_NONBLOCK | O_NOCTTY);
|
||||
+ s->vtfd = open_terminal(path, O_RDWR | O_CLOEXEC | O_NONBLOCK | O_NOCTTY);
|
||||
if (s->vtfd < 0)
|
||||
return log_error_errno(errno, "cannot open VT %s of session %s: %m", path, s->id);
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
From 89a1609edd48f08e4227baa2890b96a936cfadb8 Mon Sep 17 00:00:00 2001
|
||||
From: "Owen W. Taylor" <otaylor@fishsoup.net>
|
||||
Date: Tue, 18 Aug 2015 15:19:05 -0400
|
||||
Subject: [PATCH 32/47] logind: get a fresh file descriptor to clean up a VT
|
||||
|
||||
When the controlling process exits, any existing file descriptors
|
||||
for that FD will be marked as hung-up and ioctls on them will
|
||||
file with EIO. To work around this, open a new file descriptor
|
||||
for the VT we want to clean up.
|
||||
|
||||
Thanks to Ray Strode for help in sorting out the problem and
|
||||
coming up with a fix!
|
||||
|
||||
https://github.com/systemd/systemd/issues/989
|
||||
---
|
||||
src/login/logind-session.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
|
||||
index a8e667b..9abdf62 100644
|
||||
--- a/src/login/logind-session.c
|
||||
+++ b/src/login/logind-session.c
|
||||
@@ -1039,7 +1039,18 @@ void session_restore_vt(Session *s) {
|
||||
int vt, kb = K_XLATE;
|
||||
struct vt_mode mode = { 0 };
|
||||
|
||||
+ /* We need to get a fresh handle to the virtual terminal,
|
||||
+ * since the old file-descriptor is potentially in a hung-up
|
||||
+ * state after the controlling process exited; we do a
|
||||
+ * little dance to avoid having the terminal be available
|
||||
+ * for reuse before we've cleaned it up.
|
||||
+ */
|
||||
+ int old_fd = s->vtfd;
|
||||
+ s->vtfd = -1;
|
||||
+
|
||||
vt = session_open_vt(s);
|
||||
+ safe_close(old_fd);
|
||||
+
|
||||
if (vt < 0)
|
||||
return;
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 52f69bd986957e875883760a240983ab0925de87 Mon Sep 17 00:00:00 2001
|
||||
From: Dimitri John Ledkov <dimitri.j.ledkov@intel.com>
|
||||
Date: Wed, 19 Aug 2015 10:03:58 +0000
|
||||
Subject: [PATCH 33/47] timedatectl: assert timezone is not null in setenv()
|
||||
call.
|
||||
|
||||
setenv is declared as:
|
||||
|
||||
extern int setenv (const char *__name, const char *__value, int __replace)
|
||||
__THROW __nonnull ((2));
|
||||
|
||||
And i->timezone can be NULL, if for example /etc/localtime is
|
||||
missing. Previously that worked, but now result in a libc dumping
|
||||
core, as seen with gcc 2.22, due to:
|
||||
|
||||
https://sourceware.org/ml/glibc-cvs/2015-q2/msg00075.html
|
||||
---
|
||||
src/timedate/timedatectl.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
|
||||
index 240578b..8ec6adb 100644
|
||||
--- a/src/timedate/timedatectl.c
|
||||
+++ b/src/timedate/timedatectl.c
|
||||
@@ -96,7 +96,7 @@ static void print_status_info(const StatusInfo *i) {
|
||||
old_tz = strdupa(tz);
|
||||
|
||||
/* Set the new $TZ */
|
||||
- if (setenv("TZ", i->timezone, true) < 0)
|
||||
+ if (i->timezone && setenv("TZ", i->timezone, true) < 0)
|
||||
log_warning_errno(errno, "Failed to set TZ environment variable, ignoring: %m");
|
||||
else
|
||||
tzset();
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From f489997fcb7e2d93ba46279f5a628006bbac88e9 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 20 Aug 2015 12:16:13 +0200
|
||||
Subject: [PATCH 34/47] timedatectl: when no timezone is set consider UTC the
|
||||
default
|
||||
|
||||
This fixes #993, and ensures that the libc does not consider any
|
||||
old timezone information into account, that was set earlier.
|
||||
---
|
||||
src/timedate/timedatectl.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
|
||||
index 8ec6adb..1c3f03c 100644
|
||||
--- a/src/timedate/timedatectl.c
|
||||
+++ b/src/timedate/timedatectl.c
|
||||
@@ -96,7 +96,7 @@ static void print_status_info(const StatusInfo *i) {
|
||||
old_tz = strdupa(tz);
|
||||
|
||||
/* Set the new $TZ */
|
||||
- if (i->timezone && setenv("TZ", i->timezone, true) < 0)
|
||||
+ if (setenv("TZ", isempty(i->timezone) ? "UTC" : i->timezone, true) < 0)
|
||||
log_warning_errno(errno, "Failed to set TZ environment variable, ignoring: %m");
|
||||
else
|
||||
tzset();
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From f58e843b388f10748e686ff5b7491d912bf3ecd0 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 21 Aug 2015 15:28:01 +0200
|
||||
Subject: [PATCH 35/47] core: downgrade "Module inserted" message for kmod to
|
||||
DEBUG
|
||||
|
||||
Closes #919.
|
||||
---
|
||||
src/core/kmod-setup.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c
|
||||
index fc6d2f4..2068ffd 100644
|
||||
--- a/src/core/kmod-setup.c
|
||||
+++ b/src/core/kmod-setup.c
|
||||
@@ -112,7 +112,7 @@ int kmod_setup(void) {
|
||||
|
||||
r = kmod_module_probe_insert_module(mod, KMOD_PROBE_APPLY_BLACKLIST, NULL, NULL, NULL, NULL);
|
||||
if (r == 0)
|
||||
- log_info("Inserted module '%s'", kmod_module_get_name(mod));
|
||||
+ log_debug("Inserted module '%s'", kmod_module_get_name(mod));
|
||||
else if (r == KMOD_PROBE_APPLY_BLACKLIST)
|
||||
log_info("Module '%s' is blacklisted", kmod_module_get_name(mod));
|
||||
else {
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 9a73a3023c5934c88ba1da694c41af4e1c08ff44 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Mon, 24 Aug 2015 21:09:49 +0200
|
||||
Subject: [PATCH 36/47] systemctl: properly handle empty control group paths in
|
||||
"status"
|
||||
|
||||
When showing the status of the "-.slice" slice root unit (whose reported
|
||||
cgroup path is ""), we suppressed the cgroup tree so far, because
|
||||
skipped it for all unit with an empty cgroup path. Let's fix that, and
|
||||
properly handle the empty cgroup path.
|
||||
---
|
||||
src/systemctl/systemctl.c | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
||||
index 6db4d65..3ee8f20 100644
|
||||
--- a/src/systemctl/systemctl.c
|
||||
+++ b/src/systemctl/systemctl.c
|
||||
@@ -3609,7 +3609,14 @@ static int status_property(const char *name, sd_bus_message *m, UnitStatusInfo *
|
||||
if (r < 0)
|
||||
return bus_log_parse_error(r);
|
||||
|
||||
- if (!isempty(s)) {
|
||||
+ if (streq(name, "ControlGroup"))
|
||||
+ i->control_group = s;
|
||||
+ else if (!isempty(s)) {
|
||||
+ /* For all but the cgroup path (see above) we
|
||||
+ * consider the empty string as unset. For the
|
||||
+ * cgroup path the empty string refers to the
|
||||
+ * root of the cgroup tree. */
|
||||
+
|
||||
if (streq(name, "Id"))
|
||||
i->id = s;
|
||||
else if (streq(name, "LoadState"))
|
||||
@@ -3632,8 +3639,6 @@ static int status_property(const char *name, sd_bus_message *m, UnitStatusInfo *
|
||||
i->control_group = e;
|
||||
}
|
||||
#endif
|
||||
- else if (streq(name, "ControlGroup"))
|
||||
- i->control_group = s;
|
||||
else if (streq(name, "StatusText"))
|
||||
i->status_text = s;
|
||||
else if (streq(name, "PIDFile"))
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
From d167b3653665d5d617f02e877e1f9e38e5a05a6c Mon Sep 17 00:00:00 2001
|
||||
From: HATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
|
||||
Date: Wed, 26 Aug 2015 12:07:31 +0900
|
||||
Subject: [PATCH 37/47] selinux: fix regression of systemctl subcommands when
|
||||
absolute unit file paths are specified
|
||||
|
||||
The commit 4938696301a914ec26bcfc60bb99a1e9624e3789 overlooked the
|
||||
fact that unit files can be specified as unit file paths, not unit
|
||||
file names, wrongly passing a unit file path to the 1st argument of
|
||||
manager_load_unit() that handles it as a unit file name. As a result,
|
||||
the following 4 systemctl subcommands:
|
||||
|
||||
enable
|
||||
disable
|
||||
reenable
|
||||
link
|
||||
mask
|
||||
unmask
|
||||
|
||||
fail with the following error message:
|
||||
|
||||
# systemctl enable /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Unit name /usr/lib/systemd/system/kdump.service is not valid.
|
||||
# systemctl disable /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Unit name /usr/lib/systemd/system/kdump.service is not valid.
|
||||
# systemctl reenable /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Unit name /usr/lib/systemd/system/kdump.service is not valid.
|
||||
# cp /usr/lib/systemd/system/kdump.service /tmp/
|
||||
# systemctl link /tmp/kdump.service
|
||||
Failed to execute operation: Unit name /tmp/kdump.service is not valid.
|
||||
# systemctl mask /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Unit name /usr/lib/systemd/system/kdump.service is not valid.
|
||||
# systemctl unmask /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Unit name /usr/lib/systemd/system/kdump.service is not valid.
|
||||
|
||||
To fix the issue, first check whether a unit file is passed as a unit
|
||||
file name or a unit file path, and then pass the unit file to the
|
||||
appropreate argument of manager_load_unit().
|
||||
|
||||
By the way, even with this commit mask and unmask reject unit file
|
||||
paths as follows and this is a correct behavior:
|
||||
|
||||
# systemctl mask /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Invalid argument
|
||||
# systemctl unmask /usr/lib/systemd/system/kdump.service
|
||||
Failed to execute operation: Invalid argument
|
||||
---
|
||||
src/core/selinux-access.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
|
||||
index 50a90b0..2ecfa40 100644
|
||||
--- a/src/core/selinux-access.c
|
||||
+++ b/src/core/selinux-access.c
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "selinux-util.h"
|
||||
#include "audit-fd.h"
|
||||
#include "strv.h"
|
||||
+#include "path-util.h"
|
||||
|
||||
static bool initialized = false;
|
||||
|
||||
@@ -302,7 +303,10 @@ int mac_selinux_unit_access_check_strv(
|
||||
int r;
|
||||
|
||||
STRV_FOREACH(i, units) {
|
||||
- r = manager_load_unit(m, *i, NULL, error, &u);
|
||||
+ if (is_path(*i))
|
||||
+ r = manager_load_unit(m, NULL, *i, error, &u);
|
||||
+ else
|
||||
+ r = manager_load_unit(m, *i, NULL, error, &u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
r = mac_selinux_unit_access_check(u, message, permission, error);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From 04e4cc1c948ed6309219e302a35ac617649fea7c Mon Sep 17 00:00:00 2001
|
||||
From: Robin Hack <rhack@redhat.com>
|
||||
Date: Mon, 31 Aug 2015 11:45:09 +0200
|
||||
Subject: [PATCH 38/47] socket: fix setsockopt call. SOL_SOCKET changed to
|
||||
SOL_TCP.
|
||||
|
||||
---
|
||||
src/core/socket.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/socket.c b/src/core/socket.c
|
||||
index 693cbc6..70518bd 100644
|
||||
--- a/src/core/socket.c
|
||||
+++ b/src/core/socket.c
|
||||
@@ -839,7 +839,7 @@ static void socket_apply_socket_options(Socket *s, int fd) {
|
||||
|
||||
if (s->keep_alive_cnt) {
|
||||
int value = s->keep_alive_cnt;
|
||||
- if (setsockopt(fd, SOL_SOCKET, TCP_KEEPCNT, &value, sizeof(value)) < 0)
|
||||
+ if (setsockopt(fd, SOL_TCP, TCP_KEEPCNT, &value, sizeof(value)) < 0)
|
||||
log_unit_warning_errno(UNIT(s), errno, "TCP_KEEPCNT failed: %m");
|
||||
}
|
||||
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 9f334e7740a00e91f05b4b91c20f2bc152db3ea2 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Mon, 31 Aug 2015 13:07:24 +0200
|
||||
Subject: [PATCH 39/47] sd-event: improve debug message when we fail to remove
|
||||
and fd from an epoll
|
||||
|
||||
Let's help users to debug issues with epoll fd removal by printing the
|
||||
name of the event source.
|
||||
---
|
||||
src/libsystemd/sd-event/sd-event.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
|
||||
index 76964aa..3459f50 100644
|
||||
--- a/src/libsystemd/sd-event/sd-event.c
|
||||
+++ b/src/libsystemd/sd-event/sd-event.c
|
||||
@@ -481,7 +481,8 @@ static void source_io_unregister(sd_event_source *s) {
|
||||
return;
|
||||
|
||||
r = epoll_ctl(s->event->epoll_fd, EPOLL_CTL_DEL, s->io.fd, NULL);
|
||||
- assert_log(r >= 0);
|
||||
+ if (r < 0)
|
||||
+ log_debug_errno(errno, "Failed to remove source %s from epoll: %m", strna(s->description));
|
||||
|
||||
s->io.registered = false;
|
||||
}
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
From 01fafd4fd6456c02921979ed634441a2c2c63f22 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Sekletar <msekleta@redhat.com>
|
||||
Date: Tue, 1 Sep 2015 16:02:58 +0200
|
||||
Subject: [PATCH 40/47] selinux: always use *_raw API from libselinux
|
||||
|
||||
When mcstransd* is running non-raw functions will return translated SELinux
|
||||
context. Problem is that libselinux will cache this information and in the
|
||||
future it will return same context even though mcstransd maybe not running at
|
||||
that time. If you then check with such context against SELinux policy then
|
||||
selinux_check_access may fail depending on whether mcstransd is running or not.
|
||||
|
||||
To workaround this problem/bug in libselinux, we should always get raw context
|
||||
instead. Most users will not notice because result of access check is logged
|
||||
only in debug mode.
|
||||
|
||||
* SELinux context translation service, which will translates labels to human
|
||||
readable form
|
||||
---
|
||||
src/basic/selinux-util.c | 10 +++++-----
|
||||
src/core/selinux-access.c | 4 ++--
|
||||
2 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/basic/selinux-util.c b/src/basic/selinux-util.c
|
||||
index 7c58985..a39a0f7 100644
|
||||
--- a/src/basic/selinux-util.c
|
||||
+++ b/src/basic/selinux-util.c
|
||||
@@ -199,11 +199,11 @@ int mac_selinux_get_create_label_from_exe(const char *exe, char **label) {
|
||||
if (!mac_selinux_use())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- r = getcon(&mycon);
|
||||
+ r = getcon_raw(&mycon);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
- r = getfilecon(exe, &fcon);
|
||||
+ r = getfilecon_raw(exe, &fcon);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
@@ -225,7 +225,7 @@ int mac_selinux_get_our_label(char **label) {
|
||||
if (!mac_selinux_use())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- r = getcon(label);
|
||||
+ r = getcon_raw(label);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
#endif
|
||||
@@ -249,7 +249,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
|
||||
if (!mac_selinux_use())
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- r = getcon(&mycon);
|
||||
+ r = getcon_raw(&mycon);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
|
||||
@@ -260,7 +260,7 @@ int mac_selinux_get_child_mls_label(int socket_fd, const char *exe, const char *
|
||||
if (!exec_label) {
|
||||
/* If there is no context set for next exec let's use context
|
||||
of target executable */
|
||||
- r = getfilecon(exe, &fcon);
|
||||
+ r = getfilecon_raw(exe, &fcon);
|
||||
if (r < 0)
|
||||
return -errno;
|
||||
}
|
||||
diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c
|
||||
index 2ecfa40..011644b 100644
|
||||
--- a/src/core/selinux-access.c
|
||||
+++ b/src/core/selinux-access.c
|
||||
@@ -246,7 +246,7 @@ int mac_selinux_generic_access_check(
|
||||
if (path) {
|
||||
/* Get the file context of the unit file */
|
||||
|
||||
- r = getfilecon(path, &fcon);
|
||||
+ r = getfilecon_raw(path, &fcon);
|
||||
if (r < 0) {
|
||||
r = sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to get file context on %s.", path);
|
||||
goto finish;
|
||||
@@ -254,7 +254,7 @@ int mac_selinux_generic_access_check(
|
||||
|
||||
tclass = "service";
|
||||
} else {
|
||||
- r = getcon(&fcon);
|
||||
+ r = getcon_raw(&fcon);
|
||||
if (r < 0) {
|
||||
r = sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "Failed to get current context.");
|
||||
goto finish;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
From 04c428f42c40f1689041d9e6e8de3f06744acf3f Mon Sep 17 00:00:00 2001
|
||||
From: Evgeny Vereshchagin <evvers@ya.ru>
|
||||
Date: Wed, 2 Sep 2015 01:43:32 +0000
|
||||
Subject: [PATCH 41/47] virt: detect parallels virtualization
|
||||
|
||||
inspired by http://people.redhat.com/~rjones/virt-what/
|
||||
|
||||
see:
|
||||
* http://git.annexia.org/?p=virt-what.git;a=blob;f=virt-what.in;h=a5ed33ef3e4bfa3281c9589eccac4d92dff1babe;hb=HEAD#l200
|
||||
* http://git.annexia.org/?p=virt-what.git;a=blob;f=virt-what.in;h=a5ed33ef3e4bfa3281c9589eccac4d92dff1babe;hb=HEAD#l253
|
||||
---
|
||||
man/systemd-detect-virt.xml | 7 ++++++-
|
||||
src/basic/virt.c | 6 ++++--
|
||||
2 files changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml
|
||||
index 40755a2..9ea9141 100644
|
||||
--- a/man/systemd-detect-virt.xml
|
||||
+++ b/man/systemd-detect-virt.xml
|
||||
@@ -88,7 +88,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
- <entry morerows="8">VM</entry>
|
||||
+ <entry morerows="9">VM</entry>
|
||||
<entry><varname>qemu</varname></entry>
|
||||
<entry>QEMU software virtualization</entry>
|
||||
</row>
|
||||
@@ -134,6 +134,11 @@
|
||||
</row>
|
||||
|
||||
<row>
|
||||
+ <entry><varname>parallels</varname></entry>
|
||||
+ <entry>Parallels Desktop, Parallels Server</entry>
|
||||
+ </row>
|
||||
+
|
||||
+ <row>
|
||||
<entry morerows="5">container</entry>
|
||||
<entry><varname>openvz</varname></entry>
|
||||
<entry>OpenVZ/Virtuozzo</entry>
|
||||
diff --git a/src/basic/virt.c b/src/basic/virt.c
|
||||
index a8d2671..4a4bebd 100644
|
||||
--- a/src/basic/virt.c
|
||||
+++ b/src/basic/virt.c
|
||||
@@ -156,7 +156,8 @@ static int detect_vm_dmi(const char **_id) {
|
||||
"VMW\0" "vmware\0"
|
||||
"innotek GmbH\0" "oracle\0"
|
||||
"Xen\0" "xen\0"
|
||||
- "Bochs\0" "bochs\0";
|
||||
+ "Bochs\0" "bochs\0"
|
||||
+ "Parallels\0" "parallels\0";
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(dmi_vendors); i++) {
|
||||
@@ -244,8 +245,9 @@ int detect_vm(const char **id) {
|
||||
r = detect_vm_dmi(&_id);
|
||||
|
||||
/* kvm with and without Virtualbox */
|
||||
+ /* Parallels exports KVMKVMKVM leaf */
|
||||
if (streq_ptr(_id_cpuid, "kvm")) {
|
||||
- if (r > 0 && streq(_id, "oracle"))
|
||||
+ if (r > 0 && (streq(_id, "oracle") || streq(_id, "parallels")))
|
||||
goto finish;
|
||||
|
||||
_id = _id_cpuid;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From 7390da4b25fb32f2c6b1f743dda477e50078e5b2 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Gundersen <teg@jklm.no>
|
||||
Date: Tue, 25 Aug 2015 14:12:19 +0200
|
||||
Subject: [PATCH 42/47] udev: net_id - support predictable ifnames on virtio
|
||||
buses
|
||||
|
||||
Virtio buses are undeterministically enumerated, so we cannot use them as a basis
|
||||
for deterministic naming (see bf81e792f3c0). However, we are guaranteed that there
|
||||
is only ever one virtio bus for every parent device, so we can simply skip over
|
||||
the virtio buses when naming the devices.
|
||||
---
|
||||
src/udev/udev-builtin-net_id.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
|
||||
index 6e7e127..589f1f7 100644
|
||||
--- a/src/udev/udev-builtin-net_id.c
|
||||
+++ b/src/udev/udev-builtin-net_id.c
|
||||
@@ -280,8 +280,16 @@ static int names_pci(struct udev_device *dev, struct netnames *names) {
|
||||
assert(names);
|
||||
|
||||
parent = udev_device_get_parent(dev);
|
||||
+
|
||||
+ /* there can only ever be one virtio bus per parent device, so we can
|
||||
+ safely ignore any virtio buses. see
|
||||
+ <http://lists.linuxfoundation.org/pipermail/virtualization/2015-August/030331.html> */
|
||||
+ while (parent && streq_ptr("virtio", udev_device_get_subsystem(parent)))
|
||||
+ parent = udev_device_get_parent(parent);
|
||||
+
|
||||
if (!parent)
|
||||
return -ENOENT;
|
||||
+
|
||||
/* check if our direct parent is a PCI device with no other bus in-between */
|
||||
if (streq_ptr("pci", udev_device_get_subsystem(parent))) {
|
||||
names->type = NET_PCI;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From e82c575ba143e061e93e13e0ad7b6c7c2b7c481b Mon Sep 17 00:00:00 2001
|
||||
From: Tom Lyon <pugs@drivescale.com>
|
||||
Date: Mon, 21 Sep 2015 14:36:32 -0700
|
||||
Subject: [PATCH 43/47] Fixup WWN bytes for big-endian systems
|
||||
|
||||
---
|
||||
src/udev/ata_id/ata_id.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/src/udev/ata_id/ata_id.c b/src/udev/ata_id/ata_id.c
|
||||
index 7ba0b7f..158eae7 100644
|
||||
--- a/src/udev/ata_id/ata_id.c
|
||||
+++ b/src/udev/ata_id/ata_id.c
|
||||
@@ -485,6 +485,10 @@ int main(int argc, char *argv[])
|
||||
disk_identify_fixup_uint16(identify.byte, 90); /* time required for enhanced SECURITY ERASE UNIT */
|
||||
disk_identify_fixup_uint16(identify.byte, 91); /* current APM values */
|
||||
disk_identify_fixup_uint16(identify.byte, 94); /* current AAM value */
|
||||
+ disk_identify_fixup_uint16(identify.byte, 108); /* wwn */
|
||||
+ disk_identify_fixup_uint16(identify.byte, 109); /* wwn */
|
||||
+ disk_identify_fixup_uint16(identify.byte, 110); /* wwn */
|
||||
+ disk_identify_fixup_uint16(identify.byte, 111); /* wwn */
|
||||
disk_identify_fixup_uint16(identify.byte, 128); /* device lock function */
|
||||
disk_identify_fixup_uint16(identify.byte, 217); /* nominal media rotation rate */
|
||||
memcpy(&id, identify.byte, sizeof id);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From ffaf97ab478310ecf4598334d057afbdae4d1283 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Sekletar <msekleta@redhat.com>
|
||||
Date: Wed, 23 Sep 2015 19:23:21 +0200
|
||||
Subject: [PATCH 44/47] units: run ldconfig also when cache is unpopulated
|
||||
|
||||
---
|
||||
units/ldconfig.service | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/units/ldconfig.service b/units/ldconfig.service
|
||||
index f9691e2..994edd9 100644
|
||||
--- a/units/ldconfig.service
|
||||
+++ b/units/ldconfig.service
|
||||
@@ -12,7 +12,8 @@ DefaultDependencies=no
|
||||
Conflicts=shutdown.target
|
||||
After=systemd-remount-fs.service
|
||||
Before=sysinit.target shutdown.target systemd-update-done.service
|
||||
-ConditionNeedsUpdate=/etc
|
||||
+ConditionNeedsUpdate=|/etc
|
||||
+ConditionFileNotEmpty=|!/etc/ld.so.cache
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
From d22d9301ece9e6cffc5db8266afb3b99df32306c Mon Sep 17 00:00:00 2001
|
||||
From: Krzysztof Kotlenga <k.kotlenga@sims.pl>
|
||||
Date: Thu, 24 Sep 2015 00:34:51 +0200
|
||||
Subject: [PATCH 45/47] sd-event: fix prepare priority queue comparison
|
||||
function
|
||||
|
||||
Otherwise a disabled event source can get swapped with an enabled one
|
||||
and cause a severe sd-event malfunction.
|
||||
|
||||
http://lists.freedesktop.org/archives/systemd-devel/2015-September/034356.html
|
||||
---
|
||||
src/libsystemd/sd-event/sd-event.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
|
||||
index 3459f50..6127888 100644
|
||||
--- a/src/libsystemd/sd-event/sd-event.c
|
||||
+++ b/src/libsystemd/sd-event/sd-event.c
|
||||
@@ -231,6 +231,12 @@ static int prepare_prioq_compare(const void *a, const void *b) {
|
||||
assert(x->prepare);
|
||||
assert(y->prepare);
|
||||
|
||||
+ /* Enabled ones first */
|
||||
+ if (x->enabled != SD_EVENT_OFF && y->enabled == SD_EVENT_OFF)
|
||||
+ return -1;
|
||||
+ if (x->enabled == SD_EVENT_OFF && y->enabled != SD_EVENT_OFF)
|
||||
+ return 1;
|
||||
+
|
||||
/* Move most recently prepared ones last, so that we can stop
|
||||
* preparing as soon as we hit one that has already been
|
||||
* prepared in the current iteration */
|
||||
@@ -239,12 +245,6 @@ static int prepare_prioq_compare(const void *a, const void *b) {
|
||||
if (x->prepare_iteration > y->prepare_iteration)
|
||||
return 1;
|
||||
|
||||
- /* Enabled ones first */
|
||||
- if (x->enabled != SD_EVENT_OFF && y->enabled == SD_EVENT_OFF)
|
||||
- return -1;
|
||||
- if (x->enabled == SD_EVENT_OFF && y->enabled != SD_EVENT_OFF)
|
||||
- return 1;
|
||||
-
|
||||
/* Lower priority values first */
|
||||
if (x->priority < y->priority)
|
||||
return -1;
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From cd12ff2291f5bd529a8d83bb76726194d3daaf13 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Sekletar <msekleta@redhat.com>
|
||||
Date: Thu, 24 Sep 2015 22:25:43 +0200
|
||||
Subject: [PATCH 46/47] Revert "core: one step back again, for nspawn we
|
||||
actually can't wait for cgroups running empty since systemd will get exactly
|
||||
zero notifications about it"
|
||||
|
||||
This reverts commit 743970d2ea6d08aa7c7bff8220f6b7702f2b1db7.
|
||||
---
|
||||
src/core/unit.c | 10 +---------
|
||||
1 file changed, 1 insertion(+), 9 deletions(-)
|
||||
|
||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
||||
index 0a66a6a..db0fca0 100644
|
||||
--- a/src/core/unit.c
|
||||
+++ b/src/core/unit.c
|
||||
@@ -3557,15 +3557,7 @@ int unit_kill_context(
|
||||
log_unit_warning_errno(u, r, "Failed to kill control group: %m");
|
||||
} else if (r > 0) {
|
||||
|
||||
- /* FIXME: For now, we will not wait for the
|
||||
- * cgroup members to die, simply because
|
||||
- * cgroup notification is unreliable. It
|
||||
- * doesn't work at all in containers, and
|
||||
- * outside of containers it can be confused
|
||||
- * easily by leaving directories in the
|
||||
- * cgroup. */
|
||||
-
|
||||
- /* wait_for_exit = true; */
|
||||
+ wait_for_exit = true;
|
||||
|
||||
if (c->send_sighup && k != KILL_KILL) {
|
||||
set_free(pid_set);
|
||||
--
|
||||
2.5.0
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From cf0b36ff2d70b7fd4f64ce95517bdcebdb4dbf93 Mon Sep 17 00:00:00 2001
|
||||
From: Fedora systemd team <systemd-maint@redhat.com>
|
||||
Date: Thu, 24 Sep 2015 23:28:14 +0200
|
||||
Subject: [PATCH 47/47] Pass pointer to unit object instead of unit id
|
||||
|
||||
Related: #1195761
|
||||
---
|
||||
src/core/unit.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
||||
index db0fca0..5dbbef7 100644
|
||||
--- a/src/core/unit.c
|
||||
+++ b/src/core/unit.c
|
||||
@@ -1676,7 +1676,7 @@ static void unit_check_binds_to(Unit *u) {
|
||||
}
|
||||
|
||||
assert(other);
|
||||
- log_unit_info(u->id, "Unit %s is bound to inactive unit %s. Stopping, too.", u->id, other->id);
|
||||
+ log_unit_info(u, "Unit %s is bound to inactive unit %s. Stopping, too.", u->id, other->id);
|
||||
|
||||
/* A unit we need to run is gone. Sniff. Let's stop this. */
|
||||
r = manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL);
|
||||
--
|
||||
2.5.0
|
||||
|
52
systemd.spec
52
systemd.spec
|
@ -39,9 +39,57 @@ Patch0001: 0001-tmpfiles-downgrade-errors-when-a-file-system-does-no.patch
|
|||
Patch0002: 0002-load-fragment-fix-segv-on-parse-error.patch
|
||||
Patch0003: 0003-man-clarify-that-unknown-escapes-must-be-escaped.patch
|
||||
Patch0004: 0004-keymap-Add-Corsair-K70.patch
|
||||
Patch0005: 0001-selinux-fix-missing-SELinux-unit-access-check.patch
|
||||
Patch0006: 0002-install-make-unit_file_get_list-aware-of-UNIT_FILE_I.patch
|
||||
Patch0007: 0003-journal-gatewayd-fix-tmpfile-logic.patch
|
||||
Patch0008: 0004-resolved-fix-marshalling-of-RRSIG-records.patch
|
||||
Patch0009: 0005-Reload-manager-defaults-at-daemon-reload.patch
|
||||
Patch0010: 0006-basic-util.c-fopen_temporary-close-fd-if-failed.patch
|
||||
Patch0011: 0007-tmpfiles-don-t-recursively-descend-into-journal-dire.patch
|
||||
Patch0012: 0008-units-emergency.service-wait-for-plymouth-to-shut-do.patch
|
||||
Patch0013: 0009-core-include-unit-in-path-state-transition-debug-log.patch
|
||||
Patch0014: 0010-util-make-sure-we-don-t-clobber-errno-in-error-path.patch
|
||||
Patch0015: 0011-sd-boot-ignore-missing-etc-machine-id.patch
|
||||
Patch0016: 0012-virt-handle-Virtualbox-5.0-with-kvm-hypervisor.patch
|
||||
Patch0017: 0013-copy-when-we-recursively-copy-a-directory-tree-copy-.patch
|
||||
Patch0018: 0014-fileio-get_status_field-don-t-clobber-arg-on-OOM.patch
|
||||
Patch0019: 0015-journal-verify-don-t-hit-SIGFPE-when-determining-pro.patch
|
||||
Patch0020: 0016-journal-avoid-mapping-empty-data-and-field-hash-tabl.patch
|
||||
Patch0021: 0017-journal-when-verifying-journal-files-handle-empty-on.patch
|
||||
Patch0022: 0018-journal-explain-the-error-when-we-find-a-non-DATA-ob.patch
|
||||
Patch0023: 0019-journal-uppercase-first-character-in-verify-error-me.patch
|
||||
Patch0024: 0020-udev-fix-parameter-process.patch
|
||||
Patch0025: 0021-mount-remove-obsolete-n.patch
|
||||
Patch0026: 0022-udev-avoid-coredump-when-initializing-udev-builtins.patch
|
||||
Patch0027: 0023-udev-check-more-builtins-pointers-before-dereferenci.patch
|
||||
Patch0028: 0024-udev-Fix-udev_builtin_run_once.patch
|
||||
Patch0029: 0025-timesyncd-remove-RLIMIT_NPROC.patch
|
||||
Patch0030: 0026-journald-fix-count-of-object-meta-fields.patch
|
||||
Patch0031: 0027-udev-uaccess-do-not-log-error-when-device-node-disap.patch
|
||||
Patch0032: 0028-Coverity-1299015.patch
|
||||
Patch0033: 0029-Coverity-1299013.patch
|
||||
Patch0034: 0030-journal-fix-json-output-of-unicode-characters.patch
|
||||
Patch0035: 0031-logind-use-open_terminal-instead-of-open.patch
|
||||
Patch0036: 0032-logind-get-a-fresh-file-descriptor-to-clean-up-a-VT.patch
|
||||
Patch0037: 0033-timedatectl-assert-timezone-is-not-null-in-setenv-ca.patch
|
||||
Patch0038: 0034-timedatectl-when-no-timezone-is-set-consider-UTC-the.patch
|
||||
Patch0039: 0035-core-downgrade-Module-inserted-message-for-kmod-to-D.patch
|
||||
Patch0040: 0036-systemctl-properly-handle-empty-control-group-paths-.patch
|
||||
Patch0041: 0037-selinux-fix-regression-of-systemctl-subcommands-when.patch
|
||||
Patch0042: 0038-socket-fix-setsockopt-call.-SOL_SOCKET-changed-to-SO.patch
|
||||
Patch0043: 0039-sd-event-improve-debug-message-when-we-fail-to-remov.patch
|
||||
Patch0044: 0040-selinux-always-use-_raw-API-from-libselinux.patch
|
||||
Patch0045: 0041-virt-detect-parallels-virtualization.patch
|
||||
Patch0046: 0042-udev-net_id-support-predictable-ifnames-on-virtio-bu.patch
|
||||
Patch0047: 0043-Fixup-WWN-bytes-for-big-endian-systems.patch
|
||||
Patch0048: 0044-units-run-ldconfig-also-when-cache-is-unpopulated.patch
|
||||
Patch0049: 0045-sd-event-fix-prepare-priority-queue-comparison-funct.patch
|
||||
Patch0050: 0046-Revert-core-one-step-back-again-for-nspawn-we-actual.patch
|
||||
|
||||
Patch997: 0001-Re-apply-walters-unit-patch-for-F23-systemd-v222.patch
|
||||
Patch998: 0001-Revert-core-mount-add-dependencies-to-dynamically-mo-v222.patch
|
||||
Patch999: 0047-Pass-pointer-to-unit-object-instead-of-unit-id.patch
|
||||
|
||||
Patch998: 0001-Re-apply-walters-unit-patch-for-F23-systemd-v222.patch
|
||||
Patch999: 0001-Revert-core-mount-add-dependencies-to-dynamically-mo-v222.patch
|
||||
|
||||
# kernel-install patch for grubby, drop if grubby is obsolete
|
||||
Patch1000: kernel-install-grubby.patch
|
||||
|
|
Loading…
Reference in New Issue