diff --git a/0001-login-fix-memory-leak-on-DropController.patch b/0001-login-fix-memory-leak-on-DropController.patch new file mode 100644 index 0000000..ba5ed74 --- /dev/null +++ b/0001-login-fix-memory-leak-on-DropController.patch @@ -0,0 +1,36 @@ +From 60240797a4ce464ec7a0537ccbec4c83f599251c Mon Sep 17 00:00:00 2001 +From: David Herrmann +Date: Fri, 22 Aug 2014 14:57:11 +0200 +Subject: [PATCH] login: fix memory-leak on DropController() + +Our bus-name watch helpers only remove a bus-name if it's not a +controller, anymore. If we call manager_drop_busname() before +unregistering the controller, the busname will not be dropped. Therefore, +first drop the controller, then drop the bus-name. +--- + src/login/logind-session.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git src/login/logind-session.c src/login/logind-session.c +index 136bbce..0c6e425 100644 +--- src/login/logind-session.c ++++ src/login/logind-session.c +@@ -1061,11 +1061,13 @@ bool session_is_controller(Session *s, const char *sender) { + + static void session_swap_controller(Session *s, char *name) { + SessionDevice *sd; ++ char *c; + + if (s->controller) { +- manager_drop_busname(s->manager, s->controller); +- free(s->controller); ++ c = s->controller; + s->controller = NULL; ++ manager_drop_busname(s->manager, c); ++ free(c); + + /* Drop all devices as they're now unused. Do that after the + * controller is released to avoid sending out useles +-- +1.7.9.2 + diff --git a/0001-systemctl-Correct-error-message-printed-when-bus_pro.patch b/0001-systemctl-Correct-error-message-printed-when-bus_pro.patch new file mode 100644 index 0000000..917c8ec --- /dev/null +++ b/0001-systemctl-Correct-error-message-printed-when-bus_pro.patch @@ -0,0 +1,28 @@ +From 498cfc230af8f83675be2e92057956f1792969e4 Mon Sep 17 00:00:00 2001 +From: Sjoerd Simons +Date: Sat, 23 Aug 2014 21:11:44 +0200 +Subject: [PATCH] systemctl: Correct error message printed when + bus_process_wait fails + +Actually use the variable containing the return code of bus_process_wait when +printing the error message as a result of it failing. +--- + src/systemctl/systemctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git src/systemctl/systemctl.c src/systemctl/systemctl.c +index d9b8bee..6534819 100644 +--- src/systemctl/systemctl.c ++++ src/systemctl/systemctl.c +@@ -2382,7 +2382,7 @@ static int wait_for_jobs(sd_bus *bus, Set *s) { + while (!set_isempty(s)) { + q = bus_process_wait(bus); + if (q < 0) { +- log_error("Failed to wait for response: %s", strerror(-r)); ++ log_error("Failed to wait for response: %s", strerror(-q)); + return q; + } + +-- +1.7.9.2 + diff --git a/0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch b/0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch new file mode 100644 index 0000000..6bc06d2 --- /dev/null +++ b/0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch @@ -0,0 +1,29 @@ +From 66f311206e908a5b6f21e66fad73e1e5ea3e31d6 Mon Sep 17 00:00:00 2001 +From: Ivan Shapovalov +Date: Wed, 27 Aug 2014 00:17:43 +0400 +Subject: [PATCH] units: order systemd-fsck@.service after + local-fs-pre.target. + +With this change, it becomes possible to order a unit to activate before any +modifications to the file systems. This is especially useful for supporting +resume from hibernation. +--- + units/systemd-fsck@.service.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git units/systemd-fsck@.service.in units/systemd-fsck@.service.in +index c12efa8..d2cda6a 100644 +--- units/systemd-fsck@.service.in ++++ units/systemd-fsck@.service.in +@@ -10,7 +10,7 @@ Description=File System Check on %f + Documentation=man:systemd-fsck@.service(8) + DefaultDependencies=no + BindsTo=%i.device +-After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device systemd-fsck-root.service ++After=systemd-readahead-collect.service systemd-readahead-replay.service %i.device systemd-fsck-root.service local-fs-pre.target + Before=shutdown.target + + [Service] +-- +1.7.9.2 + diff --git a/0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch b/0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch new file mode 100644 index 0000000..9cd13c2 --- /dev/null +++ b/0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch @@ -0,0 +1,96 @@ +Based on 8a7c93d858c342744adf481565d8bb03b9713dcf Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 27 Aug 2014 21:42:20 +0200 +Subject: [PATCH] util: fix minimal race where we might miss SIGTERMs when + forking off an agent + +Before forking, block all signals, and unblock them afterwards. This way +the child will have them blocked, and we won't lose them. +--- + src/shared/util.c | 39 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 34 insertions(+), 5 deletions(-) + +--- src/shared/util.c ++++ src/shared/util.c 2014-08-28 10:32:06.442693437 +0000 +@@ -894,6 +894,18 @@ int reset_all_signal_handlers(void) { + return 0; + } + ++static int reset_signal_mask(void) { ++ sigset_t ss; ++ ++ if (sigemptyset(&ss) < 0) ++ return -errno; ++ ++ if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0) ++ return -errno; ++ ++ return 0; ++} ++ + char *strstrip(char *s) { + char *e; + +@@ -5119,9 +5131,9 @@ int fd_inc_rcvbuf(int fd, size_t n) { + } + + int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *path, ...) { +- pid_t parent_pid, agent_pid; +- int fd; + bool stdout_is_tty, stderr_is_tty; ++ pid_t parent_pid, agent_pid; ++ sigset_t ss, saved_ss; + unsigned n, i; + va_list ap; + char **l; +@@ -5129,16 +5141,25 @@ int fork_agent(pid_t *pid, const int exc + assert(pid); + assert(path); + +- parent_pid = getpid(); +- + /* Spawns a temporary TTY agent, making sure it goes away when + * we go away */ + ++ parent_pid = getpid(); ++ ++ /* First we temporarily block all signals, so that the new ++ * child has them blocked initially. This way, we can be sure ++ * that SIGTERMs are not lost we might send to the agent. */ ++ assert_se(sigfillset(&ss) >= 0); ++ assert_se(sigprocmask(SIG_SETMASK, &ss, &saved_ss) >= 0); ++ + agent_pid = fork(); +- if (agent_pid < 0) ++ if (agent_pid < 0) { ++ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0); + return -errno; ++ } + + if (agent_pid != 0) { ++ assert_se(sigprocmask(SIG_SETMASK, &saved_ss, NULL) >= 0); + *pid = agent_pid; + return 0; + } +@@ -5149,6 +5170,12 @@ int fork_agent(pid_t *pid, const int exc + if (prctl(PR_SET_PDEATHSIG, SIGTERM) < 0) + _exit(EXIT_FAILURE); + ++ /* Make sure we actually can kill the agent, if we need to, in ++ * case somebody invoked us from a shell script that trapped ++ * SIGTERM or so... */ ++ reset_all_signal_handlers(); ++ reset_signal_mask(); ++ + /* Check whether our parent died before we were able + * to set the death signal */ + if (getppid() != parent_pid) +@@ -5161,6 +5188,8 @@ int fork_agent(pid_t *pid, const int exc + stderr_is_tty = isatty(STDERR_FILENO); + + if (!stdout_is_tty || !stderr_is_tty) { ++ int fd; ++ + /* Detach from stdout/stderr. and reopen + * /dev/tty for them. This is important to + * ensure that when systemctl is started via diff --git a/0003-keymap-Adjust-for-more-Samsung-900X4-series.patch b/0003-keymap-Adjust-for-more-Samsung-900X4-series.patch new file mode 100644 index 0000000..c9ab5e0 --- /dev/null +++ b/0003-keymap-Adjust-for-more-Samsung-900X4-series.patch @@ -0,0 +1,29 @@ +From e512e8a255ef29d5a8eb605f8849202ea3d3e4cb Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Wed, 27 Aug 2014 08:41:10 +0200 +Subject: [PATCH] keymap: Adjust for more Samsung 900X4 series + +Reportedly also applies to NP900X4B, so relax the match to apply to all models +of this series. + +https://launchpad.net/bugs/902332 +--- + hwdb/60-keyboard.hwdb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git hwdb/60-keyboard.hwdb hwdb/60-keyboard.hwdb +index ef0ebc5..0ffcb83 100644 +--- hwdb/60-keyboard.hwdb ++++ hwdb/60-keyboard.hwdb +@@ -939,7 +939,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr* + # Series 7 / 9 + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700G*:pvr* +-keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34][CDEFG]*:pvr* ++keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr* + keyboard:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*940X3G*:pvr* + KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings + KEYBOARD_KEY_a0=!mute # Fn+F6 mute +-- +1.7.9.2 + diff --git a/0003-sd-journal-properly-convert-object-size-on-big-endia.patch b/0003-sd-journal-properly-convert-object-size-on-big-endia.patch new file mode 100644 index 0000000..40e8d57 --- /dev/null +++ b/0003-sd-journal-properly-convert-object-size-on-big-endia.patch @@ -0,0 +1,39 @@ +From 57cd09acf2c63a414aa2131c00a2b3f600eb0133 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 23 Aug 2014 22:35:03 -0400 +Subject: [PATCH] sd-journal: properly convert object->size on big endian + +mmap code crashes when attempting to map an object of zero size. + +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758392 +https://bugs.freedesktop.org/show_bug.cgi?id=82894 +--- + src/journal/journal-file.h | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git src/journal/journal-file.h src/journal/journal-file.h +index 3d41682..da2ef3b 100644 +--- src/journal/journal-file.h ++++ src/journal/journal-file.h +@@ -214,14 +214,15 @@ static unsigned type_to_context(int type) { + + static inline int journal_file_object_keep(JournalFile *f, Object *o, uint64_t offset) { + unsigned context = type_to_context(o->object.type); ++ uint64_t s = le64toh(o->object.size); + + return mmap_cache_get(f->mmap, f->fd, f->prot, context, true, +- offset, o->object.size, &f->last_stat, NULL); ++ offset, s, &f->last_stat, NULL); + } + + static inline int journal_file_object_release(JournalFile *f, Object *o, uint64_t offset) { + unsigned context = type_to_context(o->object.type); ++ uint64_t s = le64toh(o->object.size); + +- return mmap_cache_release(f->mmap, f->fd, f->prot, context, +- offset, o->object.size); ++ return mmap_cache_release(f->mmap, f->fd, f->prot, context, offset, s); + } +-- +1.7.9.2 + diff --git a/0004-sd-journal-verify-that-object-start-with-the-field-n.patch b/0004-sd-journal-verify-that-object-start-with-the-field-n.patch new file mode 100644 index 0000000..e3ee663 --- /dev/null +++ b/0004-sd-journal-verify-that-object-start-with-the-field-n.patch @@ -0,0 +1,41 @@ +Based on 0f99f74a14ef193c1ebde687c5cc76e1d67b85ef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 26 Aug 2014 23:54:31 -0400 +Subject: [PATCH] sd-journal: verify that object start with the field name + +If the journal is corrupted, we might return an object that does +not start with the expected field name and/or is shorter than it +should. +--- + src/journal/sd-journal.c | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git src/journal/sd-journal.c src/journal/sd-journal.c +index 80ff8fe..693707c 100644 +--- src/journal/sd-journal.c ++++ src/journal/sd-journal.c +@@ -2571,6 +2571,21 @@ _public_ int sd_journal_enumerate_unique(sd_journal *j, const void **data, size_ + if (r < 0) + return r; + ++ /* Check if we have at least the field name and "=". */ ++ if (ol <= k) { ++ log_debug("%s:offset " OFSfmt ": object has size %zu, expected at least %zu", ++ j->unique_file->path, j->unique_offset, ++ ol, k + 1); ++ return -EBADMSG; ++ } ++ ++ if (memcmp(odata, j->unique_field, k) || ((const char*) odata)[k] != '=') { ++ log_debug("%s:offset " OFSfmt ": object does not start with \"%s=\"", ++ j->unique_file->path, j->unique_offset, ++ j->unique_field); ++ return -EBADMSG; ++ } ++ + /* OK, now let's see if we already returned this data + * object by checking if it exists in the earlier + * traversed files. */ +-- +1.7.9.2 + diff --git a/1064-udev-hwdb-do-not-look-at-usb_device-parents.patch b/1064-udev-hwdb-do-not-look-at-usb_device-parents.patch new file mode 100644 index 0000000..07755c0 --- /dev/null +++ b/1064-udev-hwdb-do-not-look-at-usb_device-parents.patch @@ -0,0 +1,63 @@ +From 77cf759ea05bea476cdcb8d0dcd04c4e6fb3b2ff Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 26 Aug 2014 18:27:36 +0200 +Subject: [PATCH] udev: hwdb - do not look at "usb_device" parents + +Based on a patch from Simon McVittie . + +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758050 +--- + src/udev/udev-builtin-hwdb.c | 22 ++++++++++++++-------- + 1 file changed, 14 insertions(+), 8 deletions(-) + +diff --git src/udev/udev-builtin-hwdb.c src/udev/udev-builtin-hwdb.c +index cac97e7..695a31a 100644 +--- src/udev/udev-builtin-hwdb.c ++++ src/udev/udev-builtin-hwdb.c +@@ -88,9 +88,10 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device + const char *filter, bool test) { + struct udev_device *d; + char s[16]; +- int n = 0; ++ bool last = false; ++ int r = 0; + +- for (d = srcdev; d; d = udev_device_get_parent(d)) { ++ for (d = srcdev; d && !last; d = udev_device_get_parent(d)) { + const char *dsubsys; + const char *modalias = NULL; + +@@ -104,19 +105,24 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device + + modalias = udev_device_get_property_value(d, "MODALIAS"); + +- /* the usb_device does not have a modalias, compose one */ +- if (!modalias && streq(dsubsys, "usb")) +- modalias = modalias_usb(d, s, sizeof(s)); ++ if (streq(dsubsys, "usb") && streq_ptr(udev_device_get_devtype(d), "usb_device")) { ++ /* if the usb_device does not have a modalias, compose one */ ++ if (!modalias) ++ modalias = modalias_usb(d, s, sizeof(s)); ++ ++ /* avoid looking at any parent device, they are usually just a USB hub */ ++ last = true; ++ } + + if (!modalias) + continue; + +- n = udev_builtin_hwdb_lookup(dev, prefix, modalias, filter, test); +- if (n > 0) ++ r = udev_builtin_hwdb_lookup(dev, prefix, modalias, filter, test); ++ if (r > 0) + break; + } + +- return n; ++ return r; + } + + static int builtin_hwdb(struct udev_device *dev, int argc, char *argv[], bool test) { +-- +1.7.9.2 + diff --git a/systemd-mini.changes b/systemd-mini.changes index 6a8f2c7..28287a5 100644 --- a/systemd-mini.changes +++ b/systemd-mini.changes @@ -1,3 +1,31 @@ +------------------------------------------------------------------- +Thu Aug 28 10:07:10 UTC 2014 - werner@suse.de + +- Add upstream patches + 0001-login-fix-memory-leak-on-DropController.patch + 0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch + 0003-sd-journal-properly-convert-object-size-on-big-endia.patch + 0004-sd-journal-verify-that-object-start-with-the-field-n.patch +- Add upstream patch + 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch + to avoid that hwdb ID's for unrecognised USB device are taken + from the USB hub. + +------------------------------------------------------------------- +Wed Aug 27 16:01:17 UTC 2014 - werner@suse.de + +- Add upstream patches + 0001-systemctl-Correct-error-message-printed-when-bus_pro.patch + 0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch + 0003-keymap-Adjust-for-more-Samsung-900X4-series.patch + +------------------------------------------------------------------- +Wed Aug 27 12:52:09 UTC 2014 - werner@suse.de + +- Add patch use-rndaddentropy-ioctl-to-load-random-seed.patch to + use RNDADDENTROPY ioctl to load random-seed and to increase + entropy count as well (bnc#892096) + ------------------------------------------------------------------- Tue Aug 26 12:13:42 UTC 2014 - werner@suse.de diff --git a/systemd-mini.spec b/systemd-mini.spec index 887777c..991e05e 100644 --- a/systemd-mini.spec +++ b/systemd-mini.spec @@ -798,6 +798,22 @@ Patch383: 0003-keymap-Fix-HP-Pavillon-DV7.patch Patch384: 0004-hwdb-update-format-description-and-document-reloadin.patch # PATCH-FIX-UPSTREAM added at 2014/08/25 Patch385: 0008-hwdb-update.patch +# PATCH-FIX-SUSE Use RNDADDENTROPY ioctl to load random-seed and to increase entropy count as well (bnc#892096) +Patch386: use-rndaddentropy-ioctl-to-load-random-seed.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch387: 0001-systemctl-Correct-error-message-printed-when-bus_pro.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch388: 0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch389: 0003-keymap-Adjust-for-more-Samsung-900X4-series.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch390: 0001-login-fix-memory-leak-on-DropController.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch391: 0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch392: 0003-sd-journal-properly-convert-object-size-on-big-endia.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch393: 0004-sd-journal-verify-that-object-start-with-the-field-n.patch # UDEV PATCHES # ============ @@ -931,6 +947,8 @@ Patch1061: 1061-rules-allow-systemd-to-manage-loop-device-partitions.patch Patch1062: 1062-rules-set-default-permissions-for-GenWQE-devices.patch # PATCH-FIX-UPSTREAM 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patch Patch1063: 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patch +# PATCH-FIX-UPSTREAM 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch +Patch1064: 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -1475,6 +1493,14 @@ cp %{SOURCE7} m4/ %patch383 -p0 %patch384 -p0 %patch385 -p0 +%patch386 -p1 +%patch387 -p0 +%patch388 -p0 +%patch389 -p0 +%patch390 -p0 +%patch391 -p0 +%patch392 -p0 +%patch393 -p0 # udev patches %patch1001 -p1 @@ -1561,6 +1587,7 @@ cp %{SOURCE7} m4/ %patch1061 -p0 %patch1062 -p1 %patch1063 -p0 +%patch1064 -p0 # remove patch backups find -name '*.orig' -exec rm -f '{}' \+ diff --git a/systemd.changes b/systemd.changes index 6a8f2c7..28287a5 100644 --- a/systemd.changes +++ b/systemd.changes @@ -1,3 +1,31 @@ +------------------------------------------------------------------- +Thu Aug 28 10:07:10 UTC 2014 - werner@suse.de + +- Add upstream patches + 0001-login-fix-memory-leak-on-DropController.patch + 0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch + 0003-sd-journal-properly-convert-object-size-on-big-endia.patch + 0004-sd-journal-verify-that-object-start-with-the-field-n.patch +- Add upstream patch + 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch + to avoid that hwdb ID's for unrecognised USB device are taken + from the USB hub. + +------------------------------------------------------------------- +Wed Aug 27 16:01:17 UTC 2014 - werner@suse.de + +- Add upstream patches + 0001-systemctl-Correct-error-message-printed-when-bus_pro.patch + 0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch + 0003-keymap-Adjust-for-more-Samsung-900X4-series.patch + +------------------------------------------------------------------- +Wed Aug 27 12:52:09 UTC 2014 - werner@suse.de + +- Add patch use-rndaddentropy-ioctl-to-load-random-seed.patch to + use RNDADDENTROPY ioctl to load random-seed and to increase + entropy count as well (bnc#892096) + ------------------------------------------------------------------- Tue Aug 26 12:13:42 UTC 2014 - werner@suse.de diff --git a/systemd.spec b/systemd.spec index cfdfe49..479cc11 100644 --- a/systemd.spec +++ b/systemd.spec @@ -793,6 +793,22 @@ Patch383: 0003-keymap-Fix-HP-Pavillon-DV7.patch Patch384: 0004-hwdb-update-format-description-and-document-reloadin.patch # PATCH-FIX-UPSTREAM added at 2014/08/25 Patch385: 0008-hwdb-update.patch +# PATCH-FIX-SUSE Use RNDADDENTROPY ioctl to load random-seed and to increase entropy count as well (bnc#892096) +Patch386: use-rndaddentropy-ioctl-to-load-random-seed.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch387: 0001-systemctl-Correct-error-message-printed-when-bus_pro.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch388: 0002-units-order-systemd-fsck-.service-after-local-fs-pre.patch +# PATCH-FIX-UPSTREAM added at 2014/08/27 +Patch389: 0003-keymap-Adjust-for-more-Samsung-900X4-series.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch390: 0001-login-fix-memory-leak-on-DropController.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch391: 0002-util-fix-minimal-race-where-we-might-miss-SIGTERMs-w.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch392: 0003-sd-journal-properly-convert-object-size-on-big-endia.patch +# PATCH-FIX-UPSTREAM added at 2014/08/28 +Patch393: 0004-sd-journal-verify-that-object-start-with-the-field-n.patch # UDEV PATCHES # ============ @@ -926,6 +942,8 @@ Patch1061: 1061-rules-allow-systemd-to-manage-loop-device-partitions.patch Patch1062: 1062-rules-set-default-permissions-for-GenWQE-devices.patch # PATCH-FIX-UPSTREAM 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patch Patch1063: 1063-udev-path_id-suppress-ID_PATH-for-devices-with-an-un.patch +# PATCH-FIX-UPSTREAM 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch +Patch1064: 1064-udev-hwdb-do-not-look-at-usb_device-parents.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -1470,6 +1488,14 @@ cp %{SOURCE7} m4/ %patch383 -p0 %patch384 -p0 %patch385 -p0 +%patch386 -p1 +%patch387 -p0 +%patch388 -p0 +%patch389 -p0 +%patch390 -p0 +%patch391 -p0 +%patch392 -p0 +%patch393 -p0 # udev patches %patch1001 -p1 @@ -1556,6 +1582,7 @@ cp %{SOURCE7} m4/ %patch1061 -p0 %patch1062 -p1 %patch1063 -p0 +%patch1064 -p0 # remove patch backups find -name '*.orig' -exec rm -f '{}' \+ diff --git a/use-rndaddentropy-ioctl-to-load-random-seed.patch b/use-rndaddentropy-ioctl-to-load-random-seed.patch new file mode 100644 index 0000000..3cbe548 --- /dev/null +++ b/use-rndaddentropy-ioctl-to-load-random-seed.patch @@ -0,0 +1,121 @@ +Simply writing /var/lib/systemd/random-seed back to /dev/(u)random does not +increase the entropy bit count. Therefore use the RNDADDENTROPY ioctl to +write back the bytes and increase the entropy bit counter. + +Related to bnc#892096 + +--- + systemd-210/src/random-seed/random-seed.c | 66 +++++++++++++++++++++++++++--- + 1 file changed, 61 insertions(+), 5 deletions(-) + +--- systemd-210/src/random-seed/random-seed.c ++++ systemd-210/src/random-seed/random-seed.c 2014-08-27 11:58:59.022526580 +0000 +@@ -22,7 +22,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + + #include "log.h" +@@ -32,8 +34,9 @@ + #define POOL_SIZE_MIN 512 + + int main(int argc, char *argv[]) { +- _cleanup_close_ int seed_fd = -1, random_fd = -1; ++ _cleanup_close_ int seed_fd = -1, random_fd = -1, entropy_fd = -1; + _cleanup_free_ void* buf = NULL; ++ size_t entropy_count = 0; + size_t buf_size = 0; + ssize_t k; + int r; +@@ -82,6 +85,23 @@ int main(int argc, char *argv[]) { + + if (streq(argv[1], "load")) { + ++ entropy_fd = open(RANDOM_SEED_DIR "entropy_count", O_RDONLY|O_CLOEXEC|O_NOCTTY, 0600); ++ if (entropy_fd < 0) { ++ entropy_count = 0; ++ if (errno != ENOENT) { ++ log_error("Failed to open " RANDOM_SEED "/entropy_count: %m"); ++ r = -errno; ++ goto finish; ++ } ++ } else { ++ r = read(entropy_fd, &entropy_count, sizeof(entropy_count)); ++ if (r < 0) { ++ log_error("Failed to read entropy count file: %m"); ++ r = -errno; ++ goto finish; ++ } ++ } ++ + seed_fd = open(RANDOM_SEED, O_RDWR|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600); + if (seed_fd < 0) { + seed_fd = open(RANDOM_SEED, O_RDONLY|O_CLOEXEC|O_NOCTTY); +@@ -113,16 +133,37 @@ int main(int argc, char *argv[]) { + } else { + lseek(seed_fd, 0, SEEK_SET); + +- k = loop_write(random_fd, buf, (size_t) k, false); +- if (k <= 0) { +- log_error("Failed to write seed to /dev/urandom: %s", r < 0 ? strerror(-r) : "short write"); ++ if (entropy_count && (size_t) k == buf_size) { ++ struct rand_pool_info entropy = { ++ .entropy_count = entropy_count, ++ .buf_size = buf_size, ++ }; ++ entropy.buf[0] = ((__u32*)buf)[0]; ++ r = ioctl(random_fd, RNDADDENTROPY, &entropy); ++ if (r < 0) { ++ log_error("Failed to write seed to /dev/urandom: %m"); ++ r = -errno; ++ } ++ } else { ++ k = loop_write(random_fd, buf, (size_t) k, false); ++ if (k <= 0) { ++ log_error("Failed to write seed to /dev/urandom: %s", r < 0 ? strerror(-r) : "short write"); + +- r = k == 0 ? -EIO : (int) k; ++ r = k == 0 ? -EIO : (int) k; ++ } + } + } + + } else if (streq(argv[1], "save")) { + ++ /* Read available entropy count, if possible */ ++ f = fopen("/proc/sys/kernel/random/entropy_avail", "re"); ++ if (f) { ++ if (fscanf(f, "%zu", &entropy_count) < 0) ++ entropy_count = 0; ++ fclose(f); ++ } ++ + seed_fd = open(RANDOM_SEED, O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600); + if (seed_fd < 0) { + log_error("Failed to open " RANDOM_SEED ": %m"); +@@ -137,6 +178,21 @@ int main(int argc, char *argv[]) { + goto finish; + } + ++ if (entropy_count) { ++ entropy_fd = open(RANDOM_SEED_DIR "entropy_count", O_WRONLY|O_CLOEXEC|O_NOCTTY|O_CREAT, 0600); ++ if (seed_fd < 0) { ++ log_error("Failed to open " RANDOM_SEED_DIR "entropy_count: %m"); ++ r = -errno; ++ goto finish; ++ } ++ r = write(entropy_fd, &entropy_count, sizeof(entropy_count)); ++ if (r < 0) { ++ log_error("Failed to write entropy count file: %m"); ++ r = -errno; ++ goto finish; ++ } ++ } ++ + } else { + log_error("Unknown verb %s.", argv[1]); + r = -EINVAL;