From 436654a8a5b690be43288e46ba4b9acdeff9638b Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Jun 10 2015 19:08:55 +0000 Subject: Patches for selinux issue and other problems --- diff --git a/0001-NEWS-fix-date.patch b/0001-NEWS-fix-date.patch new file mode 100644 index 0000000..04c8dc0 --- /dev/null +++ b/0001-NEWS-fix-date.patch @@ -0,0 +1,24 @@ +From 39315f9f8dd5a16b4561c5efffc6114c75835011 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 22 May 2015 01:37:16 +0200 +Subject: [PATCH] NEWS: fix date + +Ah, bummer, it's tagged an now I realize I didn't fix the date. Let's do +so now, post-commit. +--- + NEWS | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/NEWS b/NEWS +index 7a4621cc5d..f72f502129 100644 +--- a/NEWS ++++ b/NEWS +@@ -227,7 +227,7 @@ CHANGES WITH 220: + Gundersen, Torstein Husebø, Umut Tezduyar Lindskog, Will + Woods, Zachary Cook, Zbigniew Jędrzejewski-Szmek + +- -- Berlin, 2015-05-?? ++ -- Berlin, 2015-05-22 + + CHANGES WITH 219: + diff --git a/0001-udevd-event-fix-event-queue-in-daemenozied-mode.patch b/0001-udevd-event-fix-event-queue-in-daemenozied-mode.patch deleted file mode 100644 index 7f8a6a0..0000000 --- a/0001-udevd-event-fix-event-queue-in-daemenozied-mode.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 040e689654ef08c63ab93bf0875865398e8d9c91 Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Sun, 24 May 2015 15:20:36 +0200 -Subject: [PATCH] udevd: event - fix event queue in daemenozied mode -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -We would enforce that events could only be added to the queue from the -main process, but that brake in daemonized mode. Relax the restriction -to only allow one process to add events to the queue. - -Reported by Mantas Mikulėnas. ---- - src/udev/udevd.c | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/udev/udevd.c b/src/udev/udevd.c -index 4a44b03..b33a262 100644 ---- a/src/udev/udevd.c -+++ b/src/udev/udevd.c -@@ -564,7 +564,10 @@ static int event_queue_insert(Manager *manager, struct udev_device *dev) { - assert(manager); - assert(dev); - -- /* only the main process can add events to the queue */ -+ /* only one process can add events to the queue */ -+ if (manager->pid == 0) -+ manager->pid = getpid(); -+ - assert(manager->pid == getpid()); - - event = new0(struct event, 1); -@@ -1300,8 +1303,6 @@ static int manager_new(Manager **ret) { - if (!manager) - return log_oom(); - -- manager->pid = getpid(); -- - manager->fd_ep = -1; - manager->fd_ctrl = -1; - manager->fd_uevent = -1; --- -2.3.1 - diff --git a/0001-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch b/0001-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch deleted file mode 100644 index 88e4a1e..0000000 --- a/0001-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 86c3bece38bcf55da6387d20c6f01da9ad0284dc Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Wed, 27 May 2015 18:39:36 +0200 -Subject: [PATCH] udevd: fix SIGCHLD handling in --daemon mode - -We were listening for SIGCHLD in the wrong process. ---- - src/udev/udevd.c | 33 ++++++++++++++++++++++----------- - 1 file changed, 22 insertions(+), 11 deletions(-) - -diff --git a/src/udev/udevd.c b/src/udev/udevd.c -index 87e677e..299fda8 100644 ---- a/src/udev/udevd.c -+++ b/src/udev/udevd.c -@@ -1288,13 +1288,6 @@ static int parse_argv(int argc, char *argv[]) { - - static int manager_new(Manager **ret) { - _cleanup_(manager_freep) Manager *manager = NULL; -- struct epoll_event ep_ctrl = { .events = EPOLLIN }; -- struct epoll_event ep_inotify = { .events = EPOLLIN }; -- struct epoll_event ep_signal = { .events = EPOLLIN }; -- struct epoll_event ep_netlink = { .events = EPOLLIN }; -- struct epoll_event ep_worker = { .events = EPOLLIN }; -- sigset_t mask; -- int r, one = 1; - - assert(ret); - -@@ -1323,6 +1316,23 @@ static int manager_new(Manager **ret) { - udev_list_node_init(&manager->events); - udev_list_init(manager->udev, &manager->properties, true); - -+ *ret = manager; -+ manager = NULL; -+ -+ return 0; -+} -+ -+static int manager_listen(Manager *manager) { -+ struct epoll_event ep_ctrl = { .events = EPOLLIN }; -+ struct epoll_event ep_inotify = { .events = EPOLLIN }; -+ struct epoll_event ep_signal = { .events = EPOLLIN }; -+ struct epoll_event ep_netlink = { .events = EPOLLIN }; -+ struct epoll_event ep_worker = { .events = EPOLLIN }; -+ sigset_t mask; -+ int r, one = 1; -+ -+ assert(manager); -+ - r = systemd_fds(&manager->fd_ctrl, &manager->fd_uevent); - if (r >= 0) { - /* get control and netlink socket from systemd */ -@@ -1404,10 +1414,7 @@ static int manager_new(Manager **ret) { - epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_worker, &ep_worker) < 0) - return log_error_errno(errno, "fail to add fds to epoll: %m"); - -- *ret = manager; -- manager = NULL; -- -- return 1; -+ return 0; - } - - int main(int argc, char *argv[]) { -@@ -1518,6 +1525,10 @@ int main(int argc, char *argv[]) { - } else - sd_notify(1, "READY=1"); - -+ r = manager_listen(manager); -+ if (r < 0) -+ return log_error_errno(r, "failed to set up fds and listen for events: %m"); -+ - for (;;) { - static usec_t last_usec; - struct epoll_event ev[8]; --- -2.3.1 - diff --git a/0002-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch b/0002-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch new file mode 100644 index 0000000..0fbb2fc --- /dev/null +++ b/0002-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch @@ -0,0 +1,56 @@ +From 4db1a8d691a85aa1f75b7eeb283246f488e47a3b Mon Sep 17 00:00:00 2001 +From: "Jason S. McMullan" +Date: Fri, 22 May 2015 20:30:01 +0200 +Subject: [PATCH] udev/net_id: Only read the first 64 bytes of PCI config space + +The original code used fread(), which on some libc implementions +(ie glibc 2.17) would pre-read a full 4K (PAGE_SIZE) of the +PCI config space, when only 64 bytes were requested. + +I have recently come across PCIe hardware which responds with +Completion Timeouts when accesses above 256 bytes are attempted. + +This can cause server systems with GHES/AEPI support to cause +and immediate kernel panic due to the failed PCI transaction. + +This change replaces the buffered fread() with an explict +unbuffered read() of 64 bytes, which corrects this issue by +only reading the guaranteed first 64 bytes of PCIe config space. + +(cherry picked from commit 0454229c100a2113ba82df55703436d6cb2c492b) +--- + src/udev/udev-builtin-net_id.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 78aef206b2..448920507a 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -91,6 +91,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -166,15 +167,15 @@ static int dev_pci_onboard(struct udev_device *dev, struct netnames *names) { + + /* read the 256 bytes PCI configuration space to check the multi-function bit */ + static bool is_pci_multifunction(struct udev_device *dev) { +- _cleanup_fclose_ FILE *f = NULL; ++ _cleanup_close_ int fd = -1; + const char *filename; + uint8_t config[64]; + + filename = strjoina(udev_device_get_syspath(dev), "/config"); +- f = fopen(filename, "re"); +- if (!f) ++ fd = open(filename, O_RDONLY | O_CLOEXEC); ++ if (fd < 0) + return false; +- if (fread(&config, sizeof(config), 1, f) != 1) ++ if (read(fd, &config, sizeof(config)) != sizeof(config)) + return false; + + /* bit 0-6 header type, bit 7 multi/single function device */ diff --git a/0003-bootctl-ferror-must-be-called-before-FILE-is-closed.patch b/0003-bootctl-ferror-must-be-called-before-FILE-is-closed.patch new file mode 100644 index 0000000..c22043c --- /dev/null +++ b/0003-bootctl-ferror-must-be-called-before-FILE-is-closed.patch @@ -0,0 +1,58 @@ +From 0628a6f0ffc097c0061d7d03e39c912eba91d1e3 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Fri, 22 May 2015 23:40:19 +0200 +Subject: [PATCH] bootctl: ferror must be called before FILE is closed + +Otherwise it will not show any error stored + +(cherry picked from commit 717442507b4b11aa1d76810d7b12b15948c7a250) +--- + src/boot/bootctl.c | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c +index 3a007578dc..ba534b172e 100644 +--- a/src/boot/bootctl.c ++++ b/src/boot/bootctl.c +@@ -884,7 +884,7 @@ static int install_loader_config(const char *esp_path) { + char *p; + char line[64]; + char *machine = NULL; +- FILE *f; ++ _cleanup_fclose_ FILE *f = NULL, *g = NULL; + + f = fopen("/etc/machine-id", "re"); + if (!f) +@@ -899,18 +899,16 @@ static int install_loader_config(const char *esp_path) { + if (strlen(line) == 32) + machine = line; + } +- fclose(f); + + if (!machine) + return -ESRCH; + + p = strjoina(esp_path, "/loader/loader.conf"); +- f = fopen(p, "wxe"); +- if (f) { +- fprintf(f, "#timeout 3\n"); +- fprintf(f, "default %s-*\n", machine); +- fclose(f); +- if (ferror(f)) ++ g = fopen(p, "wxe"); ++ if (g) { ++ fprintf(g, "#timeout 3\n"); ++ fprintf(g, "default %s-*\n", machine); ++ if (ferror(g)) + return log_error_errno(EIO, "Failed to write \"%s\": %m", p); + } + +@@ -926,7 +924,7 @@ static int help(void) { + " --path=PATH Path to the EFI System Partition (ESP)\n" + " --no-variables Don't touch EFI variables\n" + "\n" +- "Comands:\n" ++ "Commands:\n" + " status Show status of installed systemd-boot and EFI variables\n" + " install Install systemd-boot to the ESP and EFI variables\n" + " update Update systemd-boot in the ESP and EFI variables\n" diff --git a/0004-cryptsetup-craft-a-unique-ID-with-the-source-device.patch b/0004-cryptsetup-craft-a-unique-ID-with-the-source-device.patch deleted file mode 100644 index 1be76c0..0000000 --- a/0004-cryptsetup-craft-a-unique-ID-with-the-source-device.patch +++ /dev/null @@ -1,166 +0,0 @@ -From f6373b7dd7a2b8a8e38c289f289728d289382f29 Mon Sep 17 00:00:00 2001 -From: Harald Hoyer -Date: Mon, 1 Jun 2015 17:26:27 +0200 -Subject: [PATCH 4/4] cryptsetup: craft a unique ID with the source device - -If cryptsetup is called with a source device as argv[3], then craft the -ID for the password agent with a unique device path. - -If possible "/dev/block/:" is used, otherwise the original -argv[3] is used. - -This enables password agents like petera [1] to provide a password -according to the source device. The original ID did not carry enough -information and was more targeted for a human readable string, which -is specified in the "Message" field anyway. - -With this patch the ID of the ask.XXX ini file looks like this: -ID=cryptsetup:/dev/block/: - -[1] https://github.com/npmccallum/petera ---- - src/cryptsetup/cryptsetup.c | 90 +++++++++++++++++++++++++++++---------------- - 1 file changed, 58 insertions(+), 32 deletions(-) - -diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c -index a5018f1..5c6c7c0 100644 ---- a/src/cryptsetup/cryptsetup.c -+++ b/src/cryptsetup/cryptsetup.c -@@ -238,6 +238,23 @@ static void log_glue(int level, const char *msg, void *usrptr) { - log_debug("%s", msg); - } - -+static int disk_major_minor(const char *path, char **ret) { -+ struct stat st; -+ -+ assert(path); -+ -+ if (stat(path, &st) < 0) -+ return -errno; -+ -+ if (!S_ISBLK(st.st_mode)) -+ return -EINVAL; -+ -+ if (asprintf(ret, "/dev/block/%d:%d", major(st.st_rdev), minor(st.st_rdev)) < 0) -+ return -errno; -+ -+ return 0; -+} -+ - static char* disk_description(const char *path) { - - static const char name_fields[] = -@@ -295,20 +312,55 @@ static char *disk_mount_point(const char *label) { - return NULL; - } - --static int get_password(const char *name, usec_t until, bool accept_cached, char ***passwords) { -- int r; -+static int get_password(const char *vol, const char *src, usec_t until, bool accept_cached, char ***passwords) { -+ int r = 0; - char **p; - _cleanup_free_ char *text = NULL; - _cleanup_free_ char *escaped_name = NULL; - char *id; -+ const char *name = NULL; -+ _cleanup_free_ char *description = NULL, *name_buffer = NULL, -+ *mount_point = NULL, *maj_min = NULL; - -- assert(name); -+ assert(vol); -+ assert(src); - assert(passwords); - -+ description = disk_description(src); -+ mount_point = disk_mount_point(vol); -+ -+ if (description && streq(vol, description)) { -+ /* If the description string is simply the -+ * volume name, then let's not show this -+ * twice */ -+ free(description); -+ description = NULL; -+ } -+ -+ if (mount_point && description) -+ r = asprintf(&name_buffer, "%s (%s) on %s", description, vol, mount_point); -+ else if (mount_point) -+ r = asprintf(&name_buffer, "%s on %s", vol, mount_point); -+ else if (description) -+ r = asprintf(&name_buffer, "%s (%s)", description, vol); -+ -+ if (r < 0) -+ return log_oom(); -+ -+ name = name_buffer ? name_buffer : vol; -+ - if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0) - return log_oom(); - -- escaped_name = cescape(name); -+ if (src) -+ (void) disk_major_minor(src, &maj_min); -+ -+ if (maj_min) { -+ escaped_name = maj_min; -+ maj_min = NULL; -+ } else -+ escaped_name = cescape(name); -+ - if (!escaped_name) - return log_oom(); - -@@ -552,8 +604,7 @@ int main(int argc, char *argv[]) { - unsigned tries; - usec_t until; - crypt_status_info status; -- const char *key_file = NULL, *name = NULL; -- _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL; -+ const char *key_file = NULL; - - /* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */ - -@@ -581,31 +632,6 @@ int main(int argc, char *argv[]) { - /* A delicious drop of snake oil */ - mlockall(MCL_FUTURE); - -- description = disk_description(argv[3]); -- mount_point = disk_mount_point(argv[2]); -- -- if (description && streq(argv[2], description)) { -- /* If the description string is simply the -- * volume name, then let's not show this -- * twice */ -- free(description); -- description = NULL; -- } -- -- k = 0; -- if (mount_point && description) -- k = asprintf(&name_buffer, "%s (%s) on %s", description, argv[2], mount_point); -- else if (mount_point) -- k = asprintf(&name_buffer, "%s on %s", argv[2], mount_point); -- else if (description) -- k = asprintf(&name_buffer, "%s (%s)", description, argv[2]); -- -- if (k < 0) { -- log_oom(); -- goto finish; -- } -- name = name_buffer ? name_buffer : argv[2]; -- - if (arg_header) { - log_debug("LUKS header: %s", arg_header); - k = crypt_init(&cd, arg_header); -@@ -652,7 +678,7 @@ int main(int argc, char *argv[]) { - _cleanup_strv_free_ char **passwords = NULL; - - if (!key_file) { -- k = get_password(name, until, tries == 0 && !arg_verify, &passwords); -+ k = get_password(argv[2], argv[3], until, tries == 0 && !arg_verify, &passwords); - if (k == -EAGAIN) - continue; - else if (k < 0) --- -2.4.1 - diff --git a/0004-fix-typos-in-systemd-nspawn-man-page.patch b/0004-fix-typos-in-systemd-nspawn-man-page.patch new file mode 100644 index 0000000..775a701 --- /dev/null +++ b/0004-fix-typos-in-systemd-nspawn-man-page.patch @@ -0,0 +1,32 @@ +From cf118c70b6fa165db6d4eeccac3c8b88d9170d2f Mon Sep 17 00:00:00 2001 +From: Jonathan Boulle +Date: Fri, 22 May 2015 20:11:01 -0700 +Subject: [PATCH] fix typos in systemd-nspawn man page + +(cherry picked from commit 7c918141edad0063a82411e0f9637e72a8aba223) +--- + man/systemd-nspawn.xml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml +index 6a5db86cec..06285edc0b 100644 +--- a/man/systemd-nspawn.xml ++++ b/man/systemd-nspawn.xml +@@ -330,7 +330,7 @@ + first host UID to assign to the container, the second + parameter specifies the number of host UIDs to assign to the + container. If the second parameter is omitted, 65536 UIDs are +- assigned. If the first parameter is also ommitted (and hence ++ assigned. If the first parameter is also omitted (and hence + no parameter passed at all), the first UID assigned to the + container is read from the owner of the root directory of the + container's directory tree. By default no user namespacing is +@@ -454,7 +454,7 @@ + container port number in the range from 1 to 65535. The + protocol specifier and its separating colon may be omitted, in + which case tcp is assumed. The container +- port number and its colon may be ommitted, in which case the ++ port number and its colon may be omitted, in which case the + same port as the host port is implied. This option is only + supported if private networking is used, such as + or diff --git a/0005-bootctl-fix-an-error-check.patch b/0005-bootctl-fix-an-error-check.patch new file mode 100644 index 0000000..47ca3b7 --- /dev/null +++ b/0005-bootctl-fix-an-error-check.patch @@ -0,0 +1,23 @@ +From 6f1181c3d69c1bd38df5c89ca844686fbd4d1218 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Sat, 23 May 2015 13:02:56 +0200 +Subject: [PATCH] bootctl: fix an error check + +(cherry picked from commit dd114e116bf73a616c95a5b9e400199eb3bfa4c7) +--- + 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 ba534b172e..1e65597acf 100644 +--- a/src/boot/bootctl.c ++++ b/src/boot/bootctl.c +@@ -805,7 +805,7 @@ static int remove_boot_efi(const char *esp_path) { + continue; + + fd = openat(dirfd(d), de->d_name, O_RDONLY|O_CLOEXEC); +- if (r < 0) ++ if (fd < 0) + return log_error_errno(errno, "Failed to open \"%s/%s\" for reading: %m", p, de->d_name); + + r = get_file_version(fd, &v); diff --git a/0005-rules-fix-typo-in-block-watch-rule.patch b/0005-rules-fix-typo-in-block-watch-rule.patch deleted file mode 100644 index a399782..0000000 --- a/0005-rules-fix-typo-in-block-watch-rule.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 10c7cf9e109f6b59159e439774b5be5fd1faa24e Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Fri, 29 May 2015 19:59:24 +0200 -Subject: [PATCH] rules: fix typo in block watch rule - -The intention was to turn this rule from using a blacklist to a whitelist, but -there was a stray '!'. ---- - rules/60-block.rules | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/rules/60-block.rules b/rules/60-block.rules -index de41499..cfd5010 100644 ---- a/rules/60-block.rules -+++ b/rules/60-block.rules -@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ - ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" - - # watch metadata changes, caused by tools closing the device node which was opened for writing --ACTION=="add", SUBSYSTEM=="block", KERNEL!="loop*|nvme*|sd*|vd*", OPTIONS+="watch" -+ACTION=="add", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" diff --git a/0006-rules-restore-block-watch-after-CHANGE-events.patch b/0006-rules-restore-block-watch-after-CHANGE-events.patch deleted file mode 100644 index ce496a0..0000000 --- a/0006-rules-restore-block-watch-after-CHANGE-events.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 7a41b5a87167c3628d702d5f9db0cba1df4eff2c Mon Sep 17 00:00:00 2001 -From: Tom Gundersen -Date: Fri, 29 May 2015 20:55:39 +0200 -Subject: [PATCH] rules: restore block watch after CHANGE events - -When processing an event, the watch is disabled, make sure it is restorted after -a CHANGE event has been processed. ---- - rules/60-block.rules | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/rules/60-block.rules b/rules/60-block.rules -index cfd5010..a69d648 100644 ---- a/rules/60-block.rules -+++ b/rules/60-block.rules -@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ - ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" - - # watch metadata changes, caused by tools closing the device node which was opened for writing --ACTION=="add", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" -+ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" diff --git a/0006-udevd-event-fix-event-queue-in-daemenozied-mode.patch b/0006-udevd-event-fix-event-queue-in-daemenozied-mode.patch new file mode 100644 index 0000000..37511d7 --- /dev/null +++ b/0006-udevd-event-fix-event-queue-in-daemenozied-mode.patch @@ -0,0 +1,44 @@ +From 8bfef09df8e1011c6f413822f4455d084b30ba15 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Sun, 24 May 2015 15:20:36 +0200 +Subject: [PATCH] udevd: event - fix event queue in daemenozied mode +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We would enforce that events could only be added to the queue from the +main process, but that brake in daemonized mode. Relax the restriction +to only allow one process to add events to the queue. + +Reported by Mantas Mikulėnas. + +(cherry picked from commit 040e689654ef08c63ab93bf0875865398e8d9c91) +--- + src/udev/udevd.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index afd4640ad1..2a9a429e66 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -564,7 +564,10 @@ static int event_queue_insert(Manager *manager, struct udev_device *dev) { + assert(manager); + assert(dev); + +- /* only the main process can add events to the queue */ ++ /* only one process can add events to the queue */ ++ if (manager->pid == 0) ++ manager->pid = getpid(); ++ + assert(manager->pid == getpid()); + + event = new0(struct event, 1); +@@ -1300,8 +1303,6 @@ static int manager_new(Manager **ret) { + if (!manager) + return log_oom(); + +- manager->pid = getpid(); +- + manager->fd_ep = -1; + manager->fd_ctrl = -1; + manager->fd_uevent = -1; diff --git a/0007-nspawn-be-verbose-about-interface-names.patch b/0007-nspawn-be-verbose-about-interface-names.patch new file mode 100644 index 0000000..6ac4a73 --- /dev/null +++ b/0007-nspawn-be-verbose-about-interface-names.patch @@ -0,0 +1,32 @@ +From 3f712cd14c3af1ba2d177f5aa72ee63df9a41d0f Mon Sep 17 00:00:00 2001 +From: Umut Tezduyar Lindskog +Date: Fri, 22 May 2015 16:02:09 +0200 +Subject: [PATCH] nspawn: be verbose about interface names + +Allowed interface name is relatively small. Lets not make +users go in to the source code to figure out what happened. + +--machine=debian-tree conflicts with +--machine=debian-tree2 + +ex: Failed to add new veth \ + interfaces (host0, vb-debian-tree): File exists + +(cherry picked from commit 637aa8a36ce21e0c83466d9b91ee1bfad2404d1c) +--- + src/nspawn/nspawn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 500936387f..646edea700 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2627,7 +2627,7 @@ static int setup_veth(pid_t pid, char iface_name[IFNAMSIZ], int *ifi) { + + r = sd_rtnl_call(rtnl, m, 0, NULL); + if (r < 0) +- return log_error_errno(r, "Failed to add new veth interfaces: %m"); ++ return log_error_errno(r, "Failed to add new veth interfaces (host0, %s): %m", iface_name); + + i = (int) if_nametoindex(iface_name); + if (i <= 0) diff --git a/0008-shared-generator-correct-path-to-systemd-fsck.patch b/0008-shared-generator-correct-path-to-systemd-fsck.patch new file mode 100644 index 0000000..9bec37f --- /dev/null +++ b/0008-shared-generator-correct-path-to-systemd-fsck.patch @@ -0,0 +1,41 @@ +From 52125df42e5c9f207ccb4455593e2897bed6fbd6 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Sun, 24 May 2015 16:33:35 -0400 +Subject: [PATCH] shared: generator - correct path to systemd-fsck + +In generated systemd-fsck-root.service. This would break if rootprefix +is not /usr/lib/systemd. + +[tomegun: flesh out commit message] + +(cherry picked from commit 77eb82f9f0f60535ab5f585834ed6e66cf39b184) +--- + Makefile.am | 1 + + src/shared/generator.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 3821ee5eb4..dd1e9e4e48 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -188,6 +188,7 @@ AM_CPPFLAGS = \ + -DCATALOG_DATABASE=\"$(catalogstatedir)/database\" \ + -DSYSTEMD_CGROUP_AGENT_PATH=\"$(rootlibexecdir)/systemd-cgroups-agent\" \ + -DSYSTEMD_BINARY_PATH=\"$(rootlibexecdir)/systemd\" \ ++ -DSYSTEMD_FSCK_PATH=\"$(rootlibexecdir)/systemd-fsck\" \ + -DSYSTEMD_SHUTDOWN_BINARY_PATH=\"$(rootlibexecdir)/systemd-shutdown\" \ + -DSYSTEMD_SLEEP_BINARY_PATH=\"$(rootlibexecdir)/systemd-sleep\" \ + -DSYSTEMCTL_BINARY_PATH=\"$(rootbindir)/systemctl\" \ +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 81284995f5..807569a1b8 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -61,7 +61,7 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) { + "[Service]\n" + "Type=oneshot\n" + "RemainAfterExit=yes\n" +- "ExecStart=/usr/lib/systemd/systemd-fsck %2$s\n" ++ "ExecStart=" SYSTEMD_FSCK_PATH " %2$s\n" + "TimeoutSec=0\n", + program_invocation_short_name, + what, diff --git a/0009-networkd-fix-IFF_UP-when-ipv6-support-is-disabled.patch b/0009-networkd-fix-IFF_UP-when-ipv6-support-is-disabled.patch new file mode 100644 index 0000000..bbfa4a2 --- /dev/null +++ b/0009-networkd-fix-IFF_UP-when-ipv6-support-is-disabled.patch @@ -0,0 +1,63 @@ +From c88fd204e9822cd92d97a93f9120c9d58d3a5037 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 25 May 2015 17:34:47 +0200 +Subject: [PATCH] networkd: fix IFF_UP when ipv6 support is disabled + +Passing ipv6 options (even when they should be noops) caused IFF_UP to fail when +ipv6 was supported. + +Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=90103 +(cherry picked from commit 01d28f81a782616b6daa84a42447fd4939783a66) +--- + src/network/networkd-link.c | 31 +++++++++++++++++-------------- + 1 file changed, 17 insertions(+), 14 deletions(-) + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 8b0de1f741..f039a2d687 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -1010,27 +1010,30 @@ static int link_up(Link *link) { + if (r < 0) + return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m"); + +- r = sd_rtnl_message_open_container(req, AF_INET6); +- if (r < 0) +- return log_link_error_errno(link, r, "Could not open AF_INET6 container: %m"); ++ if (socket_ipv6_is_supported()) { ++ /* if the kernel lacks ipv6 support setting IFF_UP fails if any ipv6 options are passed */ ++ r = sd_rtnl_message_open_container(req, AF_INET6); ++ if (r < 0) ++ return log_link_error_errno(link, r, "Could not open AF_INET6 container: %m"); + +- ipv6ll_mode = link_ipv6ll_enabled(link) ? IN6_ADDR_GEN_MODE_EUI64 : IN6_ADDR_GEN_MODE_NONE; +- r = sd_rtnl_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode); +- if (r < 0) +- return log_link_error_errno(link, r, "Could not append IFLA_INET6_ADDR_GEN_MODE: %m"); ++ ipv6ll_mode = link_ipv6ll_enabled(link) ? IN6_ADDR_GEN_MODE_EUI64 : IN6_ADDR_GEN_MODE_NONE; ++ r = sd_rtnl_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode); ++ if (r < 0) ++ return log_link_error_errno(link, r, "Could not append IFLA_INET6_ADDR_GEN_MODE: %m"); ++ ++ if (!in_addr_is_null(AF_INET6, &link->network->ipv6_token)) { ++ r = sd_rtnl_message_append_in6_addr(req, IFLA_INET6_TOKEN, &link->network->ipv6_token.in6); ++ if (r < 0) ++ return log_link_error_errno(link, r, "Could not append IFLA_INET6_TOKEN: %m"); ++ } + +- if (!in_addr_is_null(AF_INET6, &link->network->ipv6_token)) { +- r = sd_rtnl_message_append_in6_addr(req, IFLA_INET6_TOKEN, &link->network->ipv6_token.in6); ++ r = sd_rtnl_message_close_container(req); + if (r < 0) +- return log_link_error_errno(link, r, "Could not append IFLA_INET6_TOKEN: %m"); ++ return log_link_error_errno(link, r, "Could not close AF_INET6 container: %m"); + } + + r = sd_rtnl_message_close_container(req); + if (r < 0) +- return log_link_error_errno(link, r, "Could not close AF_INET6 container: %m"); +- +- r = sd_rtnl_message_close_container(req); +- if (r < 0) + return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m"); + + r = sd_rtnl_call_async(link->manager->rtnl, req, link_up_handler, link, 0, NULL); diff --git a/0010-import-dkr-avoid-NULL-pointer-dereference.patch b/0010-import-dkr-avoid-NULL-pointer-dereference.patch new file mode 100644 index 0000000..d70dc66 --- /dev/null +++ b/0010-import-dkr-avoid-NULL-pointer-dereference.patch @@ -0,0 +1,28 @@ +From 8241402c1aadd32f1918d75d04da485430818dcb Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 25 May 2015 22:47:42 +0200 +Subject: [PATCH] import: dkr - avoid NULL-pointer dereference + +A malformed manifest could in principle cause a NULL pointer dereference of. Check +for this and fail early. + +Fixes CID 1299642. + +(cherry picked from commit 37591152d261ba980b8992de37ee940c9e5c5da0) +--- + src/import/pull-dkr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/import/pull-dkr.c b/src/import/pull-dkr.c +index 40aca786a5..d7476dc340 100644 +--- a/src/import/pull-dkr.c ++++ b/src/import/pull-dkr.c +@@ -864,7 +864,7 @@ static void dkr_pull_job_on_finished_v2(PullJob *j) { + } + + e = json_variant_value(doc, "fsLayers"); +- if (!e || e->type != JSON_VARIANT_ARRAY) { ++ if (!e || e->type != JSON_VARIANT_ARRAY || e->size == 0) { + r = -EBADMSG; + goto finish; + } diff --git a/0011-treewide-fix-typos.patch b/0011-treewide-fix-typos.patch new file mode 100644 index 0000000..1cfb33a --- /dev/null +++ b/0011-treewide-fix-typos.patch @@ -0,0 +1,162 @@ +From 78f397aa143fed6b978e4923e443e99ab7686662 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Torstein=20Huseb=C3=B8?= +Date: Tue, 26 May 2015 19:17:30 +0200 +Subject: [PATCH] treewide: fix typos + +(cherry picked from commit 45afd51974fb6a88c5b1fe0b325b7b20fd7b7449) +--- + NEWS | 4 ++-- + man/journal-remote.conf.xml | 2 +- + src/libsystemd/sd-bus/bus-control.c | 2 +- + src/libsystemd/sd-bus/bus-creds.c | 6 +++--- + src/shared/architecture.c | 2 +- + src/shared/architecture.h | 2 +- + src/shared/capability.h | 2 +- + src/shared/fdset.c | 2 +- + src/shared/util.c | 2 +- + 9 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/NEWS b/NEWS +index f72f502129..ee533b4363 100644 +--- a/NEWS ++++ b/NEWS +@@ -3997,7 +3997,7 @@ CHANGES WITH 191: + * HandleSleepKey= in logind.conf has been split up into + HandleSuspendKey= and HandleHibernateKey=. The old setting + is not available anymore. X11 and the kernel are +- distuingishing between these keys and we should too. This ++ distinguishing between these keys and we should too. This + also means the inhibition lock for these keys has been split + into two. + +@@ -4743,7 +4743,7 @@ CHANGES WITH 43: + + * Various functionality updates to libsystemd-login.so + +- * Track class of PAM logins to distuingish greeters from ++ * Track class of PAM logins to distinguish greeters from + normal user logins. + + Contributions from: Kay Sievers, Lennart Poettering, Michael +diff --git a/man/journal-remote.conf.xml b/man/journal-remote.conf.xml +index a7b2227182..fc60258d0b 100644 +--- a/man/journal-remote.conf.xml ++++ b/man/journal-remote.conf.xml +@@ -83,7 +83,7 @@ + + ServerKeyFile= + +- SSL key in PEM format ++ SSL key in PEM format. + + + +diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c +index fa4c28174d..43ddfc651d 100644 +--- a/src/libsystemd/sd-bus/bus-control.c ++++ b/src/libsystemd/sd-bus/bus-control.c +@@ -429,7 +429,7 @@ static int bus_populate_creds_from_items( + c->mask |= SD_BUS_CREDS_PPID; + } else if (item->pids.pid == 1) { + /* The structure doesn't +- * really distuingish the case ++ * really distinguish the case + * where a process has no + * parent and where we don't + * know it because it could +diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c +index fed66823c7..4d67619cf8 100644 +--- a/src/libsystemd/sd-bus/bus-creds.c ++++ b/src/libsystemd/sd-bus/bus-creds.c +@@ -303,7 +303,7 @@ _public_ int sd_bus_creds_get_ppid(sd_bus_creds *c, pid_t *ppid) { + if (!(c->mask & SD_BUS_CREDS_PPID)) + return -ENODATA; + +- /* PID 1 has no parent process. Let's distuingish the case of ++ /* PID 1 has no parent process. Let's distinguish the case of + * not knowing and not having a parent process by the returned + * error code. */ + if (c->ppid == 0) +@@ -989,7 +989,7 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { + if (missing & SD_BUS_CREDS_EXE) { + r = get_process_exe(pid, &c->exe); + if (r == -ESRCH) { +- /* Unfortunately we cannot really distuingish ++ /* Unfortunately we cannot really distinguish + * the case here where the process does not + * exist, and /proc/$PID/exe being unreadable + * because $PID is a kernel thread. Hence, +@@ -1101,7 +1101,7 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { + } + + /* In case only the exe path was to be read we cannot +- * distuingish the case where the exe path was unreadable ++ * distinguish the case where the exe path was unreadable + * because the process was a kernel thread, or when the + * process didn't exist at all. Hence, let's do a final check, + * to be sure. */ +diff --git a/src/shared/architecture.c b/src/shared/architecture.c +index 884abdd3ea..8e72e7a36a 100644 +--- a/src/shared/architecture.c ++++ b/src/shared/architecture.c +@@ -35,7 +35,7 @@ int uname_architecture(void) { + * 1:1. Instead we try to clean it up and break down the + * confusion on x86 and arm in particular. + * +- * We do not try to distuingish CPUs not CPU features, but ++ * We do not try to distinguish CPUs not CPU features, but + * actual architectures, i.e. that have genuinely different + * code. */ + +diff --git a/src/shared/architecture.h b/src/shared/architecture.h +index cb82418a5e..f5bbf65a90 100644 +--- a/src/shared/architecture.h ++++ b/src/shared/architecture.h +@@ -27,7 +27,7 @@ + + /* A cleaned up architecture definition. We don't want to get lost in + * processor features, models, generations or even ABIs. Hence we +- * focus on general family, and distuignish word width and ++ * focus on general family, and distinguish word width and + * endianness. */ + + enum { +diff --git a/src/shared/capability.h b/src/shared/capability.h +index 8260ae1a81..4eb5c2a835 100644 +--- a/src/shared/capability.h ++++ b/src/shared/capability.h +@@ -31,7 +31,7 @@ int have_effective_cap(int value); + int capability_bounding_set_drop(uint64_t drop, bool right_now); + int capability_bounding_set_drop_usermode(uint64_t drop); + +-int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilites); ++int drop_privileges(uid_t uid, gid_t gid, uint64_t keep_capabilities); + + int drop_capability(cap_value_t cv); + +diff --git a/src/shared/fdset.c b/src/shared/fdset.c +index 31849272bd..6101b628ec 100644 +--- a/src/shared/fdset.c ++++ b/src/shared/fdset.c +@@ -32,7 +32,7 @@ + #define MAKE_SET(s) ((Set*) s) + #define MAKE_FDSET(s) ((FDSet*) s) + +-/* Make sure we can distuingish fd 0 and NULL */ ++/* Make sure we can distinguish fd 0 and NULL */ + #define FD_TO_PTR(fd) INT_TO_PTR((fd)+1) + #define PTR_TO_FD(p) (PTR_TO_INT(p)-1) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 34024bacc4..74a2190031 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5887,7 +5887,7 @@ int same_fd(int a, int b) { + + /* The fds refer to the same inode on disk, let's also check + * if they have the same fd flags. This is useful to +- * distuingish the read and write side of a pipe created with ++ * distinguish the read and write side of a pipe created with + * pipe(). */ + fa = fcntl(a, F_GETFL); + if (fa < 0) diff --git a/0012-logind-unlink-run-nologin-when-shutdown-is-cancelled.patch b/0012-logind-unlink-run-nologin-when-shutdown-is-cancelled.patch new file mode 100644 index 0000000..76482cd --- /dev/null +++ b/0012-logind-unlink-run-nologin-when-shutdown-is-cancelled.patch @@ -0,0 +1,29 @@ +From 0569c6e3c9d19c04eb2614bd8769e5eb32764371 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Tue, 26 May 2015 18:56:40 +0200 +Subject: [PATCH] logind: unlink /run/nologin when shutdown is cancelled + +When a scheduled is cancelled, make sure to remove /run/nologin. +This is a regression from the recent shutdownd removal and logind rework. + +(cherry picked from commit fb91034cf5907bbbabba1e8821b01f3b37aa56d5) +--- + src/login/logind-dbus.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 1f5cf865b1..3555bcc2f5 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -1964,6 +1964,11 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd + m->scheduled_shutdown_type = NULL; + m->scheduled_shutdown_timeout = 0; + ++ if (m->unlink_nologin) { ++ unlink("/run/nologin"); ++ m->unlink_nologin = false; ++ } ++ + if (cancelled) { + _cleanup_bus_creds_unref_ sd_bus_creds *creds = NULL; + const char *tty = NULL; diff --git a/0013-missing-add-more-IFLA_VXLAN_-defines.patch b/0013-missing-add-more-IFLA_VXLAN_-defines.patch new file mode 100644 index 0000000..c066251 --- /dev/null +++ b/0013-missing-add-more-IFLA_VXLAN_-defines.patch @@ -0,0 +1,55 @@ +From 091acba43685c70d0a38d43167f44fe2622b3c15 Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Tue, 26 May 2015 07:48:48 +0200 +Subject: [PATCH] missing: add more IFLA_VXLAN_* defines + +Otherwise building faild with kernel headers < v3.16 + +(cherry picked from commit 583c14fc04a089e9af70a3fa0b8c0a8c27c06ec0) +--- + configure.ac | 2 +- + src/shared/missing.h | 11 +++++++++-- + 2 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 48cedb5ab6..0818dd80cf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -334,7 +334,7 @@ AC_CHECK_DECLS([IFLA_INET6_ADDR_GEN_MODE, + IFLA_PHYS_PORT_ID, + IFLA_BOND_AD_INFO, + IFLA_VLAN_PROTOCOL, +- IFLA_VXLAN_LOCAL6, ++ IFLA_VXLAN_REMCSUM_NOPARTIAL, + IFLA_IPTUN_6RD_RELAY_PREFIXLEN, + IFLA_BRIDGE_VLAN_INFO, + IFLA_BRPORT_UNICAST_FLOOD, +diff --git a/src/shared/missing.h b/src/shared/missing.h +index 8ca6f8edb6..9194009491 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -713,7 +713,7 @@ static inline int setns(int fd, int nstype) { + #define IFLA_VLAN_MAX (__IFLA_VLAN_MAX - 1) + #endif + +-#if !HAVE_DECL_IFLA_VXLAN_LOCAL6 ++#if !HAVE_DECL_IFLA_VXLAN_REMCSUM_NOPARTIAL + #define IFLA_VXLAN_UNSPEC 0 + #define IFLA_VXLAN_ID 1 + #define IFLA_VXLAN_GROUP 2 +@@ -732,7 +732,14 @@ static inline int setns(int fd, int nstype) { + #define IFLA_VXLAN_PORT 15 + #define IFLA_VXLAN_GROUP6 16 + #define IFLA_VXLAN_LOCAL6 17 +-#define __IFLA_VXLAN_MAX 18 ++#define IFLA_VXLAN_UDP_CSUM 18 ++#define IFLA_VXLAN_UDP_ZERO_CSUM6_TX 19 ++#define IFLA_VXLAN_UDP_ZERO_CSUM6_RX 20 ++#define IFLA_VXLAN_REMCSUM_TX 21 ++#define IFLA_VXLAN_REMCSUM_RX 22 ++#define IFLA_VXLAN_GBP 23 ++#define IFLA_VXLAN_REMCSUM_NOPARTIAL 24 ++#define __IFLA_VXLAN_MAX 25 + + #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1) + #endif diff --git a/0014-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch b/0014-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch new file mode 100644 index 0000000..12d6ad2 --- /dev/null +++ b/0014-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch @@ -0,0 +1,77 @@ +From 8300a7a170f44490d4e86541fbbad2b90cd52ce0 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 27 May 2015 18:39:36 +0200 +Subject: [PATCH] udevd: fix SIGCHLD handling in --daemon mode + +We were listening for SIGCHLD in the wrong process. + +(cherry picked from commit 86c3bece38bcf55da6387d20c6f01da9ad0284dc) +--- + src/udev/udevd.c | 33 ++++++++++++++++++++++----------- + 1 file changed, 22 insertions(+), 11 deletions(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 2a9a429e66..b5dadbc8e4 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -1289,13 +1289,6 @@ static int parse_argv(int argc, char *argv[]) { + + static int manager_new(Manager **ret) { + _cleanup_(manager_freep) Manager *manager = NULL; +- struct epoll_event ep_ctrl = { .events = EPOLLIN }; +- struct epoll_event ep_inotify = { .events = EPOLLIN }; +- struct epoll_event ep_signal = { .events = EPOLLIN }; +- struct epoll_event ep_netlink = { .events = EPOLLIN }; +- struct epoll_event ep_worker = { .events = EPOLLIN }; +- sigset_t mask; +- int r, one = 1; + + assert(ret); + +@@ -1324,6 +1317,23 @@ static int manager_new(Manager **ret) { + udev_list_node_init(&manager->events); + udev_list_init(manager->udev, &manager->properties, true); + ++ *ret = manager; ++ manager = NULL; ++ ++ return 0; ++} ++ ++static int manager_listen(Manager *manager) { ++ struct epoll_event ep_ctrl = { .events = EPOLLIN }; ++ struct epoll_event ep_inotify = { .events = EPOLLIN }; ++ struct epoll_event ep_signal = { .events = EPOLLIN }; ++ struct epoll_event ep_netlink = { .events = EPOLLIN }; ++ struct epoll_event ep_worker = { .events = EPOLLIN }; ++ sigset_t mask; ++ int r, one = 1; ++ ++ assert(manager); ++ + r = systemd_fds(&manager->fd_ctrl, &manager->fd_uevent); + if (r >= 0) { + /* get control and netlink socket from systemd */ +@@ -1405,10 +1415,7 @@ static int manager_new(Manager **ret) { + epoll_ctl(manager->fd_ep, EPOLL_CTL_ADD, manager->fd_worker, &ep_worker) < 0) + return log_error_errno(errno, "fail to add fds to epoll: %m"); + +- *ret = manager; +- manager = NULL; +- +- return 1; ++ return 0; + } + + int main(int argc, char *argv[]) { +@@ -1519,6 +1526,10 @@ int main(int argc, char *argv[]) { + } else + sd_notify(1, "READY=1"); + ++ r = manager_listen(manager); ++ if (r < 0) ++ return log_error_errno(r, "failed to set up fds and listen for events: %m"); ++ + for (;;) { + static usec_t last_usec; + struct epoll_event ev[8]; diff --git a/0015-sd-device-fix-device_get_properties_strv.patch b/0015-sd-device-fix-device_get_properties_strv.patch new file mode 100644 index 0000000..5946951 --- /dev/null +++ b/0015-sd-device-fix-device_get_properties_strv.patch @@ -0,0 +1,33 @@ +From 864dfcd49d764866a9795ea6e3f39c1f7c85b509 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 27 May 2015 23:26:39 +0200 +Subject: [PATCH] sd-device: fix device_get_properties_strv() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +A NULL pointer was inserted as the first element of the strv. + +This had the effect of always passing the empty environment to processes +spawned by udev. + +Reported by Michał Bartoszkiewicz. + +(cherry picked from commit 0e3e60561395a8dd0464f9427d7fc9209bf3b007) +--- + src/libsystemd/sd-device/device-private.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c +index 3cadedbf4a..10370af029 100644 +--- a/src/libsystemd/sd-device/device-private.c ++++ b/src/libsystemd/sd-device/device-private.c +@@ -659,7 +659,7 @@ static int device_update_properties_bufs(sd_device *device) { + if (!buf_strv) + return -ENOMEM; + +- buf_strv[++ strv_size] = (char *)&buf_nulstr[nulstr_len]; ++ buf_strv[strv_size ++] = (char *)&buf_nulstr[nulstr_len]; + strscpyl((char *)buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL); + nulstr_len += len + 1; + } diff --git a/0016-man-fix-systemd.resource-control-5-volume-number.patch b/0016-man-fix-systemd.resource-control-5-volume-number.patch new file mode 100644 index 0000000..14c0a45 --- /dev/null +++ b/0016-man-fix-systemd.resource-control-5-volume-number.patch @@ -0,0 +1,23 @@ +From 6ef870184fd2952802c72cf8782745fc613aa233 Mon Sep 17 00:00:00 2001 +From: Patrick Donnelly +Date: Wed, 27 May 2015 15:47:02 -0400 +Subject: [PATCH] man: fix systemd.resource-control(5) volume number + +(cherry picked from commit c4e87748d5d3f574d335a87e3a6272276814b2fd) +--- + man/systemd.slice.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml +index f0bac41763..a501327335 100644 +--- a/man/systemd.slice.xml ++++ b/man/systemd.slice.xml +@@ -90,7 +90,7 @@ + slice specific configuration options are configured in + the [Slice] section. Currently, only generic resource control settings + as described in +- systemd.resource-control7 are allowed. ++ systemd.resource-control5 are allowed. + + + Unless DefaultDependencies=false diff --git a/0017-sd-device-enumerator-fix-matching-on-properties-and-.patch b/0017-sd-device-enumerator-fix-matching-on-properties-and-.patch new file mode 100644 index 0000000..955acd2 --- /dev/null +++ b/0017-sd-device-enumerator-fix-matching-on-properties-and-.patch @@ -0,0 +1,44 @@ +From be215abe14beac522e326be14ba44fcf989e4359 Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Thu, 28 May 2015 17:18:33 +0200 +Subject: [PATCH] sd-device: enumerator - fix matching on properties and + sysattrs + +This was a regression that broke + + $ udevadm trigger -nv --property-match=DEVNAME=/dev/sda1 --attr-match=size=409600 + +Reported by David Reisner. + +(cherry picked from commit 5f529f4c97a141457301477505ae7eb4c28cf610) +--- + src/libsystemd/sd-device/device-enumerator.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/libsystemd/sd-device/device-enumerator.c b/src/libsystemd/sd-device/device-enumerator.c +index ce4862d7f0..3692d46e06 100644 +--- a/src/libsystemd/sd-device/device-enumerator.c ++++ b/src/libsystemd/sd-device/device-enumerator.c +@@ -367,11 +367,11 @@ static bool match_sysattr(sd_device_enumerator *enumerator, sd_device *device) { + assert(enumerator); + assert(device); + +- HASHMAP_FOREACH_KEY(sysattr, value, enumerator->nomatch_sysattr, i) ++ HASHMAP_FOREACH_KEY(value, sysattr, enumerator->nomatch_sysattr, i) + if (match_sysattr_value(device, sysattr, value)) + return false; + +- HASHMAP_FOREACH_KEY(sysattr, value, enumerator->match_sysattr, i) ++ HASHMAP_FOREACH_KEY(value, sysattr, enumerator->match_sysattr, i) + if (!match_sysattr_value(device, sysattr, value)) + return false; + +@@ -389,7 +389,7 @@ static bool match_property(sd_device_enumerator *enumerator, sd_device *device) + if (hashmap_isempty(enumerator->match_property)) + return true; + +- HASHMAP_FOREACH_KEY(property, value, enumerator->match_property, i) { ++ HASHMAP_FOREACH_KEY(value, property, enumerator->match_property, i) { + const char *property_dev, *value_dev; + + FOREACH_DEVICE_PROPERTY(device, property_dev, value_dev) { diff --git a/0018-build-sys-fix-typo.patch b/0018-build-sys-fix-typo.patch new file mode 100644 index 0000000..9c7aab8 --- /dev/null +++ b/0018-build-sys-fix-typo.patch @@ -0,0 +1,27 @@ +From bb3f5d2012812ff6ce56ca3139e17c488b7ca30b Mon Sep 17 00:00:00 2001 +From: Karel Zak +Date: Fri, 29 May 2015 13:42:35 +0200 +Subject: [PATCH] build-sys: fix typo + +There is nothing like systemd_verify_* in Makefile.am. The bug has +been invisible because automake uses the default CFLAGS when component +CFLAGS are undefined. + +(cherry picked from commit 144b1b4b34b6ae20a690e31c3d14dbb96341448b) +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index dd1e9e4e48..5310a30284 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -2132,7 +2132,7 @@ systemd_analyze_SOURCES = \ + src/analyze/analyze-verify.c \ + src/analyze/analyze-verify.h + +-systemd_verify_CFLAGS = \ ++systemd_analyze_CFLAGS = \ + $(AM_CFLAGS) \ + $(SECCOMP_CFLAGS) + diff --git a/0019-path-util-Fix-path_is_mount_point-for-files.patch b/0019-path-util-Fix-path_is_mount_point-for-files.patch new file mode 100644 index 0000000..5eb6f40 --- /dev/null +++ b/0019-path-util-Fix-path_is_mount_point-for-files.patch @@ -0,0 +1,270 @@ +From 117a45829a6be1ef728616c3c90fc8c6f9eda318 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Wed, 27 May 2015 09:56:03 +0200 +Subject: [PATCH] path-util: Fix path_is_mount_point for files +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Commits 27cc6f166 and f25afeb broke path_is_mount_point() for files (such as +/etc/machine-id → /run/machine-id bind mounts) as with the factorization of +fd_is_mount_point() we lost the parent directory. We cannot determine that from +an fd only as openat(fd, "..") only works for directory fds. + +Change fd_is_mount_point() to behave like openat(): It now takes a file +descriptor of the containing directory, a file name in it, and flags (which can +be 0 or AT_SYMLINK_FOLLOW). Unlike name_to_handle_at() or openat(), fstatat() +only accepts the inverse flag AT_SYMLINK_NOFOLLOW and complains with EINVAL +about AT_SYMLINK_FOLLOW; so we need to transform the flags for that fallback. + +Adjust rm_rf_children() accordingly (only other caller of fd_is_mount_point() +aside from path_is_mount_point()). + +Add test cases for files, links, and file bind mounts (the latter will only +work when running as root). Split out a new test_path_is_mount_point() test +case function as it got significantly larger now. + +(cherry picked from commit 5d409034017e9f9f8c4392157d95511fc2e05d87) +--- + src/shared/path-util.c | 31 +++++++++++++------ + src/shared/path-util.h | 2 +- + src/shared/rm-rf.c | 2 +- + src/test/test-path-util.c | 76 +++++++++++++++++++++++++++++++++++++++-------- + 4 files changed, 87 insertions(+), 24 deletions(-) + +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index 7090989fcb..8be479cd7f 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -509,7 +509,7 @@ static int fd_fdinfo_mnt_id(int fd, const char *filename, int flags, int *mnt_id + return safe_atoi(p, mnt_id); + } + +-int fd_is_mount_point(int fd) { ++int fd_is_mount_point(int fd, const char *filename, int flags) { + union file_handle_union h = FILE_HANDLE_INIT, h_parent = FILE_HANDLE_INIT; + int mount_id = -1, mount_id_parent = -1; + bool nosupp = false, check_st_dev = true; +@@ -517,6 +517,7 @@ int fd_is_mount_point(int fd) { + int r; + + assert(fd >= 0); ++ assert(filename); + + /* First we will try the name_to_handle_at() syscall, which + * tells us the mount id and an opaque file "handle". It is +@@ -541,7 +542,7 @@ int fd_is_mount_point(int fd) { + * subvolumes have different st_dev, even though they aren't + * real mounts of their own. */ + +- r = name_to_handle_at(fd, "", &h.handle, &mount_id, AT_EMPTY_PATH); ++ r = name_to_handle_at(fd, filename, &h.handle, &mount_id, flags); + if (r < 0) { + if (errno == ENOSYS) + /* This kernel does not support name_to_handle_at() +@@ -558,7 +559,7 @@ int fd_is_mount_point(int fd) { + return -errno; + } + +- r = name_to_handle_at(fd, "..", &h_parent.handle, &mount_id_parent, 0); ++ r = name_to_handle_at(fd, "", &h_parent.handle, &mount_id_parent, AT_EMPTY_PATH); + if (r < 0) { + if (errno == EOPNOTSUPP) { + if (nosupp) +@@ -593,13 +594,13 @@ int fd_is_mount_point(int fd) { + return mount_id != mount_id_parent; + + fallback_fdinfo: +- r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id); ++ r = fd_fdinfo_mnt_id(fd, filename, flags, &mount_id); + if (r == -EOPNOTSUPP) + goto fallback_fstat; + if (r < 0) + return r; + +- r = fd_fdinfo_mnt_id(fd, "..", 0, &mount_id_parent); ++ r = fd_fdinfo_mnt_id(fd, "", AT_EMPTY_PATH, &mount_id_parent); + if (r < 0) + return r; + +@@ -615,10 +616,16 @@ fallback_fdinfo: + check_st_dev = false; + + fallback_fstat: +- if (fstatat(fd, "", &a, AT_EMPTY_PATH) < 0) ++ /* yay for fstatat() taking a different set of flags than the other ++ * _at() above */ ++ if (flags & AT_SYMLINK_FOLLOW) ++ flags &= ~AT_SYMLINK_FOLLOW; ++ else ++ flags |= AT_SYMLINK_NOFOLLOW; ++ if (fstatat(fd, filename, &a, flags) < 0) + return -errno; + +- if (fstatat(fd, "..", &b, 0) < 0) ++ if (fstatat(fd, "", &b, AT_EMPTY_PATH) < 0) + return -errno; + + /* A directory with same device and inode as its parent? Must +@@ -632,17 +639,23 @@ fallback_fstat: + + int path_is_mount_point(const char *t, bool allow_symlink) { + _cleanup_close_ int fd = -1; ++ _cleanup_free_ char *parent = NULL; ++ int r; + + assert(t); + + if (path_equal(t, "/")) + return 1; + +- fd = openat(AT_FDCWD, t, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|(allow_symlink ? 0 : O_PATH)); ++ r = path_get_parent(t, &parent); ++ if (r < 0) ++ return r; ++ ++ fd = openat(AT_FDCWD, parent, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_PATH); + if (fd < 0) + return -errno; + +- return fd_is_mount_point(fd); ++ return fd_is_mount_point(fd, basename(t), (allow_symlink ? AT_SYMLINK_FOLLOW : 0)); + } + + int path_is_read_only_fs(const char *path) { +diff --git a/src/shared/path-util.h b/src/shared/path-util.h +index 4f45cfd2b7..38ad799ba0 100644 +--- a/src/shared/path-util.h ++++ b/src/shared/path-util.h +@@ -53,7 +53,7 @@ char** path_strv_make_absolute_cwd(char **l); + char** path_strv_resolve(char **l, const char *prefix); + char** path_strv_resolve_uniq(char **l, const char *prefix); + +-int fd_is_mount_point(int fd); ++int fd_is_mount_point(int fd, const char *filename, int flags); + int path_is_mount_point(const char *path, bool allow_symlink); + int path_is_read_only_fs(const char *path); + int path_is_os_tree(const char *path); +diff --git a/src/shared/rm-rf.c b/src/shared/rm-rf.c +index a89e8afc2a..bafd483be2 100644 +--- a/src/shared/rm-rf.c ++++ b/src/shared/rm-rf.c +@@ -103,7 +103,7 @@ int rm_rf_children(int fd, RemoveFlags flags, struct stat *root_dev) { + } + + /* Stop at mount points */ +- r = fd_is_mount_point(subdir_fd); ++ r = fd_is_mount_point(fd, de->d_name, 0); + if (r < 0) { + if (ret == 0 && r != -ENOENT) + ret = r; +diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c +index 09f0f2f89e..80782ff902 100644 +--- a/src/test/test-path-util.c ++++ b/src/test/test-path-util.c +@@ -21,6 +21,7 @@ + + #include + #include ++#include + + #include "path-util.h" + #include "util.h" +@@ -88,21 +89,9 @@ static void test_path(void) { + test_parent("/aa///file...", "/aa///"); + test_parent("file.../", NULL); + +- assert_se(path_is_mount_point("/", true) > 0); +- assert_se(path_is_mount_point("/", false) > 0); +- + fd = open("/", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY); + assert_se(fd >= 0); +- assert_se(fd_is_mount_point(fd) > 0); +- +- assert_se(path_is_mount_point("/proc", true) > 0); +- assert_se(path_is_mount_point("/proc", false) > 0); +- +- assert_se(path_is_mount_point("/proc/1", true) == 0); +- assert_se(path_is_mount_point("/proc/1", false) == 0); +- +- assert_se(path_is_mount_point("/sys", true) > 0); +- assert_se(path_is_mount_point("/sys", false) > 0); ++ assert_se(fd_is_mount_point(fd, "/", 0) > 0); + + { + char p1[] = "aaa/bbb////ccc"; +@@ -322,6 +311,66 @@ static void test_prefix_root(void) { + test_prefix_root_one("/foo///", "//bar", "/foo/bar"); + } + ++static void test_path_is_mount_point(void) { ++ int fd, rt, rf, rlt, rlf; ++ char tmp_dir[] = "/tmp/test-path-is-mount-point-XXXXXX"; ++ _cleanup_free_ char *file1 = NULL, *file2 = NULL, *link1 = NULL, *link2 = NULL; ++ ++ assert_se(path_is_mount_point("/", true) > 0); ++ assert_se(path_is_mount_point("/", false) > 0); ++ ++ assert_se(path_is_mount_point("/proc", true) > 0); ++ assert_se(path_is_mount_point("/proc", false) > 0); ++ ++ assert_se(path_is_mount_point("/proc/1", true) == 0); ++ assert_se(path_is_mount_point("/proc/1", false) == 0); ++ ++ assert_se(path_is_mount_point("/sys", true) > 0); ++ assert_se(path_is_mount_point("/sys", false) > 0); ++ ++ /* file mountpoints */ ++ assert_se(mkdtemp(tmp_dir) != NULL); ++ file1 = path_join(NULL, tmp_dir, "file1"); ++ assert_se(file1); ++ file2 = path_join(NULL, tmp_dir, "file2"); ++ assert_se(file2); ++ fd = open(file1, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664); ++ assert_se(fd > 0); ++ close(fd); ++ fd = open(file2, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC, 0664); ++ assert_se(fd > 0); ++ close(fd); ++ link1 = path_join(NULL, tmp_dir, "link1"); ++ assert_se(link1); ++ assert_se(symlink("file1", link1) == 0); ++ link2 = path_join(NULL, tmp_dir, "link2"); ++ assert_se(link1); ++ assert_se(symlink("file2", link2) == 0); ++ ++ assert_se(path_is_mount_point(file1, true) == 0); ++ assert_se(path_is_mount_point(file1, false) == 0); ++ assert_se(path_is_mount_point(link1, true) == 0); ++ assert_se(path_is_mount_point(link1, false) == 0); ++ ++ /* this test will only work as root */ ++ if (mount(file1, file2, NULL, MS_BIND, NULL) >= 0) { ++ rf = path_is_mount_point(file2, false); ++ rt = path_is_mount_point(file2, true); ++ rlf = path_is_mount_point(link2, false); ++ rlt = path_is_mount_point(link2, true); ++ ++ assert_se(umount(file2) == 0); ++ ++ assert_se(rf == 1); ++ assert_se(rt == 1); ++ assert_se(rlf == 0); ++ assert_se(rlt == 1); ++ } else ++ printf("Skipping bind mount file test: %m\n"); ++ ++ assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0); ++} ++ + int main(int argc, char **argv) { + test_path(); + test_find_binary(argv[0], true); +@@ -333,6 +382,7 @@ int main(int argc, char **argv) { + test_strv_resolve(); + test_path_startswith(); + test_prefix_root(); ++ test_path_is_mount_point(); + + return 0; + } diff --git a/0020-rules-fix-typo-in-block-watch-rule.patch b/0020-rules-fix-typo-in-block-watch-rule.patch new file mode 100644 index 0000000..d1b2fbd --- /dev/null +++ b/0020-rules-fix-typo-in-block-watch-rule.patch @@ -0,0 +1,23 @@ +From 4fa8d70f0e914346c2a46c05bbb356eaae7d527c Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Fri, 29 May 2015 19:59:24 +0200 +Subject: [PATCH] rules: fix typo in block watch rule + +The intention was to turn this rule from using a blacklist to a whitelist, but +there was a stray '!'. + +(cherry picked from commit f07689517e3715d03590e779841647aed0cd2ba7) +--- + rules/60-block.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/60-block.rules b/rules/60-block.rules +index de41499cb7..cfd5010bbd 100644 +--- a/rules/60-block.rules ++++ b/rules/60-block.rules +@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ + ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" + + # watch metadata changes, caused by tools closing the device node which was opened for writing +-ACTION=="add", SUBSYSTEM=="block", KERNEL!="loop*|nvme*|sd*|vd*", OPTIONS+="watch" ++ACTION=="add", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" diff --git a/0021-rules-restore-block-watch-after-CHANGE-events.patch b/0021-rules-restore-block-watch-after-CHANGE-events.patch new file mode 100644 index 0000000..e58de65 --- /dev/null +++ b/0021-rules-restore-block-watch-after-CHANGE-events.patch @@ -0,0 +1,23 @@ +From d854d0f65a7fa84bed1703a36a7f15aff40aa6ca Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Fri, 29 May 2015 20:55:39 +0200 +Subject: [PATCH] rules: restore block watch after CHANGE events + +When processing an event, the watch is disabled, make sure it is restorted after +a CHANGE event has been processed. + +(cherry picked from commit b50063512d4be4d29e0ca5d28f66bc1121861e3b) +--- + rules/60-block.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/60-block.rules b/rules/60-block.rules +index cfd5010bbd..a69d648023 100644 +--- a/rules/60-block.rules ++++ b/rules/60-block.rules +@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ + ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" + + # watch metadata changes, caused by tools closing the device node which was opened for writing +-ACTION=="add", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" ++ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" diff --git a/0022-zsh-completion-update-bootctl.patch b/0022-zsh-completion-update-bootctl.patch new file mode 100644 index 0000000..93f7ff4 --- /dev/null +++ b/0022-zsh-completion-update-bootctl.patch @@ -0,0 +1,33 @@ +From 4ee8c1c46cdb745db3e62dfc8e945dc73427ba04 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sun, 24 May 2015 13:25:52 +0200 +Subject: [PATCH] zsh-completion: update bootctl + +(cherry picked from commit da090dfd0b6a86694084ebc27645ead3f25ef0b6) +--- + shell-completion/zsh/_bootctl | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl +index 7d2453cc2c..ce776c052f 100644 +--- a/shell-completion/zsh/_bootctl ++++ b/shell-completion/zsh/_bootctl +@@ -4,7 +4,10 @@ + { + local -a _bootctl_cmds + _bootctl_cmds=( +- "status:Show current firmware and boot settings" ++ "status:Show status of installed systemd-boot and EFI variables" ++ "instal:Install systemd-boot to the ESP and EFI variables" ++ "update:Update systemd-boot in the ESP and EFI variables" ++ "remove:Remove systemd-boot from the ESP and EFI variables" + ) + if (( CURRENT == 1 )); then + _describe -t commands 'bootctl command' _bootctl_cmds || compadd "$@" +@@ -22,4 +25,6 @@ + _arguments \ + {-h,--help}'[Prints a short help text and exits.]' \ + '--version[Prints a short version string and exits.]' \ ++ '--path=[Path to the EFI System Partition (ESP)]:path:_directories' \ ++ '--no-variables[Do not touch EFI variables]' \ + '*::bootctl command:_bootctl_command' diff --git a/0023-README-fix-typo.patch b/0023-README-fix-typo.patch new file mode 100644 index 0000000..98909b7 --- /dev/null +++ b/0023-README-fix-typo.patch @@ -0,0 +1,23 @@ +From ed341dc136505c1919d34d2ef24d48370c2d3368 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sat, 30 May 2015 10:31:41 +0200 +Subject: [PATCH] README: fix typo + +(cherry picked from commit 8f42ccd24ba3cbdb994094df4aac69a00c3c7367) +--- + README | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/README b/README +index 039110e880..b909b434db 100644 +--- a/README ++++ b/README +@@ -239,7 +239,7 @@ WARNINGS: + supported anymore by the basic set of Linux OS components. + + systemd requires that the /run mount point exists. systemd also +- requires that /var/run is a a symlink to /run. ++ requires that /var/run is a symlink to /run. + + For more information on this issue consult + http://freedesktop.org/wiki/Software/systemd/separate-usr-is-broken diff --git a/0024-networkctl-fix-uninitialized-variable.patch b/0024-networkctl-fix-uninitialized-variable.patch new file mode 100644 index 0000000..fa38dc4 --- /dev/null +++ b/0024-networkctl-fix-uninitialized-variable.patch @@ -0,0 +1,27 @@ +From fb9a5b5144ab5654197cd9dab7a339976f10450b Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sat, 30 May 2015 10:51:41 +0200 +Subject: [PATCH] networkctl: fix uninitialized variable + +We ignore the return value of sd_device_get_devtype, then devtype could +be uninitialized when used with streq_ptr. So we need to initialize it +first. + +(cherry picked from commit 732b7f39a2b3b1a2af90102c6262186ae71197ac) +--- + src/network/networkctl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/network/networkctl.c b/src/network/networkctl.c +index 69b4ab4a5c..3454394977 100644 +--- a/src/network/networkctl.c ++++ b/src/network/networkctl.c +@@ -62,7 +62,7 @@ static int link_get_type_string(int iftype, sd_device *d, char **ret) { + assert(ret); + + if (iftype == ARPHRD_ETHER && d) { +- const char *devtype, *id = NULL; ++ const char *devtype = NULL, *id = NULL; + /* WLANs have iftype ARPHRD_ETHER, but we want + * to show a more useful type string for + * them */ diff --git a/0025-conf-parser-parsing-error-logs-should-show-a-type-no.patch b/0025-conf-parser-parsing-error-logs-should-show-a-type-no.patch new file mode 100644 index 0000000..09223f2 --- /dev/null +++ b/0025-conf-parser-parsing-error-logs-should-show-a-type-no.patch @@ -0,0 +1,30 @@ +From 4cdc2411e6d31879ac3409ccd8cdd5eebee9ed35 Mon Sep 17 00:00:00 2001 +From: Ronny Chevalier +Date: Sat, 30 May 2015 12:21:26 +0200 +Subject: [PATCH] conf-parser: parsing error logs should show a type not a + vartype + +Instead of this: +[filename:1] Failed to parse nsec_t value, ignoring: garbage + +we show this: +[filename:1] Failed to parse nsec value, ignoring: garbage + +(cherry picked from commit 98d75800461c091e95398936ceb1efc2d5a3f699) +--- + src/shared/conf-parser.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c +index 2c855157a9..7370c786f9 100644 +--- a/src/shared/conf-parser.c ++++ b/src/shared/conf-parser.c +@@ -444,7 +444,7 @@ int config_parse_many(const char *conf_file, + if (r < 0) \ + log_syntax(unit, LOG_ERR, filename, line, -r, \ + "Failed to parse %s value, ignoring: %s", \ +- #vartype, rvalue); \ ++ #type, rvalue); \ + \ + return 0; \ + } diff --git a/0026-core-namespace-Protect-usr-instead-of-home-with-Prot.patch b/0026-core-namespace-Protect-usr-instead-of-home-with-Prot.patch new file mode 100644 index 0000000..6319d12 --- /dev/null +++ b/0026-core-namespace-Protect-usr-instead-of-home-with-Prot.patch @@ -0,0 +1,27 @@ +From 33d3e88a8015c16b0d8c908b094c0fbc4dfcf2bb Mon Sep 17 00:00:00 2001 +From: Jason Pleau +Date: Sun, 31 May 2015 12:51:17 -0400 +Subject: [PATCH] core/namespace: Protect /usr instead of /home with + ProtectSystem=yes + +A small typo in ee818b8 caused /home to be put in read-only instead of +/usr when ProtectSystem was enabled (ie: not set to "no"). + +(cherry picked from commit d38e01dc96c5cae1986561c4f3bc7f760560bf2a) +--- + src/core/namespace.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/namespace.c b/src/core/namespace.c +index 7d0b7e7e84..01a817bf23 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -499,7 +499,7 @@ int setup_namespace( + if (protect_system != PROTECT_SYSTEM_NO) { + const char *usr_dir, *boot_dir, *etc_dir; + +- usr_dir = prefix_roota(root_directory, "/home"); ++ usr_dir = prefix_roota(root_directory, "/usr"); + boot_dir = prefix_roota(root_directory, "/boot"); + boot_dir = strjoina("-", boot_dir); + etc_dir = prefix_roota(root_directory, "/etc"); diff --git a/0027-udev-Bring-back-persistant-storage-symlinks-for-bcac.patch b/0027-udev-Bring-back-persistant-storage-symlinks-for-bcac.patch new file mode 100644 index 0000000..f92e526 --- /dev/null +++ b/0027-udev-Bring-back-persistant-storage-symlinks-for-bcac.patch @@ -0,0 +1,24 @@ +From 73f05f079d5e319e8296683399a2548a37dadc5a Mon Sep 17 00:00:00 2001 +From: David Mohr +Date: Mon, 1 Jun 2015 08:10:28 +0200 +Subject: [PATCH] udev: Bring back persistant storage symlinks for bcache + +https://bugs.debian.org/787367 +(cherry picked from commit 19672f1e5fd23ec3ea5b93b8268ae07f2b8e9645) +--- + rules/60-persistent-storage.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules +index 3f803ceb9a..2aa15f3411 100644 +--- a/rules/60-persistent-storage.rules ++++ b/rules/60-persistent-storage.rules +@@ -6,7 +6,7 @@ + ACTION=="remove", GOTO="persistent_storage_end" + + SUBSYSTEM!="block", GOTO="persistent_storage_end" +-KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*", GOTO="persistent_storage_end" ++KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|bcache*", GOTO="persistent_storage_end" + + # ignore partitions that span the entire disk + TEST=="whole_disk", GOTO="persistent_storage_end" diff --git a/0028-sd-device-fix-invalid-property-strv-pointers.patch b/0028-sd-device-fix-invalid-property-strv-pointers.patch new file mode 100644 index 0000000..5c2b063 --- /dev/null +++ b/0028-sd-device-fix-invalid-property-strv-pointers.patch @@ -0,0 +1,71 @@ +From d6e771a1936f54ff1693d84625de57b199bd6c6f Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Mon, 1 Jun 2015 11:32:39 +0200 +Subject: [PATCH] sd-device: fix invalid property strv pointers + +In device_update_properties_bufs(), the strv is built from pointers into the +single nul-terminated buf_nulstr string, to avoid allocating the key=value +strings twice. However, we must not do that while building and +GREEDY_REALLOC0()'ing buf_nulstr, as each time when this actually reallocates +memory the pointers we wrote into buf_strv so far become invalid. + +So change the logic to first completely build the new buf_nulstr, and then +iterate over it to pick out the pointers to the individual key=value strings +for properties_strv. + +This fixes invalid environment for udev callouts. + +(cherry picked from commit d854ba50a82f28b776c670d27156f0e9881fde8a) +--- + src/libsystemd/sd-device/device-private.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c +index 10370af029..deb8efd05d 100644 +--- a/src/libsystemd/sd-device/device-private.c ++++ b/src/libsystemd/sd-device/device-private.c +@@ -636,10 +636,9 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) { + + static int device_update_properties_bufs(sd_device *device) { + const char *val, *prop; +- char **buf_strv = NULL; + uint8_t *buf_nulstr = NULL; +- size_t allocated_nulstr = 0, allocated_strv = 0; +- size_t nulstr_len = 0, strv_size = 0; ++ size_t allocated_nulstr = 0; ++ size_t nulstr_len = 0, num = 0, i; + + assert(device); + +@@ -655,20 +654,24 @@ static int device_update_properties_bufs(sd_device *device) { + if (!buf_nulstr) + return -ENOMEM; + +- buf_strv = GREEDY_REALLOC0(buf_strv, allocated_strv, strv_size + 2); +- if (!buf_strv) +- return -ENOMEM; +- +- buf_strv[strv_size ++] = (char *)&buf_nulstr[nulstr_len]; + strscpyl((char *)buf_nulstr + nulstr_len, len + 1, prop, "=", val, NULL); + nulstr_len += len + 1; ++ ++num; + } + + free(device->properties_nulstr); +- free(device->properties_strv); + device->properties_nulstr = buf_nulstr; + device->properties_nulstr_len = nulstr_len; +- device->properties_strv = buf_strv; ++ ++ /* build strv from buf_nulstr */ ++ free(device->properties_strv); ++ device->properties_strv = new0(char *, num + 1); ++ i = 0; ++ NULSTR_FOREACH(val, (char*) buf_nulstr) { ++ device->properties_strv[i] = (char *) val; ++ assert(i < num); ++ i++; ++ } + + device->properties_buf_outdated = false; + diff --git a/0029-zsh-completion-fix-typo-in-_bootctl.patch b/0029-zsh-completion-fix-typo-in-_bootctl.patch new file mode 100644 index 0000000..02363ea --- /dev/null +++ b/0029-zsh-completion-fix-typo-in-_bootctl.patch @@ -0,0 +1,25 @@ +From 3010a30dcc0ac493fcfe485a8ad1ff483fa0a01d Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Mon, 1 Jun 2015 12:06:07 +0200 +Subject: [PATCH] zsh-completion: fix typo in _bootctl + +The command is 'install', not 'instal'. Fix that typo. + +(cherry picked from commit c521a430fd6027d55f96516bc2f7570f5997e137) +--- + shell-completion/zsh/_bootctl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl +index ce776c052f..0e1b0a5562 100644 +--- a/shell-completion/zsh/_bootctl ++++ b/shell-completion/zsh/_bootctl +@@ -5,7 +5,7 @@ + local -a _bootctl_cmds + _bootctl_cmds=( + "status:Show status of installed systemd-boot and EFI variables" +- "instal:Install systemd-boot to the ESP and EFI variables" ++ "install:Install systemd-boot to the ESP and EFI variables" + "update:Update systemd-boot in the ESP and EFI variables" + "remove:Remove systemd-boot from the ESP and EFI variables" + ) diff --git a/0030-load-fragment-use-UNESCAPE_RELAX-flag-to-parse-exec-.patch b/0030-load-fragment-use-UNESCAPE_RELAX-flag-to-parse-exec-.patch new file mode 100644 index 0000000..2994d1a --- /dev/null +++ b/0030-load-fragment-use-UNESCAPE_RELAX-flag-to-parse-exec-.patch @@ -0,0 +1,44 @@ +From df78ada3b4543af43e4059d0185e3cfd007a9899 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Mon, 1 Jun 2015 17:49:04 +0200 +Subject: [PATCH] load-fragment: use UNESCAPE_RELAX flag to parse exec + directives + +The cunescape() helper function used to handle unknown escaping sequences +gracefully by copying them over verbatim. + +Commit 527b7a42 ("util: rework cunescape(), improve error handling") added +a flag to make that behavior optional, and changed to default to error out +with -EINVAL otherwise. + +However, config_parse_exec(), which is used to parse the +Exec{Start,Stop}{Post,Pre,} directives of unit files, was not changed along +with that commit, which means that directives with improperly escaped +command line strings are no longer parsed. + +Relevant bugreports include: + + https://bugs.freedesktop.org/show_bug.cgi?id=90794 + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=787256 + +Fix this by passing UNESCAPE_RELAX to config_parse_exec() in order to +restore the original behavior. + +(cherry picked from commit 22874a348fb1540c1a2b7907748fc57c9756a7ed) +--- + src/core/load-fragment.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index 9415e92c90..b09481a16b 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -609,7 +609,7 @@ int config_parse_exec( + else + skip = strneq(word, "\\;", MAX(l, 1U)); + +- r = cunescape_length(word + skip, l - skip, 0, &c); ++ r = cunescape_length(word + skip, l - skip, UNESCAPE_RELAX, &c); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Failed to unescape command line, ignoring: %s", rvalue); + r = 0; diff --git a/0031-test-unit-file-add-test-for-improperly-escaped-exec-.patch b/0031-test-unit-file-add-test-for-improperly-escaped-exec-.patch new file mode 100644 index 0000000..c1c9e46 --- /dev/null +++ b/0031-test-unit-file-add-test-for-improperly-escaped-exec-.patch @@ -0,0 +1,54 @@ +From f5fe08ec458eea4308f807ade0cbf9a5af663f30 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Mon, 1 Jun 2015 18:05:02 +0200 +Subject: [PATCH] test-unit-file: add test for improperly escaped exec string + +Add a regression test for the recent breakage of handling improperly +escaped exec strings in unit files. + +Code contributed by Martin Pitt: + + https://bugs.freedesktop.org/show_bug.cgi?id=90794 + +(cherry picked from commit 80979f1ce4dadf797a42e85a97dc10960c1f6509) +--- + src/test/test-unit-file.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index a9711ac9f5..31b12d50d7 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -225,6 +225,15 @@ static void test_config_parse_exec(void) { + check_execcommand(c1, + "/sbin/find", NULL, ";", "x", false); + ++ log_info("/* encoded semicolon */"); ++ r = config_parse_exec(NULL, "fake", 5, "section", 1, ++ "LValue", 0, ++ "/bin/find \\073", ++ &c, NULL); ++ assert_se(r >= 0); ++ c1 = c1->command_next; ++ check_execcommand(c1, "/bin/find", NULL, "\\073", NULL, false); ++ + log_info("/* spaces in the filename */"); + r = config_parse_exec(NULL, "fake", 5, "section", 1, + "LValue", 0, +@@ -296,6 +305,16 @@ static void test_config_parse_exec(void) { + c1 = c1->command_next; + check_execcommand(c1, "/path ", NULL, NULL, NULL, false); + ++ log_info("/* quoted backslashes */"); ++ r = config_parse_exec(NULL, "fake", 5, "section", 1, ++ "LValue", 0, ++ "/bin/grep '\\w+\\K'", ++ &c, NULL); ++ assert_se(r >= 0); ++ c1 = c1->command_next; ++ check_execcommand(c1, "/bin/grep", NULL, "\\w+\\K", NULL, false); ++ ++ + log_info("/* trailing backslash: \\ */"); + /* backslash is invalid */ + r = config_parse_exec(NULL, "fake", 4, "section", 1, diff --git a/0032-Separate-the-sign-from-the-number.patch b/0032-Separate-the-sign-from-the-number.patch new file mode 100644 index 0000000..e5f2047 --- /dev/null +++ b/0032-Separate-the-sign-from-the-number.patch @@ -0,0 +1,30 @@ +From e4cf1e16e72e94f794fb058571acaae9fdbbacd9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Pablo=20Lezaeta=20Reyes=20=5Bp=CB=88a=CE=B2=CC=9Elo=20l?= + =?UTF-8?q?=CB=8Ce=CC=9E=CE=B8a=CB=88eta=20r=CB=88ej=C9=9B=5D?= + +Date: Tue, 31 Mar 2015 02:47:39 -0300 +Subject: [PATCH] Separate the % sign from the number + +In spanish the % sign is supposed to be separated from the number [1 and 2 both in spanish] so I separated the %% that draw the percentage sign from the number. + +[1] http://www.fundeu.es/recomendacion/el-se-escribe-separado-de-la-cifra-a-la-que-acompana-802/ +[2] http://aplica.rae.es/orweb/cgi-bin/v.cgi?i=QGkHLBzKcEgZrQyD + +PD: I know that probably this is not the propper place but I don't know where submit the fix or if I do it right +(cherry picked from commit 6f54f5373aa681e66278e8e6edaea06e3d0f8958) +--- + po/es.po | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/po/es.po b/po/es.po +index 675f9721bf..811e36e81f 100644 +--- a/po/es.po ++++ b/po/es.po +@@ -528,5 +528,5 @@ msgstr "" + #, c-format + msgid "Checking in progress on %d disk (%3.1f%% complete)" + msgid_plural "Checking in progress on %d disks (%3.1f%% complete)" +-msgstr[0] "Comprobando progreso en %d disco (%3.1f%% completado)" +-msgstr[1] "Comprobando progreso en %d discos (%3.1f%% completado)" ++msgstr[0] "Comprobando progreso en %d disco (%3.1f %% completado)" ++msgstr[1] "Comprobando progreso en %d discos (%3.1f %% completado)" diff --git a/0033-zsh-completion-fix-completion-of-user-services.patch b/0033-zsh-completion-fix-completion-of-user-services.patch new file mode 100644 index 0000000..f62f84b --- /dev/null +++ b/0033-zsh-completion-fix-completion-of-user-services.patch @@ -0,0 +1,42 @@ +From a27d1804a1a1d1f522fe7742f42a44ced58dce2e Mon Sep 17 00:00:00 2001 +From: Eric Cook +Date: Mon, 18 May 2015 18:45:31 -0400 +Subject: [PATCH] zsh-completion: fix completion of --user services + +By the time __systemctl is called, --user/--system are shifted out of +`words' by _arguments. This patch queries the array sooner. + +In the case that both --user and --system are on the line when compsys runs, +_sys_service_mgr is set to the latter. Which is seemingly how systemctl behaves. + +If neither are on the line, --system is set; for system services to be completed. + +(cherry picked from commit 68c4f6d406a2bdac6957a67a077f182b0287cc3b) +--- + shell-completion/zsh/_systemctl.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in +index 1dc6406beb..db9bdb60c5 100644 +--- a/shell-completion/zsh/_systemctl.in ++++ b/shell-completion/zsh/_systemctl.in +@@ -93,9 +93,7 @@ + + __systemctl() + { +- local -a _modes +- _modes=("--user" "--system") +- systemctl ${words:*_modes} --full --no-legend --no-pager "$@" ++ systemctl $_sys_service_mgr --full --no-legend --no-pager "$@" + } + + +@@ -355,6 +353,8 @@ _job_modes() { + _values -s , "${_modes[@]}" + } + ++local -a _modes; _modes=("--user" "--system") ++local _sys_service_mgr=${${words:*_modes}[(R)(${(j.|.)_modes})]:---system} + _arguments -s \ + {-h,--help}'[Show help]' \ + '--version[Show package version]' \ diff --git a/0034-zsh-completion-a-more-style-tag-aware-_systemctl.patch b/0034-zsh-completion-a-more-style-tag-aware-_systemctl.patch new file mode 100644 index 0000000..39e20c1 --- /dev/null +++ b/0034-zsh-completion-a-more-style-tag-aware-_systemctl.patch @@ -0,0 +1,194 @@ +From 50bb352ccad52c5f56a457305f5422b1359cbf42 Mon Sep 17 00:00:00 2001 +From: Eric Cook +Date: Fri, 29 May 2015 10:40:11 -0400 +Subject: [PATCH] zsh-completion: a more style/tag aware _systemctl + +using _wanted instead of calling compadd directly. this allows the user to customize +possible matches. + +An example being, grouping units by type: +autoload -Uz compinit; compinit +zstyle ':completion:*' menu select +zstyle ':completion:*' group-name '' +zstyle ':completion:*' format 'Completing %d' +zstyle -e ':completion:*:*:systemctl-(((re|)en|dis)able|(*re|)start|reload*):*' \ +tag-order 'local type; for type in service template target socket; + reply+=( systemd-units:-${type}:${type} ); reply=( "$reply systemd-units:-misc:misc" )' +zstyle ':completion:*:systemd-units-template' ignored-patterns '^*@' +zstyle ':completion:*:systemd-units-target' ignored-patterns '^*.target' +zstyle ':completion:*:systemd-units-socket' ignored-patterns '^*.socket' +zstyle ':completion:*:systemd-units-service' ignored-patterns '^*.service' +zstyle ':completion:*:systemd-units-misc' ignored-patterns '*(@|.(service|socket|target))' + +also, http://lists.freedesktop.org/archives/systemd-devel/2015-May/032012.html + +(cherry picked from commit d34b7c117bd016cb9ef2c36d474c9a917924abda) +--- + shell-completion/zsh/_systemctl.in | 60 +++++++++++++++++++++++--------------- + 1 file changed, 37 insertions(+), 23 deletions(-) + +diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in +index db9bdb60c5..17736de01c 100644 +--- a/shell-completion/zsh/_systemctl.in ++++ b/shell-completion/zsh/_systemctl.in +@@ -65,7 +65,7 @@ + if (( CURRENT == 1 )); then + _describe -t commands 'systemctl command' _systemctl_cmds || compadd "$@" + else +- local curcontext="$curcontext" ++ local curcontext="$curcontext" expl + + cmd="${${_systemctl_cmds[(r)$words[1]:*]%%:*}}" + # Deal with any aliases +@@ -172,7 +172,8 @@ for fun in is-active is-failed is-enabled status show cat mask preset help list- + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + _systemctl_really_all_units +- compadd "$@" -a - _sys_really_all_units ++ _wanted systemd-units expl unit \ ++ compadd "$@" -a - _sys_really_all_units + } + done + +@@ -180,34 +181,39 @@ done + (( $+functions[_systemctl_disable] )) || _systemctl_disable() + { + local _sys_unit_state; _systemctl_unit_state +- compadd "$@" - ${(k)_sys_unit_state[(R)enabled]} ++ _wanted systemd-units expl 'enabled unit' \ ++ compadd "$@" - ${(k)_sys_unit_state[(R)enabled]} + } + + (( $+functions[_systemctl_reenable] )) || _systemctl_reenable() + { + local _sys_unit_state; _systemctl_unit_state +- compadd "$@" - ${(k)_sys_unit_state[(R)(enabled|disabled)]} $(_systemctl_get_template_names) ++ _wanted systemd-units expl 'enabled/disabled unit' \ ++ compadd "$@" - ${(k)_sys_unit_state[(R)(enabled|disabled)]} $(_systemctl_get_template_names) + } + + # Completion functions for DISABLED_UNITS + (( $+functions[_systemctl_enable] )) || _systemctl_enable() + { + local _sys_unit_state; _systemctl_unit_state +- compadd "$@" - ${(k)_sys_unit_state[(R)disabled]} $(_systemctl_get_template_names) ++ _wanted systemd-units expl 'disabled unit' \ ++ compadd "$@" - ${(k)_sys_unit_state[(R)disabled]} $(_systemctl_get_template_names) + } + + # Completion functions for FAILED_UNITS + (( $+functions[_systemctl_reset-failed] )) || _systemctl_reset-failed() + { + local _sys_failed_units; _systemctl_failed_units +- compadd "$@" -a - _sys_failed_units || _message "no failed unit found" ++ _wanted systemd-units expl 'failed unit' \ ++ compadd "$@" -a - _sys_failed_units || _message "no failed unit found" + } + + # Completion functions for STARTABLE_UNITS + (( $+functions[_systemctl_start] )) || _systemctl_start() + { + local _sys_startable_units; _systemctl_startable_units +- compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) ++ _wanted systemd-units expl 'startable unit' \ ++ compadd "$@" - ${_sys_startable_units[*]} $(_systemctl_get_template_names) + } + + # Completion functions for STOPPABLE_UNITS +@@ -215,8 +221,9 @@ for fun in stop kill try-restart condrestart ; do + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + local _sys_active_units; _systemctl_active_units +- compadd "$@" - $( _filter_units_by_property CanStop yes \ +- ${_sys_active_units[*]} ) ++ _wanted systemd-units expl 'stoppable unit' \ ++ compadd "$@" - $( _filter_units_by_property CanStop yes \ ++ ${_sys_active_units[*]} ) + } + done + +@@ -224,8 +231,9 @@ done + (( $+functions[_systemctl_isolate] )) || _systemctl_isolate() + { + _systemctl_all_units +- compadd "$@" - $( _filter_units_by_property AllowIsolate yes \ +- ${_sys_all_units[*]} ) ++ _wanted systemd-units expl 'isolatable unit' \ ++ compadd "$@" - $( _filter_units_by_property AllowIsolate yes \ ++ ${_sys_all_units[*]} ) + } + + # Completion functions for RELOADABLE_UNITS +@@ -233,8 +241,9 @@ for fun in reload reload-or-try-restart force-reload ; do + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + local _sys_active_units; _systemctl_active_units +- compadd "$@" - $( _filter_units_by_property CanReload yes \ +- ${_sys_active_units[*]} ) ++ _wanted systemd-units expl 'reloadable unit' \ ++ compadd "$@" - $( _filter_units_by_property CanReload yes \ ++ ${_sys_active_units[*]} ) + } + done + +@@ -243,7 +252,8 @@ for fun in restart reload-or-restart ; do + (( $+functions[_systemctl_$fun] )) || _systemctl_$fun() + { + local _sys_restartable_units; _systemctl_restartable_units +- compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) ++ _wanted systemd-units expl 'restartable unit' \ ++ compadd "$@" - ${_sys_restartable_units[*]} $(_systemctl_get_template_names) + } + done + +@@ -251,28 +261,32 @@ done + (( $+functions[_systemctl_unmask] )) || _systemctl_unmask() + { + local _sys_unit_state; _systemctl_unit_state +- compadd "$@" - ${(k)_sys_unit_state[(R)masked]} || _message "no masked units found" ++ _wanted systemd-units expl 'masked unit' \ ++ compadd "$@" - ${(k)_sys_unit_state[(R)masked]} || _message "no masked units found" + } + + # Completion functions for JOBS + (( $+functions[_systemctl_cancel] )) || _systemctl_cancel() + { +- compadd "$@" - ${${(f)"$(__systemctl list-jobs)"}%% *} || +- _message "no jobs found" ++ _wanted systemd-jobs expl job \ ++ compadd "$@" - ${${(f)"$(__systemctl list-jobs)"}%% *} || ++ _message "no jobs found" + } + + # Completion functions for SNAPSHOTS + (( $+functions[_systemctl_delete] )) || _systemctl_delete() + { +- compadd "$@" - ${${(f)"$(__systemctl list-units --type snapshot --all)"}%% *} || +- _message "no snapshots found" ++ _wanted systemd-snapshots expl snapshot \ ++ compadd "$@" - ${${(f)"$(__systemctl list-units --type snapshot --all)"}%% *} || ++ _message "no snapshots found" + } + + # Completion functions for TARGETS + (( $+functions[_systemctl_set-default] )) || _systemctl_set-default() + { +- compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all)"}%% *} || +- _message "no targets found" ++ _wanted systemd-targets expl target \ ++ compadd "$@" - ${${(f)"$(__systemctl list-unit-files --type target --all)"}%% *} || ++ _message "no targets found" + } + + # Completion functions for ENVS +@@ -284,8 +298,8 @@ for fun in set-environment unset-environment ; do + if [[ "${fun}" = "set-environment" ]]; then + suf='-S=' + fi +- +- compadd "$@" ${suf} - ${${(f)"$(systemctl show-environment)"}%%=*} ++ _wanted systemd-environment expl 'environment variable' \ ++ compadd "$@" ${suf} - ${${(f)"$(systemctl show-environment)"}%%=*} + } + done + diff --git a/0035-missing-add-more-btrfs-defines.patch b/0035-missing-add-more-btrfs-defines.patch new file mode 100644 index 0000000..ed9f4c9 --- /dev/null +++ b/0035-missing-add-more-btrfs-defines.patch @@ -0,0 +1,70 @@ +From 4ef997dc5832f652d30eefcf67547ca029d190db Mon Sep 17 00:00:00 2001 +From: Michael Olbrich +Date: Tue, 2 Jun 2015 11:08:24 +0200 +Subject: [PATCH] missing: add more btrfs defines + +(cherry picked from commit d97fb4083704ce88d96fcc65ab744801909dd0b0) +--- + src/shared/missing.h | 28 ++++++++++++++++++++++++++++ + 1 file changed, 28 insertions(+) + +diff --git a/src/shared/missing.h b/src/shared/missing.h +index 9194009491..be7f6186fc 100644 +--- a/src/shared/missing.h ++++ b/src/shared/missing.h +@@ -269,6 +269,11 @@ struct btrfs_qgroup_inherit { + __u64 qgroups[0]; + }; + ++struct btrfs_ioctl_qgroup_limit_args { ++ __u64 qgroupid; ++ struct btrfs_qgroup_limit lim; ++}; ++ + struct btrfs_ioctl_vol_args_v2 { + __s64 fd; + __u64 transid; +@@ -360,6 +365,14 @@ struct btrfs_ioctl_clone_range_args { + __u64 src_offset, src_length; + __u64 dest_offset; + }; ++ ++#define BTRFS_QUOTA_CTL_ENABLE 1 ++#define BTRFS_QUOTA_CTL_DISABLE 2 ++#define BTRFS_QUOTA_CTL_RESCAN__NOTUSED 3 ++struct btrfs_ioctl_quota_ctl_args { ++ __u64 cmd; ++ __u64 status; ++}; + #endif + + #ifndef BTRFS_IOC_DEFRAG +@@ -367,6 +380,11 @@ struct btrfs_ioctl_clone_range_args { + struct btrfs_ioctl_vol_args) + #endif + ++#ifndef BTRFS_IOC_RESIZE ++#define BTRFS_IOC_RESIZE _IOW(BTRFS_IOCTL_MAGIC, 3, \ ++ struct btrfs_ioctl_vol_args) ++#endif ++ + #ifndef BTRFS_IOC_CLONE + #define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int) + #endif +@@ -424,6 +442,16 @@ struct btrfs_ioctl_clone_range_args { + struct btrfs_ioctl_vol_args) + #endif + ++#ifndef BTRFS_IOC_QUOTA_CTL ++#define BTRFS_IOC_QUOTA_CTL _IOWR(BTRFS_IOCTL_MAGIC, 40, \ ++ struct btrfs_ioctl_quota_ctl_args) ++#endif ++ ++#ifndef BTRFS_IOC_QGROUP_LIMIT ++#define BTRFS_IOC_QGROUP_LIMIT _IOR(BTRFS_IOCTL_MAGIC, 43, \ ++ struct btrfs_ioctl_qgroup_limit_args) ++#endif ++ + #ifndef BTRFS_FIRST_FREE_OBJECTID + #define BTRFS_FIRST_FREE_OBJECTID 256 + #endif diff --git a/0036-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0036-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..1dc9eb7 --- /dev/null +++ b/0036-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,186 @@ +From 502fcfa0c7a24caac76c41ebbeb3cf807aa3d5db Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Mon, 1 Jun 2015 21:11:40 +0200 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +(cherry picked from commit 2fd51106ee0d685ca1512a01e6680142382586a7) +--- + hwdb/20-bluetooth-vendor-product.hwdb | 161 +++++++++++++++++++++++++++++++++- + 1 file changed, 160 insertions(+), 1 deletion(-) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index ff8862b9ea..93241ca490 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -1237,7 +1237,7 @@ bluetooth:v0199* + ID_VENDOR_FROM_DATABASE=SALTO SYSTEMS S.L. + + bluetooth:v019A* +- ID_VENDOR_FROM_DATABASE=T-Engine Forum ++ ID_VENDOR_FROM_DATABASE=TRON Forum (formerly T-Engine Forum) + + bluetooth:v019B* + ID_VENDOR_FROM_DATABASE=CUBETECH s.r.o. +@@ -1508,3 +1508,162 @@ bluetooth:v01F3* + + bluetooth:v01F4* + ID_VENDOR_FROM_DATABASE=UTC Fire and Security ++ ++bluetooth:v01F5* ++ ID_VENDOR_FROM_DATABASE=Cool Webthings Limited ++ ++bluetooth:v01F6* ++ ID_VENDOR_FROM_DATABASE=DJO Global ++ ++bluetooth:v01F7* ++ ID_VENDOR_FROM_DATABASE=Gelliner Limited ++ ++bluetooth:v01F8* ++ ID_VENDOR_FROM_DATABASE=Anyka (Guangzhou) Microelectronics Technology Co, LTD ++ ++bluetooth:v01F9* ++ ID_VENDOR_FROM_DATABASE=Medtronic, Inc. ++ ++bluetooth:v01FA* ++ ID_VENDOR_FROM_DATABASE=Gozio, Inc. ++ ++bluetooth:v01FB* ++ ID_VENDOR_FROM_DATABASE=Form Lifting, LLC ++ ++bluetooth:v01FC* ++ ID_VENDOR_FROM_DATABASE=Wahoo Fitness, LLC ++ ++bluetooth:v01FD* ++ ID_VENDOR_FROM_DATABASE=Kontakt Micro-Location Sp. z o.o. ++ ++bluetooth:v01FE* ++ ID_VENDOR_FROM_DATABASE=Radio System Corporation ++ ++bluetooth:v01FF* ++ ID_VENDOR_FROM_DATABASE=Freescale Semiconductor, Inc. ++ ++bluetooth:v0200* ++ ID_VENDOR_FROM_DATABASE=Verifone Systems PTe Ltd. Taiwan Branch ++ ++bluetooth:v0201* ++ ID_VENDOR_FROM_DATABASE=AR Timing ++ ++bluetooth:v0202* ++ ID_VENDOR_FROM_DATABASE=Rigado LLC ++ ++bluetooth:v0203* ++ ID_VENDOR_FROM_DATABASE=Kemppi Oy ++ ++bluetooth:v0204* ++ ID_VENDOR_FROM_DATABASE=Tapcentive Inc. ++ ++bluetooth:v0205* ++ ID_VENDOR_FROM_DATABASE=Smartbotics Inc. ++ ++bluetooth:v0206* ++ ID_VENDOR_FROM_DATABASE=Otter Products, LLC ++ ++bluetooth:v0207* ++ ID_VENDOR_FROM_DATABASE=STEMP Inc. ++ ++bluetooth:v0208* ++ ID_VENDOR_FROM_DATABASE=LumiGeek LLC ++ ++bluetooth:v0209* ++ ID_VENDOR_FROM_DATABASE=InvisionHeart Inc. ++ ++bluetooth:v020A* ++ ID_VENDOR_FROM_DATABASE=Macnica Inc. ++ ++bluetooth:v020B* ++ ID_VENDOR_FROM_DATABASE=Jaguar Land Rover Limited ++ ++bluetooth:v020C* ++ ID_VENDOR_FROM_DATABASE=CoroWare Technologies, Inc ++ ++bluetooth:v020D* ++ ID_VENDOR_FROM_DATABASE=Simplo Technology Co., LTD ++ ++bluetooth:v020E* ++ ID_VENDOR_FROM_DATABASE=Omron Healthcare Co., LTD ++ ++bluetooth:v020F* ++ ID_VENDOR_FROM_DATABASE=Comodule GMBH ++ ++bluetooth:v0210* ++ ID_VENDOR_FROM_DATABASE=ikeGPS ++ ++bluetooth:v0211* ++ ID_VENDOR_FROM_DATABASE=Telink Semiconductor Co. Ltd ++ ++bluetooth:v0212* ++ ID_VENDOR_FROM_DATABASE=Interplan Co., Ltd ++ ++bluetooth:v0213* ++ ID_VENDOR_FROM_DATABASE=Wyler AG ++ ++bluetooth:v0214* ++ ID_VENDOR_FROM_DATABASE=IK Multimedia Production srl ++ ++bluetooth:v0215* ++ ID_VENDOR_FROM_DATABASE=Lukoton Experience Oy ++ ++bluetooth:v0216* ++ ID_VENDOR_FROM_DATABASE=MTI Ltd ++ ++bluetooth:v0217* ++ ID_VENDOR_FROM_DATABASE=Tech4home, Lda ++ ++bluetooth:v0218* ++ ID_VENDOR_FROM_DATABASE=Hiotech AB ++ ++bluetooth:v0219* ++ ID_VENDOR_FROM_DATABASE=DOTT Limited ++ ++bluetooth:v021A* ++ ID_VENDOR_FROM_DATABASE=Blue Speck Labs, LLC ++ ++bluetooth:v021B* ++ ID_VENDOR_FROM_DATABASE=Cisco Systems Inc ++ ++bluetooth:v021C* ++ ID_VENDOR_FROM_DATABASE=Mobicomm Inc ++ ++bluetooth:v021D* ++ ID_VENDOR_FROM_DATABASE=Edamic ++ ++bluetooth:v021E* ++ ID_VENDOR_FROM_DATABASE=Goodnet Ltd ++ ++bluetooth:v021F* ++ ID_VENDOR_FROM_DATABASE=Luster Leaf Products Inc ++ ++bluetooth:v0220* ++ ID_VENDOR_FROM_DATABASE=Manus Machina BV ++ ++bluetooth:v0221* ++ ID_VENDOR_FROM_DATABASE=Mobiquity Networks Inc ++ ++bluetooth:v0222* ++ ID_VENDOR_FROM_DATABASE=Praxis Dynamics ++ ++bluetooth:v0223* ++ ID_VENDOR_FROM_DATABASE=Philip Morris Products S.A. ++ ++bluetooth:v0224* ++ ID_VENDOR_FROM_DATABASE=Comarch SA ++ ++bluetooth:v0225* ++ ID_VENDOR_FROM_DATABASE=Nestl Nespresso S.A. ++ ++bluetooth:v0226* ++ ID_VENDOR_FROM_DATABASE=Merlinia A/S ++ ++bluetooth:v0227* ++ ID_VENDOR_FROM_DATABASE=LifeBEAM Technologies ++ ++bluetooth:v0228* ++ ID_VENDOR_FROM_DATABASE=Twocanoes Labs, LLC ++ ++bluetooth:v0229* ++ ID_VENDOR_FROM_DATABASE=Muoverti Limited diff --git a/0037-hwdb-update.patch b/0037-hwdb-update.patch new file mode 100644 index 0000000..a02a53a --- /dev/null +++ b/0037-hwdb-update.patch @@ -0,0 +1,1052 @@ +From ec5eaae67e005bcfca37dc62e79305f6e3ac8f0a Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Tue, 2 Jun 2015 20:19:31 +0200 +Subject: [PATCH] hwdb: update + +(cherry picked from commit b30e7a269d1ee289d29282e93f41559ace9d4775) +--- + hwdb/20-OUI.hwdb | 153 ++++++++++++++++++++++++++++++ + hwdb/20-pci-vendor-model.hwdb | 216 ++++++++++++++++++++++++++---------------- + 2 files changed, 285 insertions(+), 84 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index b7823d884f..fa4633dc16 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -44305,6 +44305,9 @@ OUI:00336C* + OUI:0034F1* + ID_OUI_FROM_DATABASE=Radicom Research, Inc. + ++OUI:0034FE* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:003532* + ID_OUI_FROM_DATABASE=Electro-Metrics Corporation + +@@ -51670,6 +51673,9 @@ OUI:00F4B9* + OUI:00F76F* + ID_OUI_FROM_DATABASE=Apple + ++OUI:00F81C* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:00F860* + ID_OUI_FROM_DATABASE=PT. Panggung Electric Citrabuana + +@@ -51727,6 +51733,9 @@ OUI:02CF1C* + OUI:02E6D3* + ID_OUI_FROM_DATABASE=NIXDORF COMPUTER CORPORATION + ++OUI:04021F* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:040A83* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + +@@ -51763,6 +51772,9 @@ OUI:041D10* + OUI:041E64* + ID_OUI_FROM_DATABASE=Apple + ++OUI:041E7A* ++ ID_OUI_FROM_DATABASE=DSPWorks ++ + OUI:04209A* + ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company + +@@ -53170,6 +53182,9 @@ OUI:0CD502* + OUI:0CD696* + ID_OUI_FROM_DATABASE=Amimon Ltd + ++OUI:0CD6BD* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:0CD7C2* + ID_OUI_FROM_DATABASE=Axium Technologies, Inc. + +@@ -54481,6 +54496,9 @@ OUI:1C4840* + OUI:1C48F9* + ID_OUI_FROM_DATABASE=GN Netcom A/S + ++OUI:1C497B* ++ ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd. ++ + OUI:1C4AF7* + ID_OUI_FROM_DATABASE=AMON INC + +@@ -55156,6 +55174,9 @@ OUI:241C04* + OUI:241F2C* + ID_OUI_FROM_DATABASE=Calsys, Inc. + ++OUI:241FA0* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:2421AB* + ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications + +@@ -56110,6 +56131,9 @@ OUI:2CCD43* + OUI:2CCD69* + ID_OUI_FROM_DATABASE=Aqavi.com + ++OUI:2CCF58* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:2CD05A* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -56473,6 +56497,9 @@ OUI:30F42F* + OUI:30F70D* + ID_OUI_FROM_DATABASE=Cisco Systems + ++OUI:30F772* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:30F7C5* + ID_OUI_FROM_DATABASE=Apple + +@@ -56932,6 +56959,9 @@ OUI:380A0A* + OUI:380A94* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:380AAB* ++ ID_OUI_FROM_DATABASE=Formlabs ++ + OUI:380B40* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -57964,6 +57994,9 @@ OUI:40D559* + OUI:40E230* + ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc. + ++OUI:40E3D6* ++ ID_OUI_FROM_DATABASE=Aruba Networks ++ + OUI:40E730* + ID_OUI_FROM_DATABASE=DEY Storage Systems, Inc. + +@@ -58024,6 +58057,9 @@ OUI:44184F* + OUI:4419B6* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + ++OUI:441CA8* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. ++ + OUI:441E91* + ID_OUI_FROM_DATABASE=ARVIDA Intelligent Electronics Technology Co.,Ltd. + +@@ -59275,6 +59311,9 @@ OUI:50A6E3* + OUI:50A715* + ID_OUI_FROM_DATABASE=Aboundi, Inc. + ++OUI:50A72B* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:50A733* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -59335,6 +59374,9 @@ OUI:50D274* + OUI:50D6D7* + ID_OUI_FROM_DATABASE=Takahata Precision + ++OUI:50DF95* ++ ID_OUI_FROM_DATABASE=Lytx ++ + OUI:50E0C7* + ID_OUI_FROM_DATABASE=TurControlSystme AG + +@@ -59413,6 +59455,9 @@ OUI:541B5D* + OUI:541DFB* + ID_OUI_FROM_DATABASE=Freestyle Energy Ltd + ++OUI:541E56* ++ ID_OUI_FROM_DATABASE=juniper networks ++ + OUI:541FD5* + ID_OUI_FROM_DATABASE=Advantage Electronics + +@@ -59599,6 +59644,9 @@ OUI:54A274* + OUI:54A31B* + ID_OUI_FROM_DATABASE=Shenzhen Linkworld Technology Co,.LTD + ++OUI:54A3FA* ++ ID_OUI_FROM_DATABASE=BQT Solutions (Australia)Pty Ltd ++ + OUI:54A51B* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + +@@ -59710,6 +59758,9 @@ OUI:54FB58* + OUI:54FDBF* + ID_OUI_FROM_DATABASE=Scheidt & Bachmann GmbH + ++OUI:54FF82* ++ ID_OUI_FROM_DATABASE=Davit Solution co. ++ + OUI:54FFCF* + ID_OUI_FROM_DATABASE=Mopria Alliance + +@@ -59809,6 +59860,9 @@ OUI:584822* + OUI:5848C0* + ID_OUI_FROM_DATABASE=COFLEC + ++OUI:584925* ++ ID_OUI_FROM_DATABASE=E3 Enterprise ++ + OUI:58493B* + ID_OUI_FROM_DATABASE=Palo Alto Networks + +@@ -59935,6 +59989,9 @@ OUI:5894CF* + OUI:58971E* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:5897BD* ++ ID_OUI_FROM_DATABASE=Cisco Systems ++ + OUI:589835* + ID_OUI_FROM_DATABASE=Technicolor + +@@ -59962,6 +60019,9 @@ OUI:58B035* + OUI:58B0D4* + ID_OUI_FROM_DATABASE=ZuniData Systems Inc. + ++OUI:58B633* ++ ID_OUI_FROM_DATABASE=Ruckus Wireless ++ + OUI:58B961* + ID_OUI_FROM_DATABASE=SOLEM Electronique + +@@ -61099,6 +61159,9 @@ OUI:64A341* + OUI:64A3CB* + ID_OUI_FROM_DATABASE=Apple + ++OUI:64A651* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:64A769* + ID_OUI_FROM_DATABASE=HTC Corporation + +@@ -61141,6 +61204,9 @@ OUI:64BABD* + OUI:64BC11* + ID_OUI_FROM_DATABASE=CombiQ AB + ++OUI:64C354* ++ ID_OUI_FROM_DATABASE=Avaya, Inc ++ + OUI:64C5AA* + ID_OUI_FROM_DATABASE=South African Broadcasting Corporation + +@@ -61600,6 +61666,9 @@ OUI:68F728* + OUI:68F895* + ID_OUI_FROM_DATABASE=Redflow Limited + ++OUI:68F956* ++ ID_OUI_FROM_DATABASE=Objetivos y Servicio de Valor Añadido ++ + OUI:68FB95* + ID_OUI_FROM_DATABASE=Generalplus Technology Inc. + +@@ -63883,6 +63952,9 @@ OUI:809FAB* + OUI:80A1D7* + ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd + ++OUI:80A589* ++ ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc. ++ + OUI:80A85D* + ID_OUI_FROM_DATABASE=Osterhout Design Group + +@@ -63973,6 +64045,9 @@ OUI:80E4DA* + OUI:80E650* + ID_OUI_FROM_DATABASE=Apple + ++OUI:80E86F* ++ ID_OUI_FROM_DATABASE=Cisco Systems ++ + OUI:80EA23* + ID_OUI_FROM_DATABASE=Wistron Neweb Corp. + +@@ -64282,6 +64357,9 @@ OUI:84A6C8* + OUI:84A783* + ID_OUI_FROM_DATABASE=Alcatel Lucent + ++OUI:84A788* ++ ID_OUI_FROM_DATABASE=Perples ++ + OUI:84A8E4* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + +@@ -65149,6 +65227,9 @@ OUI:902155* + OUI:902181* + ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd + ++OUI:9023EC* ++ ID_OUI_FROM_DATABASE=Availink, Inc. ++ + OUI:9027E4* + ID_OUI_FROM_DATABASE=Apple + +@@ -65272,6 +65353,9 @@ OUI:906DC8* + OUI:906EBB* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:906FA9* ++ ID_OUI_FROM_DATABASE=NANJING PUTIAN TELECOMMUNICATIONS TECHNOLOGY CO.,LTD. ++ + OUI:907025* + ID_OUI_FROM_DATABASE=Garea Microsys Co.,Ltd. + +@@ -65839,6 +65923,9 @@ OUI:94EBCD* + OUI:94F19E* + ID_OUI_FROM_DATABASE=HUIZHOU MAORONG INTELLIGENT TECHNOLOGY CO.,LTD + ++OUI:94F278* ++ ID_OUI_FROM_DATABASE=Elma Electronic ++ + OUI:94F665* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -67354,6 +67441,9 @@ OUI:A81374* + OUI:A8154D* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:A815D6* ++ ID_OUI_FROM_DATABASE=Shenzhen Meione Technology CO., LTD ++ + OUI:A816B2* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -67792,6 +67882,9 @@ OUI:AC5D10* + OUI:AC5E8C* + ID_OUI_FROM_DATABASE=Utillink + ++OUI:AC60B6* ++ ID_OUI_FROM_DATABASE=Ericsson AB ++ + OUI:AC6123* + ID_OUI_FROM_DATABASE=Drivven, Inc. + +@@ -68323,6 +68416,9 @@ OUI:B0C554* + OUI:B0C559* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:B0C5CA* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. ++ + OUI:B0C69A* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -68461,6 +68557,9 @@ OUI:B424E7* + OUI:B428F1* + ID_OUI_FROM_DATABASE=E-Prime Co., Ltd. + ++OUI:B4293D* ++ ID_OUI_FROM_DATABASE=Shenzhen Urovo Technology Co.,Ltd. ++ + OUI:B42A39* + ID_OUI_FROM_DATABASE=ORBIT MERRET, spol. s r. o. + +@@ -68926,6 +69025,9 @@ OUI:B87AC9* + OUI:B87CF2* + ID_OUI_FROM_DATABASE=Aerohive Networks Inc. + ++OUI:B88687* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:B8871E* + ID_OUI_FROM_DATABASE=Good Mind Industries Co., Ltd. + +@@ -69700,6 +69802,9 @@ OUI:C07009* + OUI:C07BBC* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:C07CD1* ++ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION ++ + OUI:C07E40* + ID_OUI_FROM_DATABASE=SHENZHEN XDK COMMUNICATION EQUIPMENT CO.,LTD + +@@ -69892,6 +69997,9 @@ OUI:C401CE* + OUI:C40415* + ID_OUI_FROM_DATABASE=NETGEAR INC., + ++OUI:C4047B* ++ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd ++ + OUI:C40528* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + +@@ -70378,6 +70486,9 @@ OUI:C848F5* + OUI:C84C75* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:C85195* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:C85645* + ID_OUI_FROM_DATABASE=Intermas France + +@@ -70486,6 +70597,9 @@ OUI:C8A729* + OUI:C8A823* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:C8A9FC* ++ ID_OUI_FROM_DATABASE=Goyoo Networks Inc. ++ + OUI:C8AA21* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -71260,6 +71374,9 @@ OUI:D08CFF* + OUI:D0929E* + ID_OUI_FROM_DATABASE=Microsoft Corporation + ++OUI:D09380* ++ ID_OUI_FROM_DATABASE=Ducere Technologies Pvt. Ltd. ++ + OUI:D093F8* + ID_OUI_FROM_DATABASE=Stonestreet One LLC + +@@ -71521,6 +71638,9 @@ OUI:D43D67* + OUI:D43D7E* + ID_OUI_FROM_DATABASE=Micro-Star Int'l Co, Ltd + ++OUI:D440F0* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:D443A8* + ID_OUI_FROM_DATABASE=Changzhou Haojie Electric Co., Ltd. + +@@ -71812,6 +71932,9 @@ OUI:D4F143* + OUI:D4F46F* + ID_OUI_FROM_DATABASE=Apple + ++OUI:D4F4BE* ++ ID_OUI_FROM_DATABASE=Palo Alto Networks ++ + OUI:D4F513* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -72022,6 +72145,9 @@ OUI:D881CE* + OUI:D88466* + ID_OUI_FROM_DATABASE=Extreme Networks + ++OUI:D888CE* ++ ID_OUI_FROM_DATABASE=RF Technology Pty Ltd ++ + OUI:D88A3B* + ID_OUI_FROM_DATABASE=UNIT-EM + +@@ -72319,6 +72445,9 @@ OUI:DC3C2E* + OUI:DC3C84* + ID_OUI_FROM_DATABASE=Ticom Geomatics, Inc. + ++OUI:DC3CF6* ++ ID_OUI_FROM_DATABASE=Atomic Rules LLC ++ + OUI:DC3E51* + ID_OUI_FROM_DATABASE=Solberg & Andersen AS + +@@ -72940,6 +73069,9 @@ OUI:E4121D* + OUI:E41289* + ID_OUI_FROM_DATABASE=topsystem Systemhaus GmbH + ++OUI:E41A2C* ++ ID_OUI_FROM_DATABASE=ZPE Systems, Inc. ++ + OUI:E41C4B* + ID_OUI_FROM_DATABASE=V2 TECHNOLOGY, INC. + +@@ -73120,6 +73252,9 @@ OUI:E496AE* + OUI:E497F0* + ID_OUI_FROM_DATABASE=Shanghai VLC Technologies Ltd. Co. + ++OUI:E498D1* ++ ID_OUI_FROM_DATABASE=Microsoft Mobile Oy ++ + OUI:E498D6* + ID_OUI_FROM_DATABASE=Apple, Inc + +@@ -73507,6 +73642,9 @@ OUI:E8BB3D* + OUI:E8BBA8* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD. + ++OUI:E8BDD1* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:E8BE81* + ID_OUI_FROM_DATABASE=SAGEMCOM + +@@ -74011,6 +74149,9 @@ OUI:F02624* + OUI:F0264C* + ID_OUI_FROM_DATABASE=Dr. Sigrist AG + ++OUI:F0272D* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:F02765* + ID_OUI_FROM_DATABASE=Murata Manufactuaring Co.,Ltd. + +@@ -74368,6 +74509,9 @@ OUI:F40F1B* + OUI:F40F9B* + ID_OUI_FROM_DATABASE=WAVELINK + ++OUI:F41535* ++ ID_OUI_FROM_DATABASE=SPON Communication Technology Co.,Ltd ++ + OUI:F41563* + ID_OUI_FROM_DATABASE=F5 Networks, Inc. + +@@ -74527,9 +74671,15 @@ OUI:F48139* + OUI:F48771* + ID_OUI_FROM_DATABASE=Infoblox + ++OUI:F48B32* ++ ID_OUI_FROM_DATABASE=XIAOMI INC ++ + OUI:F48E09* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:F48E92* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:F490CA* + ID_OUI_FROM_DATABASE=Tensorcom + +@@ -75460,6 +75610,9 @@ OUI:FCE998* + OUI:FCEDB9* + ID_OUI_FROM_DATABASE=Arrayent + ++OUI:FCF136* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:FCF152* + ID_OUI_FROM_DATABASE=Sony Corporation + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index b27a5c7902..4cc7cfd65c 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -998,6 +998,9 @@ pci:v00001000d0000005Fsv00001028sd00001F4C* + pci:v00001000d0000005Fsv00001028sd00001F4D* + ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (PERC H330 Embedded (for monolithic)) + ++pci:v00001000d0000005Fsv00001054sd0000306A* ++ ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (SAS 3004 iMR ROMB) ++ + pci:v00001000d00000060* + ID_MODEL_FROM_DATABASE=MegaRAID SAS 1078 + +@@ -6171,28 +6174,28 @@ pci:v00001002d00006819sv0000174Bsd0000E221* + ID_MODEL_FROM_DATABASE=Pitcairn PRO [Radeon HD 7850] (Radeon HD 7850 2GB GDDR5 DVI-I/DVI-D/HDMI/DP) + + pci:v00001002d00006820* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] + + pci:v00001002d00006820sv0000103Csd00001851* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon HD 7750M) ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon HD 7750M) + + pci:v00001002d00006820sv000017AAsd00003643* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon R9 A375) ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 A375) + + pci:v00001002d00006820sv000017AAsd00003801* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon R9 M275) ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 M275) + + pci:v00001002d00006821* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] + + pci:v00001002d00006821sv00001002sd0000031E* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro SX4000) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro SX4000) + + pci:v00001002d00006821sv00001028sd000005CC* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro M5100) + + pci:v00001002d00006821sv00001028sd000015CC* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X] (FirePro M5100) + + pci:v00001002d00006822* + ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860] +@@ -12116,6 +12119,9 @@ pci:v0000102Bd0000051E* + pci:v0000102Bd0000051F* + ID_MODEL_FROM_DATABASE=MGA 2164W [Millennium II] AGP + ++pci:v0000102Bd0000051Fsv0000102Bsd00002100* ++ ID_MODEL_FROM_DATABASE=MGA 2164W [Millennium II] AGP (MGA-2164WA [Millennium II A]) ++ + pci:v0000102Bd00000520* + ID_MODEL_FROM_DATABASE=MGA G200 + +@@ -12237,7 +12243,7 @@ pci:v0000102Bd00000521sv0000102Bsd0000FF02* + ID_MODEL_FROM_DATABASE=MGA G200 AGP (Mystique G200 AGP) + + pci:v0000102Bd00000521sv0000102Bsd0000FF03* +- ID_MODEL_FROM_DATABASE=MGA G200 AGP (Millennium G200 AGP) ++ ID_MODEL_FROM_DATABASE=MGA G200 AGP (Millennium G200A AGP) + + pci:v0000102Bd00000521sv0000102Bsd0000FF04* + ID_MODEL_FROM_DATABASE=MGA G200 AGP (Marvel G200 AGP) +@@ -26115,16 +26121,16 @@ pci:v000010DEd0000056Asv0000147Bsd00001C3E* + ID_MODEL_FROM_DATABASE=MCP73 [nForce 630i] USB 2.0 Controller (EHCI) (I-N73V motherboard) + + pci:v000010DEd0000056C* +- ID_MODEL_FROM_DATABASE=MCP73 IDE ++ ID_MODEL_FROM_DATABASE=MCP73 IDE Controller + + pci:v000010DEd0000056Csv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=MCP73 IDE (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (MCP73PVT-SM) + + pci:v000010DEd0000056Csv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=MCP73 IDE (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (I-N73V motherboard) + + pci:v000010DEd0000056Csv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=MCP73 IDE (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=MCP73 IDE Controller (JW-IN7150-HD) + + pci:v000010DEd0000056D* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge +@@ -26133,7 +26139,7 @@ pci:v000010DEd0000056Dsv00001019sd0000297A* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) + + pci:v000010DEd0000056Dsv000010DEsd0000CB73* +- ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x16 port) ++ ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port) + + pci:v000010DEd0000056E* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge +@@ -26141,6 +26147,9 @@ pci:v000010DEd0000056E* + pci:v000010DEd0000056Esv00001019sd0000297A* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM) + ++pci:v000010DEd0000056Esv000010DEsd00000000* ++ ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x16 port) ++ + pci:v000010DEd0000056F* + ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge + +@@ -26976,112 +26985,112 @@ pci:v000010DEd000007C8sv00001AFAsd00007150* + ID_MODEL_FROM_DATABASE=MCP73 Memory Controller (JW-IN7150-HD) + + pci:v000010DEd000007CB* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007CBsv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007CBsv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007CBsv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007CD* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007CDsv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007CDsv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007CDsv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007CE* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007CEsv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007CEsv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007CEsv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007CF* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007CFsv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007CFsv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007CFsv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D0* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007D0sv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007D0sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007D0sv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D1* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007D1sv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007D1sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007D1sv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D2* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007D2sv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007D2sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007D2sv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D3* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007D3sv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007D3sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007D3sv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D6* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller + + pci:v000010DEd000007D6sv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (MCP73PVT-SM) + + pci:v000010DEd000007D6sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (I-N73V motherboard) + + pci:v000010DEd000007D6sv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=nForce 630i memory controller (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=nForce 610i/630i memory controller (JW-IN7150-HD) + + pci:v000010DEd000007D7* + ID_MODEL_FROM_DATABASE=MCP73 LPC Bridge +@@ -27165,10 +27174,10 @@ pci:v000010DEd000007E5* + ID_MODEL_FROM_DATABASE=C73 [GeForce 7100 / nForce 620i] + + pci:v000010DEd000007F0* +- ID_MODEL_FROM_DATABASE=MCP73 IDE ++ ID_MODEL_FROM_DATABASE=MCP73 SATA Controller (IDE mode) + + pci:v000010DEd000007F0sv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=MCP73 IDE (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=MCP73 SATA Controller (IDE mode) (I-N73V motherboard) + + pci:v000010DEd000007F4* + ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA +@@ -27176,9 +27185,15 @@ pci:v000010DEd000007F4* + pci:v000010DEd000007F4sv00001019sd0000297A* + ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA (MCP73PVT-SM) + ++pci:v000010DEd000007F4sv0000147Bsd00001C3E* ++ ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i SATA (I-N73V motherboard) ++ + pci:v000010DEd000007F8* + ID_MODEL_FROM_DATABASE=MCP73 SATA RAID Controller + ++pci:v000010DEd000007F8sv0000147Bsd00001C3E* ++ ID_MODEL_FROM_DATABASE=MCP73 SATA RAID Controller (I-N73V motherboard) ++ + pci:v000010DEd000007FC* + ID_MODEL_FROM_DATABASE=MCP73 High Definition Audio + +@@ -27192,16 +27207,16 @@ pci:v000010DEd000007FCsv0000147Bsd00001C3E* + ID_MODEL_FROM_DATABASE=MCP73 High Definition Audio (I-N73V motherboard) + + pci:v000010DEd000007FE* +- ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB ++ ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller + + pci:v000010DEd000007FEsv00001019sd0000297A* +- ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (MCP73PVT-SM) ++ ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (MCP73PVT-SM) + + pci:v000010DEd000007FEsv0000147Bsd00001C3E* +- ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (I-N73V motherboard) ++ ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (I-N73V motherboard) + + pci:v000010DEd000007FEsv00001AFAsd00007150* +- ID_MODEL_FROM_DATABASE=GeForce 7100/nForce 630i USB (JW-IN7150-HD) ++ ID_MODEL_FROM_DATABASE=MCP73 OHCI USB 1.1 Controller (JW-IN7150-HD) + + pci:v000010DEd00000840* + ID_MODEL_FROM_DATABASE=C77 [GeForce 8200M] +@@ -30269,12 +30284,18 @@ pci:v000010DEd000013D8* + pci:v000010DEd000013D9* + ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M] + ++pci:v000010DEd000013F2* ++ ID_MODEL_FROM_DATABASE=GM204GL [Tesla M60] ++ + pci:v000010DEd00001401* + ID_MODEL_FROM_DATABASE=GM206 [GeForce GTX 960] + + pci:v000010DEd000017C2* + ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX TITAN X] + ++pci:v000010DEd000017C8* ++ ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX 980 Ti] ++ + pci:v000010DEd000017F0* + ID_MODEL_FROM_DATABASE=GM200GL [Quadro M6000] + +@@ -31673,12 +31694,21 @@ pci:v00001103d00000622* + pci:v00001103d00000640* + ID_MODEL_FROM_DATABASE=RocketRAID 640 4 Port SATA-III Controller + ++pci:v00001103d00000641* ++ ID_MODEL_FROM_DATABASE=RocketRAID 640L 4 Port SATA-III Controller ++ ++pci:v00001103d00000642* ++ ID_MODEL_FROM_DATABASE=RocketRAID 642L 2 Port SATA-III Controller (eSATA) ++ + pci:v00001103d00000644* + ID_MODEL_FROM_DATABASE=RocketRAID 644 4 Port SATA-III Controller (eSATA) + + pci:v00001103d00000645* + ID_MODEL_FROM_DATABASE=RocketRAID 644L 4 Port SATA-III Controller (eSATA) + ++pci:v00001103d00000646* ++ ID_MODEL_FROM_DATABASE=RocketRAID 644LS SATA-III Controller (4 eSATA devices connected by 1 SAS cable) ++ + pci:v00001103d00001720* + ID_MODEL_FROM_DATABASE=RocketRAID 1720 (2x SATA II RAID Controller) + +@@ -32441,6 +32471,9 @@ pci:v00001106d00003058sv00001462sd00003092* + pci:v00001106d00003058sv00001462sd00003300* + ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (MS-6330 Onboard Audio) + ++pci:v00001106d00003058sv00001462sd00003400* ++ ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (MS-6340 (VT8363) motherboard) ++ + pci:v00001106d00003058sv000015DDsd00007609* + ID_MODEL_FROM_DATABASE=VT82C686 AC97 Audio Controller (Onboard Audio) + +@@ -46559,9 +46592,6 @@ pci:v0000148E* + pci:v0000148F* + ID_VENDOR_FROM_DATABASE=Plant Equipment, Inc. + +-pci:v0000148Fd00005370* +- ID_MODEL_FROM_DATABASE=Dexlink AUWL15I1 +- + pci:v00001490* + ID_VENDOR_FROM_DATABASE=Stone Microsystems PTY Ltd. + +@@ -63881,6 +63911,9 @@ pci:v00008086d00001A30* + pci:v00008086d00001A30sv00001028sd0000010E* + ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (Optiplex GX240) + ++pci:v00008086d00001A30sv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (BL7 motherboard) ++ + pci:v00008086d00001A30sv000015D9sd00003280* + ID_MODEL_FROM_DATABASE=82845 845 [Brookdale] Chipset Host Bridge (Supermicro P4SBE Mainboard) + +@@ -65304,43 +65337,46 @@ pci:v00008086d00002440sv00008086sd00005744* + ID_MODEL_FROM_DATABASE=82801BA ISA Bridge (LPC) (S845WD1-E) + + pci:v00008086d00002442* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 + + pci:v00008086d00002442sv00001014sd000001C6* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Netvista A40/A40p) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Netvista A40/A40p) + + pci:v00008086d00002442sv00001025sd00001016* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Travelmate 612 TX) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Travelmate 612 TX) + + pci:v00008086d00002442sv00001028sd000000C7* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Dimension 8100) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Dimension 8100) + + pci:v00008086d00002442sv00001028sd000000D8* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Precision 530) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Precision 530) + + pci:v00008086d00002442sv00001028sd0000010E* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Optiplex GX240) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Optiplex GX240) + + pci:v00008086d00002442sv0000103Csd0000126F* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (e-pc 40) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (e-pc 40) + + pci:v00008086d00002442sv00001043sd00008027* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TUSL2-C Mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (TUSL2-C Mainboard) + + pci:v00008086d00002442sv0000104Dsd000080DF* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Vaio PCG-FX403) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (Vaio PCG-FX403) ++ ++pci:v00008086d00002442sv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (BL7 motherboard) + + pci:v00008086d00002442sv0000147Bsd00000507* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TH7II-RAID) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (TH7II-RAID) + + pci:v00008086d00002442sv00008086sd00004532* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EEA2 mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D815EEA2 mainboard) + + pci:v00008086d00002442sv00008086sd00004557* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EGEW Mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D815EGEW Mainboard) + + pci:v00008086d00002442sv00008086sd00005744* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (S845WD1-E mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (S845WD1-E mainboard) + + pci:v00008086d00002443* + ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller +@@ -65369,6 +65405,9 @@ pci:v00008086d00002443sv00001043sd00008027* + pci:v00008086d00002443sv0000104Dsd000080DF* + ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (Vaio PCG-FX403) + ++pci:v00008086d00002443sv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (BL7 motherboard) ++ + pci:v00008086d00002443sv0000147Bsd00000507* + ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (TH7II-RAID) + +@@ -65385,37 +65424,40 @@ pci:v00008086d00002443sv00008086sd00005744* + ID_MODEL_FROM_DATABASE=82801BA/BAM SMBus Controller (S845WD1-E mainboard) + + pci:v00008086d00002444* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 + + pci:v00008086d00002444sv00001025sd00001016* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Travelmate 612 TX) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Travelmate 612 TX) + + pci:v00008086d00002444sv00001028sd000000C7* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Dimension 8100) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Dimension 8100) + + pci:v00008086d00002444sv00001028sd000000D8* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Precision 530) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Precision 530) + + pci:v00008086d00002444sv00001028sd0000010E* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Optiplex GX240) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Optiplex GX240) + + pci:v00008086d00002444sv0000103Csd0000126F* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (e-pc 40) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (e-pc 40) + + pci:v00008086d00002444sv00001043sd00008027* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TUSL2-C Mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (TUSL2-C Mainboard) + + pci:v00008086d00002444sv0000104Dsd000080DF* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (Vaio PCG-FX403) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (Vaio PCG-FX403) ++ ++pci:v00008086d00002444sv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (BL7 motherboard) + + pci:v00008086d00002444sv0000147Bsd00000507* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (TH7II-RAID) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (TH7II-RAID) + + pci:v00008086d00002444sv00008086sd00004532* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (D815EEA2 mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (D815EEA2 mainboard) + + pci:v00008086d00002444sv00008086sd00005744* +- ID_MODEL_FROM_DATABASE=82801BA/BAM USB Controller #1 (S845WD1-E mainboard) ++ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #2 (S845WD1-E mainboard) + + pci:v00008086d00002445* + ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller +@@ -65444,6 +65486,9 @@ pci:v00008086d00002445sv0000104Dsd000080DF* + pci:v00008086d00002445sv00001462sd00003370* + ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (STAC9721 AC) + ++pci:v00008086d00002445sv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (BL7 motherboard) ++ + pci:v00008086d00002445sv0000147Bsd00000507* + ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (TH7II-RAID) + +@@ -65645,6 +65690,9 @@ pci:v00008086d0000244Bsv0000103Csd0000126F* + pci:v00008086d0000244Bsv00001043sd00008027* + ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (TUSL2-C Mainboard) + ++pci:v00008086d0000244Bsv0000147Bsd00000505* ++ ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (BL7 motherboard) ++ + pci:v00008086d0000244Bsv0000147Bsd00000507* + ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (TH7II-RAID) + +@@ -79125,7 +79173,7 @@ pci:v0000DEAFd00009052* + ID_MODEL_FROM_DATABASE=PC Weasel Watchdog Timer + + pci:v0000DEDA* +- ID_VENDOR_FROM_DATABASE=SoftHard Technology Ltd. ++ ID_VENDOR_FROM_DATABASE=XIMEA + + pci:v0000E000* + ID_VENDOR_FROM_DATABASE=Winbond diff --git a/0038-README-update-links-to-reference-new-home-GitHub.patch b/0038-README-update-links-to-reference-new-home-GitHub.patch new file mode 100644 index 0000000..e4e3bcd --- /dev/null +++ b/0038-README-update-links-to-reference-new-home-GitHub.patch @@ -0,0 +1,37 @@ +From 6f0c06705a671ae53942f52bd7c66eea986150fa Mon Sep 17 00:00:00 2001 +From: Jonathan Boulle +Date: Tue, 2 Jun 2015 15:57:50 -0700 +Subject: [PATCH] README: update links to reference new home (GitHub) + +(cherry picked from commit eb0914fc85812570538c37287dd3cfa377289418) +--- + README | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/README b/README +index b909b434db..528f957714 100644 +--- a/README ++++ b/README +@@ -7,11 +7,11 @@ WEB SITE: + http://www.freedesktop.org/wiki/Software/systemd + + GIT: +- git://anongit.freedesktop.org/systemd/systemd +- ssh://git.freedesktop.org/git/systemd/systemd ++ git@github.com:systemd/systemd.git ++ https://github.com/systemd/systemd.git + + GITWEB: +- http://cgit.freedesktop.org/systemd/systemd ++ https://github.com/systemd/systemd + + MAILING LIST: + http://lists.freedesktop.org/mailman/listinfo/systemd-devel +@@ -22,6 +22,7 @@ IRC: + + BUG REPORTS: + https://bugs.freedesktop.org/enter_bug.cgi?product=systemd ++ https://github.com/systemd/systemd/issues + + AUTHOR: + Lennart Poettering diff --git a/0039-point-to-github-issues-instead-of-freedesktop-bugzil.patch b/0039-point-to-github-issues-instead-of-freedesktop-bugzil.patch new file mode 100644 index 0000000..1788d67 --- /dev/null +++ b/0039-point-to-github-issues-instead-of-freedesktop-bugzil.patch @@ -0,0 +1,36 @@ +From 182abe6e6881a696fc456a1aadaa90bcebd51ea4 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 3 Jun 2015 14:48:55 +0200 +Subject: [PATCH] point to github issues instead of freedesktop bugzilla + +(cherry picked from commit 29d01b70640878f63e74ce20cb45fd747311fa18) +--- + README | 1 - + configure.ac | 2 +- + 2 files changed, 1 insertion(+), 2 deletions(-) + +diff --git a/README b/README +index 528f957714..c19beffa20 100644 +--- a/README ++++ b/README +@@ -21,7 +21,6 @@ IRC: + #systemd on irc.freenode.org + + BUG REPORTS: +- https://bugs.freedesktop.org/enter_bug.cgi?product=systemd + https://github.com/systemd/systemd/issues + + AUTHOR: +diff --git a/configure.ac b/configure.ac +index 0818dd80cf..fa3232e3c1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -21,7 +21,7 @@ AC_PREREQ([2.64]) + + AC_INIT([systemd], + [220], +- [http://bugs.freedesktop.org/enter_bug.cgi?product=systemd], ++ [http://github.com/systemd/systemd/issues] + [systemd], + [http://www.freedesktop.org/wiki/Software/systemd]) + diff --git a/0040-configure.ac-add-missing-komma.patch b/0040-configure.ac-add-missing-komma.patch new file mode 100644 index 0000000..d4f7c31 --- /dev/null +++ b/0040-configure.ac-add-missing-komma.patch @@ -0,0 +1,23 @@ +From d203089834c735b422f48cafe917aab1134591b3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 3 Jun 2015 14:50:58 +0200 +Subject: [PATCH] configure.ac: add missing komma + +(cherry picked from commit 1a435084b7f55bc24042f9bc47c18e4e2381f667) +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index fa3232e3c1..ffde0a667b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -21,7 +21,7 @@ AC_PREREQ([2.64]) + + AC_INIT([systemd], + [220], +- [http://github.com/systemd/systemd/issues] ++ [http://github.com/systemd/systemd/issues], + [systemd], + [http://www.freedesktop.org/wiki/Software/systemd]) + diff --git a/0041-util-fix-another-cunescape-regression.patch b/0041-util-fix-another-cunescape-regression.patch new file mode 100644 index 0000000..0d17cbf --- /dev/null +++ b/0041-util-fix-another-cunescape-regression.patch @@ -0,0 +1,48 @@ +From c47edbd3bfaf64ad8fa3d105029bed8667baf275 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Wed, 3 Jun 2015 13:33:26 +0200 +Subject: [PATCH] util: fix another cunescape() regression + +Fix a regression caused by 4034a06d ("util: rework word parsing and c +unescaping code") which broke octal escape sequences. + +The reason for this breakage is that cunescape_one() expects 4 characters +in an octal encoding, which is a stray left-over from the old code which +operated on different variables to make the length check. + +While at it, add a test case to prevent the same thing from happening +again. + +(cherry picked from commit 3b51f8ddd5408eaae06e774e40144c7788748000) +--- + src/shared/util.c | 2 +- + src/test/test-util.c | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 74a2190031..57782ba687 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -1186,7 +1186,7 @@ static int cunescape_one(const char *p, size_t length, char *ret, uint32_t *ret_ + int a, b, c; + uint32_t m; + +- if (length != (size_t) -1 && length < 4) ++ if (length != (size_t) -1 && length < 3) + return -EINVAL; + + a = unoctchar(p[0]); +diff --git a/src/test/test-util.c b/src/test/test-util.c +index 36773c109d..fab485fa14 100644 +--- a/src/test/test-util.c ++++ b/src/test/test-util.c +@@ -459,6 +459,9 @@ static void test_cunescape(void) { + assert_se(cunescape("\\u0000", 0, &unescaped) < 0); + assert_se(cunescape("\\u00DF\\U000000df\\u03a0\\U00000041", UNESCAPE_RELAX, &unescaped) >= 0); + assert_se(streq_ptr(unescaped, "ßßΠA")); ++ ++ assert_se(cunescape("\\073", 0, &unescaped) >= 0); ++ assert_se(streq_ptr(unescaped, ";")); + } + + static void test_foreach_word(void) { diff --git a/0042-test-unit-file.c-fixup-the-test-for-commit-3b51f8ddd.patch b/0042-test-unit-file.c-fixup-the-test-for-commit-3b51f8ddd.patch new file mode 100644 index 0000000..59c5eb3 --- /dev/null +++ b/0042-test-unit-file.c-fixup-the-test-for-commit-3b51f8ddd.patch @@ -0,0 +1,23 @@ +From 2f07442729010a010c88b34a0d5fc51d30e622ea Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Wed, 3 Jun 2015 16:36:20 +0200 +Subject: [PATCH] test-unit-file.c: fixup the test for commit 3b51f8ddd5 + +(cherry picked from commit ce54255fa599d32738a311c77331fa611e6cfa5e) +--- + src/test/test-unit-file.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index 31b12d50d7..a8025c825b 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -232,7 +232,7 @@ static void test_config_parse_exec(void) { + &c, NULL); + assert_se(r >= 0); + c1 = c1->command_next; +- check_execcommand(c1, "/bin/find", NULL, "\\073", NULL, false); ++ check_execcommand(c1, "/bin/find", NULL, ";", NULL, false); + + log_info("/* spaces in the filename */"); + r = config_parse_exec(NULL, "fake", 5, "section", 1, diff --git a/0043-systemctl-Use-usr-bin-editor-if-available.patch b/0043-systemctl-Use-usr-bin-editor-if-available.patch new file mode 100644 index 0000000..225c373 --- /dev/null +++ b/0043-systemctl-Use-usr-bin-editor-if-available.patch @@ -0,0 +1,47 @@ +From 1e534b8a0da393c90b6dedeb5fdd1abd08293ae7 Mon Sep 17 00:00:00 2001 +From: Michael Biebl +Date: Wed, 3 Jun 2015 14:00:59 +0200 +Subject: [PATCH] systemctl: Use /usr/bin/editor if available + +If the EDITOR environment variable is not set, the Debian policy +recommends to use the /usr/bin/editor program as default editor. +This file is managed via the dpkg alternatives mechanism and typically +used in Debian/Ubuntu and derivatives to configure the default editor. + +See section 11.4 of the Debian policy [1]. + +Therefor prefer /usr/bin/editor over specific editors if available. + +[1] https://www.debian.org/doc/debian-policy/ch-customized-programs.html + +(cherry picked from commit 9391a1c3d6c94c478b0016a81df3f874fd99260e) +--- + man/systemctl.xml | 1 + + src/systemctl/systemctl.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 94a77bce0c..9b79c2df0f 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -1730,6 +1730,7 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service + $VISUAL are present or if it is set to an empty + string or if their execution failed, systemctl will try to execute well + known editors in this order: ++ editor1, + nano1, + vim1, + vi1. +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index f8e10a4710..cf5aa07ac6 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -5870,7 +5870,7 @@ static int run_editor(char **paths) { + execvp(editor, (char* const*) args); + } + +- FOREACH_STRING(p, "nano", "vim", "vi") { ++ FOREACH_STRING(p, "editor", "nano", "vim", "vi") { + args[0] = p; + execvp(p, (char* const*) args); + /* We do not fail if the editor doesn't exist diff --git a/0044-libudev-enumerate-accept-NULL-parameters-in-add_matc.patch b/0044-libudev-enumerate-accept-NULL-parameters-in-add_matc.patch new file mode 100644 index 0000000..5dcd375 --- /dev/null +++ b/0044-libudev-enumerate-accept-NULL-parameters-in-add_matc.patch @@ -0,0 +1,137 @@ +From 929227823d61ecc408d85b328ab04604e7f540cf Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Wed, 3 Jun 2015 22:08:46 +0200 +Subject: [PATCH] libudev: enumerate - accept NULL parameters in add_match() + +This was a regression introduced when moving to sd-device. + +(cherry picked from commit 54f0b4d9a3e3e1b955d0b0021d9678571d91a5ef) +--- + src/libsystemd/sd-device/device-enumerator.c | 18 ++++++++++-------- + src/libudev/libudev-enumerate.c | 21 +++++++++++++++++++++ + 2 files changed, 31 insertions(+), 8 deletions(-) + +diff --git a/src/libsystemd/sd-device/device-enumerator.c b/src/libsystemd/sd-device/device-enumerator.c +index 3692d46e06..7fd77e9480 100644 +--- a/src/libsystemd/sd-device/device-enumerator.c ++++ b/src/libsystemd/sd-device/device-enumerator.c +@@ -137,7 +137,6 @@ _public_ int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumer + + assert_return(enumerator, -EINVAL); + assert_return(_sysattr, -EINVAL); +- assert_return(_value, -EINVAL); + + if (match) + hashmap = &enumerator->match_sysattr; +@@ -152,9 +151,11 @@ _public_ int sd_device_enumerator_add_match_sysattr(sd_device_enumerator *enumer + if (!sysattr) + return -ENOMEM; + +- value = strdup(_value); +- if (!value) +- return -ENOMEM; ++ if (_value) { ++ value = strdup(_value); ++ if (!value) ++ return -ENOMEM; ++ } + + r = hashmap_put(*hashmap, sysattr, value); + if (r < 0) +@@ -174,7 +175,6 @@ _public_ int sd_device_enumerator_add_match_property(sd_device_enumerator *enume + + assert_return(enumerator, -EINVAL); + assert_return(_property, -EINVAL); +- assert_return(_value, -EINVAL); + + r = hashmap_ensure_allocated(&enumerator->match_property, NULL); + if (r < 0) +@@ -184,9 +184,11 @@ _public_ int sd_device_enumerator_add_match_property(sd_device_enumerator *enume + if (!property) + return -ENOMEM; + +- value = strdup(_value); +- if (!value) +- return -ENOMEM; ++ if (_value) { ++ value = strdup(_value); ++ if (!value) ++ return -ENOMEM; ++ } + + r = hashmap_put(enumerator->match_property, property, value); + if (r < 0) +diff --git a/src/libudev/libudev-enumerate.c b/src/libudev/libudev-enumerate.c +index 255fbe808d..df088946df 100644 +--- a/src/libudev/libudev-enumerate.c ++++ b/src/libudev/libudev-enumerate.c +@@ -196,6 +196,9 @@ _public_ struct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enume + _public_ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!subsystem) ++ return 0; ++ + return sd_device_enumerator_add_match_subsystem(udev_enumerate->enumerator, subsystem, true); + } + +@@ -211,6 +214,9 @@ _public_ int udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enum + _public_ int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!subsystem) ++ return 0; ++ + return sd_device_enumerator_add_match_subsystem(udev_enumerate->enumerator, subsystem, false); + } + +@@ -227,6 +233,9 @@ _public_ int udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_en + _public_ int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!sysattr) ++ return 0; ++ + return sd_device_enumerator_add_match_sysattr(udev_enumerate->enumerator, sysattr, value, true); + } + +@@ -243,6 +252,9 @@ _public_ int udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumer + _public_ int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!sysattr) ++ return 0; ++ + return sd_device_enumerator_add_match_sysattr(udev_enumerate->enumerator, sysattr, value, false); + } + +@@ -259,6 +271,9 @@ _public_ int udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enum + _public_ int udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!property) ++ return 0; ++ + return sd_device_enumerator_add_match_property(udev_enumerate->enumerator, property, value); + } + +@@ -274,6 +289,9 @@ _public_ int udev_enumerate_add_match_property(struct udev_enumerate *udev_enume + _public_ int udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!tag) ++ return 0; ++ + return sd_device_enumerator_add_match_tag(udev_enumerate->enumerator, tag); + } + +@@ -335,6 +353,9 @@ _public_ int udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev + _public_ int udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname) { + assert_return(udev_enumerate, -EINVAL); + ++ if (!sysname) ++ return 0; ++ + return sd_device_enumerator_add_match_sysname(udev_enumerate->enumerator, sysname); + } + diff --git a/0045-Add-dev-xvd-to-60-persistent-storage-whitelist.patch b/0045-Add-dev-xvd-to-60-persistent-storage-whitelist.patch new file mode 100644 index 0000000..f0c2e6a --- /dev/null +++ b/0045-Add-dev-xvd-to-60-persistent-storage-whitelist.patch @@ -0,0 +1,25 @@ +From fa7f0bc082bbcfaa997f949b8b4a035fd8a01eda Mon Sep 17 00:00:00 2001 +From: Ed Swierk +Date: Wed, 3 Jun 2015 08:08:37 -0700 +Subject: [PATCH] Add /dev/xvd* to 60-persistent-storage whitelist Without + this, systemd-udevd does not create persistent storage symlinks for xen block + devices. + +(cherry picked from commit ff2aa01e61f8aff149b63231365f1cef008296a2) +--- + rules/60-persistent-storage.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules +index 2aa15f3411..64c5f1cfdd 100644 +--- a/rules/60-persistent-storage.rules ++++ b/rules/60-persistent-storage.rules +@@ -6,7 +6,7 @@ + ACTION=="remove", GOTO="persistent_storage_end" + + SUBSYSTEM!="block", GOTO="persistent_storage_end" +-KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|bcache*", GOTO="persistent_storage_end" ++KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|bcache*|xvd*", GOTO="persistent_storage_end" + + # ignore partitions that span the entire disk + TEST=="whole_disk", GOTO="persistent_storage_end" diff --git a/0046-hwdb-add-Apple-MagicMouse-entry.patch b/0046-hwdb-add-Apple-MagicMouse-entry.patch new file mode 100644 index 0000000..ef9c7db --- /dev/null +++ b/0046-hwdb-add-Apple-MagicMouse-entry.patch @@ -0,0 +1,31 @@ +From 78ec5ea630547d9ec60c4e6afd6abf054681dbd6 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Thu, 4 Jun 2015 16:05:08 +1000 +Subject: [PATCH] hwdb: add Apple MagicMouse entry + +(cherry picked from commit 68a6ac91a1b8454a5f21846ffef3e1f024707b27) +--- + hwdb/70-mouse.hwdb | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb +index 8174f2762e..2784b941a1 100644 +--- a/hwdb/70-mouse.hwdb ++++ b/hwdb/70-mouse.hwdb +@@ -102,6 +102,16 @@ + # For mice with switchable resolution, sort by the starred entry. + + ########################################## ++# Apple ++########################################## ++ ++# Apple MagicMouse ++# Note: this device changes name once connected to a mac, the name ends up ++# as $username`s mouse ++mouse:bluetooth:v05acp030d:name:*: ++ MOUSE_DPI=1300@1000 ++ ++########################################## + # Chicony + ########################################## + diff --git a/0047-logind-Add-a-udev-rule-to-tag-all-DRM-cards-with-mas.patch b/0047-logind-Add-a-udev-rule-to-tag-all-DRM-cards-with-mas.patch new file mode 100644 index 0000000..e6d0f69 --- /dev/null +++ b/0047-logind-Add-a-udev-rule-to-tag-all-DRM-cards-with-mas.patch @@ -0,0 +1,56 @@ +From 2259b85e4722ec81a11229e3f2d8abb1b3e93a8b Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Tue, 2 Jun 2015 15:24:48 +0100 +Subject: [PATCH] logind: Add a udev rule to tag all DRM cards with + master-of-seat +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is needed for generic DRM devices like the VirtualBox vboxvideo +driver, which exposes itself as a generic, ID-less DRM device at +/dev/dri/card0 (after applying this commit): + $ udevadm info --query=all --path \ + /sys/devices/pci0000:00/0000:00:02.0/drm/card0 + P: /devices/pci0000:00/0000:00:02.0/drm/card0 + N: dri/card0 + E: DEVNAME=/dev/dri/card0 + E: DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0 + E: DEVTYPE=drm_minor + E: ID_FOR_SEAT=drm-pci-0000_00_02_0 + E: ID_PATH=pci-0000:00:02.0 + E: ID_PATH_TAG=pci-0000_00_02_0 + E: MAJOR=226 + E: MINOR=0 + E: SUBSYSTEM=drm + E: TAGS=:master-of-seat:seat:uaccess: + E: USEC_INITIALIZED=59893 + +Without this patch, the capabilities for a seat on a VirtualBox +installation of systemd v219 incorrectly show it as non-graphical, even +though I can type these commands from an xterm: + $ loginctl show-seat seat0 + Id=seat0 + CanMultiSession=yes + CanTTY=yes + CanGraphical=no + … + +https://bugs.freedesktop.org/show_bug.cgi?id=90822 +(cherry picked from commit ed817cd4e58c5f5c868d5d9e59a1d7e66b1da165) +--- + src/login/71-seat.rules.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/login/71-seat.rules.in b/src/login/71-seat.rules.in +index ad26acbbb3..ab7b66f651 100644 +--- a/src/login/71-seat.rules.in ++++ b/src/login/71-seat.rules.in +@@ -11,6 +11,7 @@ TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat" + SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat" + SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat" + SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat", TAG+="master-of-seat" ++SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat" + SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" + + # 'Plugable' USB hub, sound, network, graphics adapter diff --git a/0048-logind-Save-the-user-s-state-when-a-session-enters-S.patch b/0048-logind-Save-the-user-s-state-when-a-session-enters-S.patch new file mode 100644 index 0000000..8c2db73 --- /dev/null +++ b/0048-logind-Save-the-user-s-state-when-a-session-enters-S.patch @@ -0,0 +1,44 @@ +From a3f788f9a2f5263fd91b5fbd2fce87af9dceca68 Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Tue, 2 Jun 2015 14:17:10 +0100 +Subject: [PATCH] =?UTF-8?q?logind:=20Save=20the=20user=E2=80=99s=20state?= + =?UTF-8?q?=20when=20a=20session=20enters=20SESSION=5FACTIVE?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When (for example) switching from X11 to a new VT and logging in there, +creating a new session, the user state file (/run/systemd/users/$uid) is +not updated after the session becomes active. The latest time it is +saved is when the session is in SESSION_OPENING. + +This results in a /run/systemd/users/$uid file which contains +STATE=online for the current user on the current active VT, which is +obviously wrong. + +As functions like sd_uid_get_state() use this file to get the user’s +state, this could result in things like PolicyKit making incorrect +decisions about the user’s state. (See +https://bugs.freedesktop.org/show_bug.cgi?id=76358.) + +Fix this by re-saving the state for a session’s user after completing +the state_job for that session. + +https://bugs.freedesktop.org/show_bug.cgi?id=90818 +(cherry picked from commit 41dfeaa194c18de49706b5cecf4e53accd12b7f6) +--- + src/login/logind-dbus.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 3555bcc2f5..47646a81bb 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -2522,6 +2522,7 @@ int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *err + session_jobs_reply(session, unit, result); + + session_save(session); ++ user_save(session->user); + session_add_to_gc_queue(session); + } + diff --git a/0049-small-fix-ru-translation.patch b/0049-small-fix-ru-translation.patch new file mode 100644 index 0000000..ebe962a --- /dev/null +++ b/0049-small-fix-ru-translation.patch @@ -0,0 +1,41 @@ +From f6c1eee14b2c568008f8f43f6c4ee0aebbf2acff Mon Sep 17 00:00:00 2001 +From: kloun +Date: Thu, 4 Jun 2015 17:56:59 +0300 +Subject: [PATCH] small fix ru translation (cherry picked from commit + fcf3f5958e0441c9cc00f035ef6c86c278442366) + +--- + catalog/systemd.ru.catalog | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/catalog/systemd.ru.catalog b/catalog/systemd.ru.catalog +index f99532469a..03eea04c9f 100644 +--- a/catalog/systemd.ru.catalog ++++ b/catalog/systemd.ru.catalog +@@ -81,7 +81,7 @@ Documentation: man:core(5) + Записан дамп памяти. + + Вероятно, это произошло из-за ошибки, допущенной в коде программы. +-Рекомендуется сообщить ее разработчикам о возникшей проблеме. ++Рекомендуется сообщить её разработчикам о возникшей проблеме. + + # Subject: A new session @SESSION_ID@ has been created for user @USER_ID@ + -- 8d45620c1a4348dbb17410da57c60c66 +@@ -146,7 +146,7 @@ Defined-By: systemd + Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel + + Все системные службы, запуск которых предписан настройками, были запущены. +-Впрочем, это еще не означает, что система в данный момент ничем не занята, ++Впрочем, это ещё не означает, что система в данный момент ничем не занята, + так как некоторые службы могут продолжать инициализацию даже после того, как + отчитались о своем запуске. + +@@ -274,7 +274,7 @@ Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel + столбце файла /etc/fstab, либо в параметре Where= файла конфигурации юнита), + не является пустым. Это никак не мешает монтированию, однако ранее находившиеся + в нем файлы будут недоступны. Чтобы получить к ним доступ, вы можете вручную +-перемонтировать нижележащую файловую систему в другую точку. ++перемонтировать эту файловую систему в другую точку. + + # Subject: A virtual machine or container has been started + -- 24d8d4452573402496068381a6312df2 diff --git a/0050-core-mount-skip-incomplete-mountinfo-entries.patch b/0050-core-mount-skip-incomplete-mountinfo-entries.patch new file mode 100644 index 0000000..3de48c3 --- /dev/null +++ b/0050-core-mount-skip-incomplete-mountinfo-entries.patch @@ -0,0 +1,28 @@ +From 424873fd1c78edd597a02cbf4a402450369b0905 Mon Sep 17 00:00:00 2001 +From: Daniel Mack +Date: Thu, 4 Jun 2015 15:39:49 +0200 +Subject: [PATCH] core/mount: skip incomplete mountinfo entries + +Skip /proc/mountinfo entries for which libmount returns a NULL pointer +for 'source' or 'target'. This happened on Semaphore CI's build servers +when the test suite is run. + +(cherry picked from commit c0a7f8d3cb757cf750fc6788df0d215f6457c09d) +--- + src/core/mount.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/core/mount.c b/src/core/mount.c +index ba1dcf1e85..851b41351e 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -1522,6 +1522,9 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { + options = mnt_fs_get_options(fs); + fstype = mnt_fs_get_fstype(fs); + ++ if (!device || !path) ++ continue; ++ + if (cunescape(device, UNESCAPE_RELAX, &d) < 0) + return log_oom(); + diff --git a/0051-fstab-generator-cescape-device-name-in-root-fsck-ser.patch b/0051-fstab-generator-cescape-device-name-in-root-fsck-ser.patch new file mode 100644 index 0000000..3ce91d2 --- /dev/null +++ b/0051-fstab-generator-cescape-device-name-in-root-fsck-ser.patch @@ -0,0 +1,49 @@ +From 413b9df4a84291dfeb28133f4b30790b7ad9f903 Mon Sep 17 00:00:00 2001 +From: Andrei Borzenkov +Date: Wed, 3 Jun 2015 20:50:59 +0300 +Subject: [PATCH] fstab-generator: cescape device name in root-fsck service + +We unescape ExecStart line when parsing it, so escape device name +before adding it to unit file. + +fixes #50 + +(cherry picked from commit fa05e97257fc54b05e4c272dfc19cea46511b823) +--- + src/shared/generator.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/shared/generator.c b/src/shared/generator.c +index 807569a1b8..e58bbea77c 100644 +--- a/src/shared/generator.c ++++ b/src/shared/generator.c +@@ -34,9 +34,14 @@ + static int write_fsck_sysroot_service(const char *dir, const char *what) { + const char *unit; + _cleanup_free_ char *device = NULL; ++ _cleanup_free_ char *escaped; + _cleanup_fclose_ FILE *f = NULL; + int r; + ++ escaped = cescape(what); ++ if (!escaped) ++ return log_oom(); ++ + unit = strjoina(dir, "/systemd-fsck-root.service"); + log_debug("Creating %s", unit); + +@@ -61,11 +66,12 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) { + "[Service]\n" + "Type=oneshot\n" + "RemainAfterExit=yes\n" +- "ExecStart=" SYSTEMD_FSCK_PATH " %2$s\n" ++ "ExecStart=" SYSTEMD_FSCK_PATH " %4$s\n" + "TimeoutSec=0\n", + program_invocation_short_name, + what, +- device); ++ device, ++ escaped); + + r = fflush_and_check(f); + if (r < 0) diff --git a/0052-logind-Fix-user_elect_display-to-be-more-stable.patch b/0052-logind-Fix-user_elect_display-to-be-more-stable.patch new file mode 100644 index 0000000..bcc851f --- /dev/null +++ b/0052-logind-Fix-user_elect_display-to-be-more-stable.patch @@ -0,0 +1,150 @@ +From 75aad3b101548151905d528269ffd2a388955193 Mon Sep 17 00:00:00 2001 +From: Philip Withnall +Date: Fri, 29 May 2015 10:49:21 +0100 +Subject: [PATCH] logind: Fix user_elect_display() to be more stable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The previous implementation of user_elect_display() could easily end up +overwriting the user’s valid graphical session with a new TTY session. +For example, consider the situation where there is one session: + c1, type = SESSION_X11, !stopping, class = SESSION_USER +it is initially elected as the user’s display (i.e. u->display = c1). + +If another session is started, on a different VT, the sessions_by_user +list becomes: + c1, type = SESSION_X11, !stopping, class = SESSION_USER + c2, type = SESSION_TTY, !stopping, class = SESSION_USER + +In the previous code, graphical = c1 and text = c2, as expected. +However, neither graphical nor text fulfil the conditions for setting +u->display = graphical (because neither is better than u->display), so +the code falls through to check the text variable. The conditions for +this match, as u->display->type != SESSION_TTY (it’s actually +SESSION_X11). Hence u->display is set to c2, which is incorrect, because +session c1 is still valid. + +Refactor user_elect_display() to use a more explicit filter and +pre-order comparison over the sessions. This can be demonstrated to be +stable and only ever ‘upgrade’ the session to a more graphical one. + +https://bugs.freedesktop.org/show_bug.cgi?id=90769 +(cherry picked from commit 7ffeb45cc63e1326690fd9461b7a4719a3d4f85c) +--- + src/login/logind-user.c | 90 +++++++++++++++++++++++++++++-------------------- + 1 file changed, 54 insertions(+), 36 deletions(-) + +diff --git a/src/login/logind-user.c b/src/login/logind-user.c +index 71bff96728..2f62e34f63 100644 +--- a/src/login/logind-user.c ++++ b/src/login/logind-user.c +@@ -738,54 +738,72 @@ int user_kill(User *u, int signo) { + return manager_kill_unit(u->manager, u->slice, KILL_ALL, signo, NULL); + } + ++static bool ++elect_display_filter(Session *s) { ++ /* Return true if the session is a candidate for the user’s ‘primary ++ * session’ or ‘display’. */ ++ assert(s); ++ ++ return (s->class == SESSION_USER && !s->stopping); ++} ++ ++static int ++elect_display_compare(Session *s1, Session *s2) { ++ /* Indexed by SessionType. Lower numbers mean more preferred. */ ++ const int type_ranks[_SESSION_TYPE_MAX] = { ++ [SESSION_UNSPECIFIED] = 0, ++ [SESSION_TTY] = -2, ++ [SESSION_X11] = -3, ++ [SESSION_WAYLAND] = -3, ++ [SESSION_MIR] = -3, ++ [SESSION_WEB] = -1, ++ }; ++ ++ /* Calculate the partial order relationship between s1 and s2, ++ * returning < 0 if s1 is preferred as the user’s ‘primary session’, ++ * 0 if s1 and s2 are equally preferred or incomparable, or > 0 if s2 ++ * is preferred. ++ * ++ * s1 or s2 may be NULL. */ ++ if ((s1 == NULL) != (s2 == NULL)) ++ return (s1 == NULL) - (s2 == NULL); ++ ++ if (s1->stopping != s2->stopping) ++ return s1->stopping - s2->stopping; ++ ++ if ((s1->class != SESSION_USER) != (s2->class != SESSION_USER)) ++ return (s1->class != SESSION_USER) - (s2->class != SESSION_USER); ++ ++ if ((s1->type == _SESSION_TYPE_INVALID) != (s2->type == _SESSION_TYPE_INVALID)) ++ return (s1->type == _SESSION_TYPE_INVALID) - (s2->type == _SESSION_TYPE_INVALID); ++ ++ if (s1->type != s2->type) ++ return type_ranks[s1->type] - type_ranks[s2->type]; ++ ++ return 0; ++} ++ + void user_elect_display(User *u) { +- Session *graphical = NULL, *text = NULL, *other = NULL, *s; ++ Session *s; + + assert(u); + + /* This elects a primary session for each user, which we call + * the "display". We try to keep the assignment stable, but we + * "upgrade" to better choices. */ ++ log_debug("Electing new display for user %s", u->name); + + LIST_FOREACH(sessions_by_user, s, u->sessions) { +- +- if (s->class != SESSION_USER) +- continue; +- +- if (s->stopping) ++ if (!elect_display_filter(s)) { ++ log_debug("Ignoring session %s", s->id); + continue; ++ } + +- if (SESSION_TYPE_IS_GRAPHICAL(s->type)) +- graphical = s; +- else if (s->type == SESSION_TTY) +- text = s; +- else +- other = s; +- } +- +- if (graphical && +- (!u->display || +- u->display->class != SESSION_USER || +- u->display->stopping || +- !SESSION_TYPE_IS_GRAPHICAL(u->display->type))) { +- u->display = graphical; +- return; +- } +- +- if (text && +- (!u->display || +- u->display->class != SESSION_USER || +- u->display->stopping || +- u->display->type != SESSION_TTY)) { +- u->display = text; +- return; ++ if (elect_display_compare(s, u->display) < 0) { ++ log_debug("Choosing session %s in preference to %s", s->id, u->display ? u->display->id : "-"); ++ u->display = s; ++ } + } +- +- if (other && +- (!u->display || +- u->display->class != SESSION_USER || +- u->display->stopping)) +- u->display = other; + } + + static const char* const user_state_table[_USER_STATE_MAX] = { diff --git a/0053-systemd-bootchart-Trivial-typo-fix-in-warning.patch b/0053-systemd-bootchart-Trivial-typo-fix-in-warning.patch new file mode 100644 index 0000000..3dd6685 --- /dev/null +++ b/0053-systemd-bootchart-Trivial-typo-fix-in-warning.patch @@ -0,0 +1,24 @@ +From dde6312a37a8560dbb923ddf450a101b6ebe4966 Mon Sep 17 00:00:00 2001 +From: Gianpaolo Macario +Date: Fri, 5 Jun 2015 18:42:36 +0200 +Subject: [PATCH] systemd-bootchart: Trivial typo fix in warning + +Signed-off-by: Gianpaolo Macario +(cherry picked from commit 6aec8359b04ca4aac18f73184cc6a3daec9a3271) +--- + src/bootchart/bootchart.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c +index 45fab92598..3360bc85be 100644 +--- a/src/bootchart/bootchart.c ++++ b/src/bootchart/bootchart.c +@@ -531,7 +531,7 @@ int main(int argc, char *argv[]) { + + /* don't complain when overrun once, happens most commonly on 1st sample */ + if (overrun > 1) +- log_warning("systemd-boochart: sample time overrun %i times\n", overrun); ++ log_warning("systemd-bootchart: sample time overrun %i times\n", overrun); + + return 0; + } diff --git a/0054-man-systemd.link-explain-random-MAC-addresses.patch b/0054-man-systemd.link-explain-random-MAC-addresses.patch new file mode 100644 index 0000000..a00a1fc --- /dev/null +++ b/0054-man-systemd.link-explain-random-MAC-addresses.patch @@ -0,0 +1,28 @@ +From 928b84917139e42611ea1b71ab8b35bf20d2627b Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 8 Jun 2015 22:30:59 +0200 +Subject: [PATCH] man: systemd.link - explain random MAC addresses + +Two of the bits in the MAC address are set unconditioanlly, and the rest is randomized, +make this clear in the documentation (as it currently read as if it was all random). + +(cherry picked from commit 2e229e0c4c29e8a827be9ffe361741cf5e9aa7af) +--- + man/systemd.link.xml | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/man/systemd.link.xml b/man/systemd.link.xml +index 3fac760b01..d9b1879c59 100644 +--- a/man/systemd.link.xml ++++ b/man/systemd.link.xml +@@ -229,7 +229,9 @@ + If the kernel is using a random MAC address, + nothing is done. Otherwise, a new address is randomly + generated each time the device appears, typically at +- boot. ++ boot. Either way the random address will have the ++ unicast and ++ locally administered bits set. + + + diff --git a/0055-rules-whitelist-xvd-devices.patch b/0055-rules-whitelist-xvd-devices.patch new file mode 100644 index 0000000..d8b0534 --- /dev/null +++ b/0055-rules-whitelist-xvd-devices.patch @@ -0,0 +1,36 @@ +From 1499fac10a20159ec9f57734fa3f9e72a25cb19c Mon Sep 17 00:00:00 2001 +From: Alex Crawford +Date: Thu, 4 Jun 2015 15:54:35 -0700 +Subject: [PATCH] rules: whitelist xvd* devices + +Xen disks need to be whitelisted as well. + +(cherry picked from commit bb5c512de22eeb7464f120a01fd1d59e7a4bbb7b) +--- + rules/60-block.rules | 2 +- + rules/60-persistent-storage.rules | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/rules/60-block.rules b/rules/60-block.rules +index a69d648023..c74caca49f 100644 +--- a/rules/60-block.rules ++++ b/rules/60-block.rules +@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_ + ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" + + # watch metadata changes, caused by tools closing the device node which was opened for writing +-ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*", OPTIONS+="watch" ++ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*", OPTIONS+="watch" +diff --git a/rules/60-persistent-storage.rules b/rules/60-persistent-storage.rules +index 64c5f1cfdd..2daeb6db42 100644 +--- a/rules/60-persistent-storage.rules ++++ b/rules/60-persistent-storage.rules +@@ -6,7 +6,7 @@ + ACTION=="remove", GOTO="persistent_storage_end" + + SUBSYSTEM!="block", GOTO="persistent_storage_end" +-KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|bcache*|xvd*", GOTO="persistent_storage_end" ++KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*", GOTO="persistent_storage_end" + + # ignore partitions that span the entire disk + TEST=="whole_disk", GOTO="persistent_storage_end" diff --git a/0056-cryptsetup-craft-a-unique-ID-with-the-source-device.patch b/0056-cryptsetup-craft-a-unique-ID-with-the-source-device.patch new file mode 100644 index 0000000..972b7bb --- /dev/null +++ b/0056-cryptsetup-craft-a-unique-ID-with-the-source-device.patch @@ -0,0 +1,165 @@ +From 3357627f3380e680cbaaaddb9ecf4cd2872d46dd Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Mon, 1 Jun 2015 17:26:27 +0200 +Subject: [PATCH] cryptsetup: craft a unique ID with the source device + +If cryptsetup is called with a source device as argv[3], then craft the +ID for the password agent with a unique device path. + +If possible "/dev/block/:" is used, otherwise the original +argv[3] is used. + +This enables password agents like petera [1] to provide a password +according to the source device. The original ID did not carry enough +information and was more targeted for a human readable string, which +is specified in the "Message" field anyway. + +With this patch the ID of the ask.XXX ini file looks like this: +ID=cryptsetup:/dev/block/: + +[1] https://github.com/npmccallum/petera + +(cherry picked from commit e51b9486d1b59e72c293028fed1384f4e4ef09aa) +--- + src/cryptsetup/cryptsetup.c | 90 +++++++++++++++++++++++++++++---------------- + 1 file changed, 58 insertions(+), 32 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index a5018f13ed..5c6c7c0ed8 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -238,6 +238,23 @@ static void log_glue(int level, const char *msg, void *usrptr) { + log_debug("%s", msg); + } + ++static int disk_major_minor(const char *path, char **ret) { ++ struct stat st; ++ ++ assert(path); ++ ++ if (stat(path, &st) < 0) ++ return -errno; ++ ++ if (!S_ISBLK(st.st_mode)) ++ return -EINVAL; ++ ++ if (asprintf(ret, "/dev/block/%d:%d", major(st.st_rdev), minor(st.st_rdev)) < 0) ++ return -errno; ++ ++ return 0; ++} ++ + static char* disk_description(const char *path) { + + static const char name_fields[] = +@@ -295,20 +312,55 @@ static char *disk_mount_point(const char *label) { + return NULL; + } + +-static int get_password(const char *name, usec_t until, bool accept_cached, char ***passwords) { +- int r; ++static int get_password(const char *vol, const char *src, usec_t until, bool accept_cached, char ***passwords) { ++ int r = 0; + char **p; + _cleanup_free_ char *text = NULL; + _cleanup_free_ char *escaped_name = NULL; + char *id; ++ const char *name = NULL; ++ _cleanup_free_ char *description = NULL, *name_buffer = NULL, ++ *mount_point = NULL, *maj_min = NULL; + +- assert(name); ++ assert(vol); ++ assert(src); + assert(passwords); + ++ description = disk_description(src); ++ mount_point = disk_mount_point(vol); ++ ++ if (description && streq(vol, description)) { ++ /* If the description string is simply the ++ * volume name, then let's not show this ++ * twice */ ++ free(description); ++ description = NULL; ++ } ++ ++ if (mount_point && description) ++ r = asprintf(&name_buffer, "%s (%s) on %s", description, vol, mount_point); ++ else if (mount_point) ++ r = asprintf(&name_buffer, "%s on %s", vol, mount_point); ++ else if (description) ++ r = asprintf(&name_buffer, "%s (%s)", description, vol); ++ ++ if (r < 0) ++ return log_oom(); ++ ++ name = name_buffer ? name_buffer : vol; ++ + if (asprintf(&text, "Please enter passphrase for disk %s!", name) < 0) + return log_oom(); + +- escaped_name = cescape(name); ++ if (src) ++ (void) disk_major_minor(src, &maj_min); ++ ++ if (maj_min) { ++ escaped_name = maj_min; ++ maj_min = NULL; ++ } else ++ escaped_name = cescape(name); ++ + if (!escaped_name) + return log_oom(); + +@@ -552,8 +604,7 @@ int main(int argc, char *argv[]) { + unsigned tries; + usec_t until; + crypt_status_info status; +- const char *key_file = NULL, *name = NULL; +- _cleanup_free_ char *description = NULL, *name_buffer = NULL, *mount_point = NULL; ++ const char *key_file = NULL; + + /* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */ + +@@ -581,31 +632,6 @@ int main(int argc, char *argv[]) { + /* A delicious drop of snake oil */ + mlockall(MCL_FUTURE); + +- description = disk_description(argv[3]); +- mount_point = disk_mount_point(argv[2]); +- +- if (description && streq(argv[2], description)) { +- /* If the description string is simply the +- * volume name, then let's not show this +- * twice */ +- free(description); +- description = NULL; +- } +- +- k = 0; +- if (mount_point && description) +- k = asprintf(&name_buffer, "%s (%s) on %s", description, argv[2], mount_point); +- else if (mount_point) +- k = asprintf(&name_buffer, "%s on %s", argv[2], mount_point); +- else if (description) +- k = asprintf(&name_buffer, "%s (%s)", description, argv[2]); +- +- if (k < 0) { +- log_oom(); +- goto finish; +- } +- name = name_buffer ? name_buffer : argv[2]; +- + if (arg_header) { + log_debug("LUKS header: %s", arg_header); + k = crypt_init(&cd, arg_header); +@@ -652,7 +678,7 @@ int main(int argc, char *argv[]) { + _cleanup_strv_free_ char **passwords = NULL; + + if (!key_file) { +- k = get_password(name, until, tries == 0 && !arg_verify, &passwords); ++ k = get_password(argv[2], argv[3], until, tries == 0 && !arg_verify, &passwords); + if (k == -EAGAIN) + continue; + else if (k < 0) diff --git a/0057-util-bind_remount_recursive-handle-return-0-of-set_c.patch b/0057-util-bind_remount_recursive-handle-return-0-of-set_c.patch new file mode 100644 index 0000000..2c1f846 --- /dev/null +++ b/0057-util-bind_remount_recursive-handle-return-0-of-set_c.patch @@ -0,0 +1,27 @@ +From 6b63caf7d6bdded413985906276d023cfb623905 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Tue, 9 Jun 2015 10:32:28 +0200 +Subject: [PATCH] util:bind_remount_recursive(): handle return 0 of + set_consume() + +set_consume() does not return -EEXIST, but 0, in case the key is already +in the Set. + +(cherry picked from commit 85d834ae8e7d9e2c28ef8c1388e2913ed8fd0e3b) +--- + src/shared/util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 57782ba687..26eec38ea6 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5135,7 +5135,7 @@ int bind_remount_recursive(const char *prefix, bool ro) { + while ((x = set_steal_first(todo))) { + + r = set_consume(done, x); +- if (r == -EEXIST) ++ if (r == -EEXIST || r == 0) + continue; + if (r < 0) + return r; diff --git a/0058-hwdb-add-Logitech-TrackMan-Marble-Wheel-USB.patch b/0058-hwdb-add-Logitech-TrackMan-Marble-Wheel-USB.patch new file mode 100644 index 0000000..37bddad --- /dev/null +++ b/0058-hwdb-add-Logitech-TrackMan-Marble-Wheel-USB.patch @@ -0,0 +1,26 @@ +From f66d0986462f8d3fe321dc20f6bd9904fc1e6a99 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Tue, 9 Jun 2015 14:32:19 +1000 +Subject: [PATCH] hwdb: add Logitech TrackMan Marble Wheel USB + +DPI is guesswork, no specs found on the web and calculating DPIs on a +trackball is tedious. + +(cherry picked from commit 5967bda0bc9849bceeda393e3cd2ab04f2f25a03) +--- + hwdb/70-mouse.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb +index 2784b941a1..cfe3579fcd 100644 +--- a/hwdb/70-mouse.hwdb ++++ b/hwdb/70-mouse.hwdb +@@ -169,6 +169,8 @@ mouse:usb:v046dpc00e:name:Logitech USB-PS/2 Optical Mouse: + mouse:usb:v046dpc01b:name:Logitech USB-PS/2 Optical Mouse: + # Logitech USB-PS/2 M-BT58 + mouse:usb:v046dpc03e:name:Logitech USB-PS/2 Optical Mouse: ++# Logitech TrackMan Marble Wheel USB ++mouse:usb:v046dpc401:name:Logitech USB-PS/2 Trackball: + MOUSE_DPI=400@125 + + # Lenovo USB mouse model MO28UOL diff --git a/0059-hwdb-update-Logitech-s-unifying-receiver-devices.patch b/0059-hwdb-update-Logitech-s-unifying-receiver-devices.patch new file mode 100644 index 0000000..d5c037b --- /dev/null +++ b/0059-hwdb-update-Logitech-s-unifying-receiver-devices.patch @@ -0,0 +1,59 @@ +From 47211575a9ee7ed50e184bccbf8f3e0ed3c1075f Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 10 Jun 2015 13:53:51 +1000 +Subject: [PATCH] hwdb: update Logitech's unifying receiver devices + +Since 3.19, the devices have the proper vid/pid and the model number in the +name. + +Signed-off-by: Peter Hutterer +(cherry picked from commit 7a37956eac10c727f562ddcce00d1179d22a67f9) +--- + hwdb/70-mouse.hwdb | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb +index cfe3579fcd..6c77b74e53 100644 +--- a/hwdb/70-mouse.hwdb ++++ b/hwdb/70-mouse.hwdb +@@ -182,6 +182,7 @@ mouse:usb:v046dpc045:name:Logitech USB-PS/2 Optical Mouse: + MOUSE_DPI=600@125 + + # Logitech Wireless Mouse M325 ++mouse:usb:v046dp400a:name:Logitech M325: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:400a: + MOUSE_DPI=600@166 + MOUSE_WHEEL_CLICK_ANGLE=20 +@@ -215,8 +216,10 @@ mouse:usb:v046dp1028:name:Logitech M570: + MOUSE_DPI=540@167 + + # Logitech Wireless Mouse M185 ++mouse:usb:v046dp4008:name:Logitech M185: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:4008: + # Logitech M705 (marathon mouse) ++mouse:usb:v046dp101b:name:Logitech M705: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:101b: + MOUSE_DPI=800@166 + +@@ -227,6 +230,8 @@ mouse:usb:v046dpc24e:name:Logitech G500s Laser Gaming Mouse: + MOUSE_DPI=400@500 *800@500 2000@500 + + # Logitech B605 Wireless Mouse (also M505) ++mouse:usb:v046dp101d:name:Logitech B605: ++mouse:usb:v046dp101d:name:Logitech M505: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:101d: + MOUSE_DPI=900@166 + +@@ -255,10 +260,12 @@ mouse:usb:v046dpc069:name:Logitech USB Laser Mouse: + MOUSE_DPI=1200@125 + + # Logitech T620 (or, the soap) ++mouse:usb:v046dp4027:name:Logitech T620: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:4027: + MOUSE_DPI=1200@250 + + # Logitech ZoneTouch Mouse T400 ++mouse:usb:v046dp4026:name:Logitech T400: + mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:4026: + MOUSE_DPI=1300@166 + diff --git a/0060-keymap-Add-Samsung-NP350V-and-NP670Z.patch b/0060-keymap-Add-Samsung-NP350V-and-NP670Z.patch new file mode 100644 index 0000000..7ecdd3c --- /dev/null +++ b/0060-keymap-Add-Samsung-NP350V-and-NP670Z.patch @@ -0,0 +1,26 @@ +From d9b766a4343cf07a0b4e4ab13401f4aec6e2eece Mon Sep 17 00:00:00 2001 +From: dslul +Date: Wed, 10 Jun 2015 12:18:22 +0200 +Subject: [PATCH] keymap: Add Samsung NP350V and NP670Z + +typo + +keymap: Add Samsung NP350V and NP670Z +(cherry picked from commit ff48c774236967273732a7ee154b4b8e834b4409) +--- + hwdb/60-keyboard.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 9c7e553a41..007c6a809e 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -980,6 +980,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*550P*:pvr* + KEYBOARD_KEY_a9=! # Fn Lock - Function lock off + + # Series 7 / 9 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*350V*:pvr* ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*670Z*:pvr* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700Z*:pvr* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700G*:pvr* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*900X[34]*:pvr* diff --git a/0061-sd-bus-fix-early-exit-when-we-lack-all-data-in-bus_g.patch b/0061-sd-bus-fix-early-exit-when-we-lack-all-data-in-bus_g.patch new file mode 100644 index 0000000..a3303dc --- /dev/null +++ b/0061-sd-bus-fix-early-exit-when-we-lack-all-data-in-bus_g.patch @@ -0,0 +1,24 @@ +From 643f845bf882489eeddeeb4d9115b07b39198693 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 10 Jun 2015 15:51:40 +0200 +Subject: [PATCH] sd-bus: fix early exit when we lack all data in + bus_get_owner_creds_dbus1() + +(cherry picked from commit 3c42e8b281b092b4d10f24c80e21d69b0f232b96) +--- + src/libsystemd/sd-bus/bus-control.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c +index 43ddfc651d..b4ca177f76 100644 +--- a/src/libsystemd/sd-bus/bus-control.c ++++ b/src/libsystemd/sd-bus/bus-control.c +@@ -980,7 +980,7 @@ static int bus_get_owner_creds_dbus1(sd_bus *bus, uint64_t mask, sd_bus_creds ** + pid_t pid = 0; + int r; + +- if (!bus->ucred_valid && !isempty(bus->label)) ++ if (!bus->ucred_valid && isempty(bus->label)) + return -ENODATA; + + c = bus_creds_new(); diff --git a/0062-sd-bus-remove-ucred-parameter-from-bus_message_from_.patch b/0062-sd-bus-remove-ucred-parameter-from-bus_message_from_.patch new file mode 100644 index 0000000..f89a851 --- /dev/null +++ b/0062-sd-bus-remove-ucred-parameter-from-bus_message_from_.patch @@ -0,0 +1,139 @@ +From 467d26a957ddb9d493a443618edc1ecd78eef15c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 10 Jun 2015 15:52:14 +0200 +Subject: [PATCH] sd-bus: remove ucred parameter from bus_message_from_header() + since we don't use it anymore + +(cherry picked from commit aa0d0ed6b87d41367fd6c4401472df7d45dd1b13) +--- + src/libsystemd/sd-bus/bus-kernel.c | 1 - + src/libsystemd/sd-bus/bus-message.c | 21 +-------------------- + src/libsystemd/sd-bus/bus-message.h | 2 -- + src/libsystemd/sd-bus/bus-socket.c | 1 - + src/libsystemd/sd-bus/test-bus-gvariant.c | 2 +- + src/libsystemd/sd-bus/test-bus-marshal.c | 2 +- + 6 files changed, 3 insertions(+), 26 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-kernel.c b/src/libsystemd/sd-bus/bus-kernel.c +index d5cc8100ce..b87dba7c43 100644 +--- a/src/libsystemd/sd-bus/bus-kernel.c ++++ b/src/libsystemd/sd-bus/bus-kernel.c +@@ -498,7 +498,6 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { + footer, footer_size, + n_bytes, + fds, n_fds, +- NULL, + seclabel, 0, &m); + if (r < 0) + return r; +diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c +index 6ee209dd1b..c38b2a5fa5 100644 +--- a/src/libsystemd/sd-bus/bus-message.c ++++ b/src/libsystemd/sd-bus/bus-message.c +@@ -435,7 +435,6 @@ int bus_message_from_header( + size_t message_size, + int *fds, + unsigned n_fds, +- const struct ucred *ucred, + const char *label, + size_t extra, + sd_bus_message **ret) { +@@ -528,23 +527,6 @@ int bus_message_from_header( + m->fds = fds; + m->n_fds = n_fds; + +- if (ucred) { +- m->creds.pid = ucred->pid; +- m->creds.euid = ucred->uid; +- m->creds.egid = ucred->gid; +- +- /* Due to namespace translations some data might be +- * missing from this ucred record. */ +- if (m->creds.pid > 0) +- m->creds.mask |= SD_BUS_CREDS_PID; +- +- if (m->creds.euid != UID_INVALID) +- m->creds.mask |= SD_BUS_CREDS_EUID; +- +- if (m->creds.egid != GID_INVALID) +- m->creds.mask |= SD_BUS_CREDS_EGID; +- } +- + if (label) { + m->creds.label = (char*) m + ALIGN(sizeof(sd_bus_message)) + ALIGN(extra); + memcpy(m->creds.label, label, label_sz + 1); +@@ -565,7 +547,6 @@ int bus_message_from_malloc( + size_t length, + int *fds, + unsigned n_fds, +- const struct ucred *ucred, + const char *label, + sd_bus_message **ret) { + +@@ -579,7 +560,7 @@ int bus_message_from_malloc( + buffer, length, + length, + fds, n_fds, +- ucred, label, ++ label, + 0, &m); + if (r < 0) + return r; +diff --git a/src/libsystemd/sd-bus/bus-message.h b/src/libsystemd/sd-bus/bus-message.h +index d784e603dd..088d5b1109 100644 +--- a/src/libsystemd/sd-bus/bus-message.h ++++ b/src/libsystemd/sd-bus/bus-message.h +@@ -205,7 +205,6 @@ int bus_message_from_header( + size_t message_size, + int *fds, + unsigned n_fds, +- const struct ucred *ucred, + const char *label, + size_t extra, + sd_bus_message **ret); +@@ -216,7 +215,6 @@ int bus_message_from_malloc( + size_t length, + int *fds, + unsigned n_fds, +- const struct ucred *ucred, + const char *label, + sd_bus_message **ret); + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index 881efb176a..e00bd3fc55 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -913,7 +913,6 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) { + bus->rbuffer, size, + bus->fds, bus->n_fds, + NULL, +- NULL, + &t); + if (r < 0) { + free(b); +diff --git a/src/libsystemd/sd-bus/test-bus-gvariant.c b/src/libsystemd/sd-bus/test-bus-gvariant.c +index 992edacb28..22ea00c2fb 100644 +--- a/src/libsystemd/sd-bus/test-bus-gvariant.c ++++ b/src/libsystemd/sd-bus/test-bus-gvariant.c +@@ -198,7 +198,7 @@ static void test_marshal(void) { + } + #endif + +- assert_se(bus_message_from_malloc(bus, blob, sz, NULL, 0, NULL, NULL, &n) >= 0); ++ assert_se(bus_message_from_malloc(bus, blob, sz, NULL, 0, NULL, &n) >= 0); + blob = NULL; + + assert_se(bus_message_dump(n, NULL, BUS_MESSAGE_DUMP_WITH_HEADER) >= 0); +diff --git a/src/libsystemd/sd-bus/test-bus-marshal.c b/src/libsystemd/sd-bus/test-bus-marshal.c +index f8ecadf499..a866a56179 100644 +--- a/src/libsystemd/sd-bus/test-bus-marshal.c ++++ b/src/libsystemd/sd-bus/test-bus-marshal.c +@@ -212,7 +212,7 @@ int main(int argc, char *argv[]) { + + m = sd_bus_message_unref(m); + +- r = bus_message_from_malloc(bus, buffer, sz, NULL, 0, NULL, NULL, &m); ++ r = bus_message_from_malloc(bus, buffer, sz, NULL, 0, NULL, &m); + assert_se(r >= 0); + + bus_message_dump(m, stdout, BUS_MESSAGE_DUMP_WITH_HEADER); diff --git a/0063-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch b/0063-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch new file mode 100644 index 0000000..ff1746f --- /dev/null +++ b/0063-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch @@ -0,0 +1,59 @@ +From 5e6a495495972f748e69d6ec1a8ba2b78aaa7f5a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 24 May 2015 20:20:06 -0400 +Subject: [PATCH] bus-creds: always set SD_BUS_CREDS_PID when we set pid in the + mask + +Also reorder the code a bit to be easier to parse. + +(cherry picked from commit 236f83afa935d6e07fcd5c17b5db7b1cf424267a) +--- + src/core/selinux-access.c | 2 +- + src/libsystemd/sd-bus/bus-creds.c | 13 ++++++------- + 2 files changed, 7 insertions(+), 8 deletions(-) + +diff --git a/src/core/selinux-access.c b/src/core/selinux-access.c +index 5e9a4a5e02..decd42f95a 100644 +--- a/src/core/selinux-access.c ++++ b/src/core/selinux-access.c +@@ -261,7 +261,7 @@ int mac_selinux_generic_access_check( + audit_info.path = path; + audit_info.cmdline = cl; + +- r = selinux_check_access((security_context_t) scon, fcon, tclass, permission, &audit_info); ++ r = selinux_check_access(scon, fcon, tclass, permission, &audit_info); + if (r < 0) + r = sd_bus_error_setf(error, SD_BUS_ERROR_ACCESS_DENIED, "SELinux policy denies access."); + +diff --git a/src/libsystemd/sd-bus/bus-creds.c b/src/libsystemd/sd-bus/bus-creds.c +index 4d67619cf8..1c365b7fcd 100644 +--- a/src/libsystemd/sd-bus/bus-creds.c ++++ b/src/libsystemd/sd-bus/bus-creds.c +@@ -773,11 +773,13 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { + return 0; + + /* Try to retrieve PID from creds if it wasn't passed to us */ +- if (pid <= 0 && (c->mask & SD_BUS_CREDS_PID)) ++ if (pid > 0) { ++ c->pid = pid; ++ c->mask |= SD_BUS_CREDS_PID; ++ } else if (c->mask & SD_BUS_CREDS_PID) + pid = c->pid; +- +- /* Without pid we cannot do much... */ +- if (pid <= 0) ++ else ++ /* Without pid we cannot do much... */ + return 0; + + /* Try to retrieve TID from creds if it wasn't passed to us */ +@@ -789,9 +791,6 @@ int bus_creds_add_more(sd_bus_creds *c, uint64_t mask, pid_t pid, pid_t tid) { + if (missing == 0) + return 0; + +- c->pid = pid; +- c->mask |= SD_BUS_CREDS_PID; +- + if (tid > 0) { + c->tid = tid; + c->mask |= SD_BUS_CREDS_TID; diff --git a/0064-sd-bus-do-not-use-per-datagram-auxiliary-information.patch b/0064-sd-bus-do-not-use-per-datagram-auxiliary-information.patch new file mode 100644 index 0000000..9c3e715 --- /dev/null +++ b/0064-sd-bus-do-not-use-per-datagram-auxiliary-information.patch @@ -0,0 +1,155 @@ +From 81eb1e9e46b569992b265e826ffc0218ee3d99dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 18:59:27 -0400 +Subject: [PATCH] sd-bus: do not use per-datagram auxiliary information + +SELinux information cannot be retrieved this way, since we are +using stream unix sockets and SCM_SECURITY does not work for +them. + +SCM_CREDENTIALS use dropped to be consistent. We also should +get this information at connection time. + +https://bugzilla.redhat.com/show_bug.cgi?id=1224211 +"SCM_SECURITY was only added for datagram sockets." + +(cherry picked from commit d868f2a3a1cc97b1e081b7692e80a1182efccda4) +--- + src/libsystemd/sd-bus/bus-socket.c | 80 ++++++-------------------------------- + 1 file changed, 12 insertions(+), 68 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index e00bd3fc55..ec4fcfbcd3 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -499,9 +499,7 @@ static int bus_socket_read_auth(sd_bus *b) { + void *p; + union { + struct cmsghdr cmsghdr; +- uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX) + +- CMSG_SPACE(sizeof(struct ucred)) + +- CMSG_SPACE(NAME_MAX)]; /*selinux label */ ++ uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)]; + } control; + struct cmsghdr *cmsg; + bool handle_cmsg = false; +@@ -553,8 +551,8 @@ static int bus_socket_read_auth(sd_bus *b) { + + b->rbuffer_size += k; + +- if (handle_cmsg) { +- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) { ++ if (handle_cmsg) ++ for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) + if (cmsg->cmsg_level == SOL_SOCKET && + cmsg->cmsg_type == SCM_RIGHTS) { + int j; +@@ -565,31 +563,9 @@ static int bus_socket_read_auth(sd_bus *b) { + j = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); + close_many((int*) CMSG_DATA(cmsg), j); + return -EIO; +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_CREDENTIALS && +- cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { +- +- /* Ignore bogus data, which we might +- * get on socketpair() sockets */ +- if (((struct ucred*) CMSG_DATA(cmsg))->pid != 0) { +- memcpy(&b->ucred, CMSG_DATA(cmsg), sizeof(struct ucred)); +- b->ucred_valid = true; +- } +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_SECURITY) { +- +- size_t l; +- +- l = cmsg->cmsg_len - CMSG_LEN(0); +- if (l > 0) { +- memcpy(&b->label, CMSG_DATA(cmsg), l); +- b->label[l] = 0; +- } +- } +- } +- } ++ } else ++ log_debug("Got unexpected auxiliary data with level=%d and type=%d", ++ cmsg->cmsg_level, cmsg->cmsg_type); + + r = bus_socket_auth_verify(b); + if (r != 0) +@@ -599,18 +575,8 @@ static int bus_socket_read_auth(sd_bus *b) { + } + + void bus_socket_setup(sd_bus *b) { +- int enable; +- + assert(b); + +- /* Enable SO_PASSCRED + SO_PASSEC. We try this on any +- * socket, just in case. */ +- enable = !b->bus_client; +- (void) setsockopt(b->input_fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable)); +- +- enable = !b->bus_client && (b->attach_flags & KDBUS_ATTACH_SECLABEL); +- (void) setsockopt(b->input_fd, SOL_SOCKET, SO_PASSSEC, &enable, sizeof(enable)); +- + /* Increase the buffers to 8 MB */ + fd_inc_rcvbuf(b->input_fd, SNDBUF_SIZE); + fd_inc_sndbuf(b->output_fd, SNDBUF_SIZE); +@@ -939,9 +905,7 @@ int bus_socket_read_message(sd_bus *bus) { + void *b; + union { + struct cmsghdr cmsghdr; +- uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX) + +- CMSG_SPACE(sizeof(struct ucred)) + +- CMSG_SPACE(NAME_MAX)]; /*selinux label */ ++ uint8_t buf[CMSG_SPACE(sizeof(int) * BUS_FDS_MAX)]; + } control; + struct cmsghdr *cmsg; + bool handle_cmsg = false; +@@ -988,8 +952,8 @@ int bus_socket_read_message(sd_bus *bus) { + + bus->rbuffer_size += k; + +- if (handle_cmsg) { +- for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) { ++ if (handle_cmsg) ++ for (cmsg = CMSG_FIRSTHDR(&mh); cmsg; cmsg = CMSG_NXTHDR(&mh, cmsg)) + if (cmsg->cmsg_level == SOL_SOCKET && + cmsg->cmsg_type == SCM_RIGHTS) { + int n, *f; +@@ -1014,29 +978,9 @@ int bus_socket_read_message(sd_bus *bus) { + memcpy(f + bus->n_fds, CMSG_DATA(cmsg), n * sizeof(int)); + bus->fds = f; + bus->n_fds += n; +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_CREDENTIALS && +- cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { +- +- /* Ignore bogus data, which we might +- * get on socketpair() sockets */ +- if (((struct ucred*) CMSG_DATA(cmsg))->pid != 0) { +- memcpy(&bus->ucred, CMSG_DATA(cmsg), sizeof(struct ucred)); +- bus->ucred_valid = true; +- } +- +- } else if (cmsg->cmsg_level == SOL_SOCKET && +- cmsg->cmsg_type == SCM_SECURITY) { +- +- size_t l; +- l = cmsg->cmsg_len - CMSG_LEN(0); +- if (l > 0) { +- memcpy(&bus->label, CMSG_DATA(cmsg), l); +- bus->label[l] = 0; +- } +- } +- } +- } ++ } else ++ log_debug("Got unexpected auxiliary data with level=%d and type=%d", ++ cmsg->cmsg_level, cmsg->cmsg_type); + + r = bus_socket_read_message_need(bus, &need); + if (r < 0) diff --git a/0065-sd-bus-store-selinux-context-at-connection-time.patch b/0065-sd-bus-store-selinux-context-at-connection-time.patch new file mode 100644 index 0000000..e79c88a --- /dev/null +++ b/0065-sd-bus-store-selinux-context-at-connection-time.patch @@ -0,0 +1,95 @@ +From 6829b6250d10c3a6a773374bffc58ec8cc98bc36 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 21:24:45 -0400 +Subject: [PATCH] sd-bus: store selinux context at connection time + +This appears to be the right time to do it for SOCK_STREAM +unix sockets. + +Also: condition bus_get_owner_creds_dbus1 was reversed. Split +it out to a separate variable for clarity and fix. + +https://bugzilla.redhat.com/show_bug.cgi?id=1224211 +(cherry picked from commit c4e6556c46cea1b7195cfb81c8cfab8342ebd852) + +Conflicts: + src/libsystemd/sd-bus/bus-control.c +--- + src/libsystemd/sd-bus/bus-control.c | 6 ++++-- + src/libsystemd/sd-bus/bus-internal.h | 2 +- + src/libsystemd/sd-bus/bus-socket.c | 7 +++++++ + src/libsystemd/sd-bus/sd-bus.c | 1 + + 4 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c +index b4ca177f76..1103903358 100644 +--- a/src/libsystemd/sd-bus/bus-control.c ++++ b/src/libsystemd/sd-bus/bus-control.c +@@ -979,8 +979,10 @@ static int bus_get_owner_creds_dbus1(sd_bus *bus, uint64_t mask, sd_bus_creds ** + _cleanup_bus_creds_unref_ sd_bus_creds *c = NULL; + pid_t pid = 0; + int r; ++ bool do_label = bus->label && (mask & SD_BUS_CREDS_SELINUX_CONTEXT); + +- if (!bus->ucred_valid && isempty(bus->label)) ++ /* Avoid allocating anything if we have no chance of returning useful data */ ++ if (!bus->ucred_valid && !do_label) + return -ENODATA; + + c = bus_creds_new(); +@@ -1004,7 +1006,7 @@ static int bus_get_owner_creds_dbus1(sd_bus *bus, uint64_t mask, sd_bus_creds ** + } + } + +- if (!isempty(bus->label) && (mask & SD_BUS_CREDS_SELINUX_CONTEXT)) { ++ if (do_label) { + c->label = strdup(bus->label); + if (!c->label) + return -ENOMEM; +diff --git a/src/libsystemd/sd-bus/bus-internal.h b/src/libsystemd/sd-bus/bus-internal.h +index 1351938c80..2ee0eabc02 100644 +--- a/src/libsystemd/sd-bus/bus-internal.h ++++ b/src/libsystemd/sd-bus/bus-internal.h +@@ -261,7 +261,7 @@ struct sd_bus { + usec_t auth_timeout; + + struct ucred ucred; +- char label[NAME_MAX]; ++ char *label; + + uint64_t creds_mask; + +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index ec4fcfbcd3..1fde95d2e8 100644 +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -587,10 +587,17 @@ void bus_socket_setup(sd_bus *b) { + } + + static void bus_get_peercred(sd_bus *b) { ++ int r; ++ + assert(b); + + /* Get the peer for socketpair() sockets */ + b->ucred_valid = getpeercred(b->input_fd, &b->ucred) >= 0; ++ ++ /* Get the SELinux context of the peer */ ++ r = getpeersec(b->input_fd, &b->label); ++ if (r < 0 && r != -EOPNOTSUPP) ++ log_debug_errno(r, "Failed to determine peer security context: %m"); + } + + static int bus_socket_start_auth_client(sd_bus *b) { +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index 214b3d04df..ef0f51be53 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -116,6 +116,7 @@ static void bus_free(sd_bus *b) { + if (b->kdbus_buffer) + munmap(b->kdbus_buffer, KDBUS_POOL_SIZE); + ++ free(b->label); + free(b->rbuffer); + free(b->unique_name); + free(b->auth_buffer); diff --git a/0066-journald-simplify-context-handling.patch b/0066-journald-simplify-context-handling.patch new file mode 100644 index 0000000..1daecd6 --- /dev/null +++ b/0066-journald-simplify-context-handling.patch @@ -0,0 +1,85 @@ +From 87bfffb29b2379dfffc799f0b148369b49c0c269 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sat, 6 Jun 2015 21:36:52 -0400 +Subject: [PATCH] journald: simplify context handling + +By using our homegrown function we can dispense with all the iffdefery. + +(cherry picked from commit 2de56f70941eaf91a4520bf33de47a87ebd8b2cb) +--- + src/journal/journald-stream.c | 32 ++++++++------------------------ + 1 file changed, 8 insertions(+), 24 deletions(-) + +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index b572147a56..db2f581972 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -59,10 +59,7 @@ struct StdoutStream { + int fd; + + struct ucred ucred; +-#ifdef HAVE_SELINUX +- security_context_t security_context; +-#endif +- ++ char *label; + char *identifier; + char *unit_id; + int priority; +@@ -99,12 +96,7 @@ void stdout_stream_free(StdoutStream *s) { + } + + safe_close(s->fd); +- +-#ifdef HAVE_SELINUX +- if (s->security_context) +- freecon(s->security_context); +-#endif +- ++ free(s->label); + free(s->identifier); + free(s->unit_id); + free(s->state_file); +@@ -225,8 +217,7 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + char syslog_facility[sizeof("SYSLOG_FACILITY=")-1 + DECIMAL_STR_MAX(int) + 1]; + _cleanup_free_ char *message = NULL, *syslog_identifier = NULL; + unsigned n = 0; +- char *label = NULL; +- size_t label_len = 0; ++ size_t label_len; + + assert(s); + assert(p); +@@ -271,14 +262,8 @@ static int stdout_stream_log(StdoutStream *s, const char *p) { + if (message) + IOVEC_SET_STRING(iovec[n++], message); + +-#ifdef HAVE_SELINUX +- if (s->security_context) { +- label = (char*) s->security_context; +- label_len = strlen((char*) s->security_context); +- } +-#endif +- +- server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, label, label_len, s->unit_id, priority, 0); ++ label_len = s->label ? strlen(s->label) : 0; ++ server_dispatch_message(s->server, iovec, n, ELEMENTSOF(iovec), &s->ucred, NULL, s->label, label_len, s->unit_id, priority, 0); + return 0; + } + +@@ -489,12 +474,11 @@ static int stdout_stream_install(Server *s, int fd, StdoutStream **ret) { + if (r < 0) + return log_error_errno(r, "Failed to determine peer credentials: %m"); + +-#ifdef HAVE_SELINUX + if (mac_selinux_use()) { +- if (getpeercon(fd, &stream->security_context) < 0 && errno != ENOPROTOOPT) +- log_error_errno(errno, "Failed to determine peer security context: %m"); ++ r = getpeersec(fd, &stream->label); ++ if (r < 0 && r != -EOPNOTSUPP) ++ (void) log_warning_errno(r, "Failed to determine peer security context: %m"); + } +-#endif + + (void) shutdown(fd, SHUT_WR); + diff --git a/0067-Fix-typo.patch b/0067-Fix-typo.patch new file mode 100644 index 0000000..70be1e0 --- /dev/null +++ b/0067-Fix-typo.patch @@ -0,0 +1,25 @@ +From 84dcb29829e6b4ee85682ded36a727b1b3f11918 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 10 Jun 2015 11:06:00 -0400 +Subject: [PATCH] Fix typo + +Follow up for 7c918141ed. + +(cherry picked from commit 2fb1105c2bb91c12dd4e66117626da3546afff84) +--- + src/run/run.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/run/run.c b/src/run/run.c +index fcd6b06f7d..d7b1c58455 100644 +--- a/src/run/run.c ++++ b/src/run/run.c +@@ -67,7 +67,7 @@ static void help(void) { + printf("%s [OPTIONS...] {COMMAND} [ARGS...]\n\n" + "Run the specified command in a transient scope or service or timer\n" + "unit. If timer option is specified and unit is exist which is\n" +- "specified with --unit option then command can be ommited.\n\n" ++ "specified with --unit option then command can be omited.\n\n" + " -h --help Show this help\n" + " --version Show package version\n" + " --user Run as user unit\n" diff --git a/systemd.spec b/systemd.spec index 54f0e9a..43df504 100644 --- a/systemd.spec +++ b/systemd.spec @@ -38,28 +38,77 @@ Source8: systemd-journal-gatewayd.xml # Patch series is available from http://cgit.freedesktop.org/systemd/systemd-stable/log/?h=v220-stable # GIT_DIR=~/src/systemd/.git git format-patch-ab -M -N --no-signature v220..v220-stable # i=1; for p in 0*patch;do printf "Patch%04d: %s\n" $i $p; ((i++));done +Patch0001: 0001-NEWS-fix-date.patch +Patch0002: 0002-udev-net_id-Only-read-the-first-64-bytes-of-PCI-conf.patch +Patch0003: 0003-bootctl-ferror-must-be-called-before-FILE-is-closed.patch +Patch0004: 0004-fix-typos-in-systemd-nspawn-man-page.patch +Patch0005: 0005-bootctl-fix-an-error-check.patch +Patch0006: 0006-udevd-event-fix-event-queue-in-daemenozied-mode.patch +Patch0007: 0007-nspawn-be-verbose-about-interface-names.patch +Patch0008: 0008-shared-generator-correct-path-to-systemd-fsck.patch +Patch0009: 0009-networkd-fix-IFF_UP-when-ipv6-support-is-disabled.patch +Patch0010: 0010-import-dkr-avoid-NULL-pointer-dereference.patch +Patch0011: 0011-treewide-fix-typos.patch +Patch0012: 0012-logind-unlink-run-nologin-when-shutdown-is-cancelled.patch +Patch0013: 0013-missing-add-more-IFLA_VXLAN_-defines.patch +Patch0014: 0014-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch +Patch0015: 0015-sd-device-fix-device_get_properties_strv.patch +Patch0016: 0016-man-fix-systemd.resource-control-5-volume-number.patch +Patch0017: 0017-sd-device-enumerator-fix-matching-on-properties-and-.patch +Patch0018: 0018-build-sys-fix-typo.patch +Patch0019: 0019-path-util-Fix-path_is_mount_point-for-files.patch +Patch0020: 0020-rules-fix-typo-in-block-watch-rule.patch +Patch0021: 0021-rules-restore-block-watch-after-CHANGE-events.patch +Patch0022: 0022-zsh-completion-update-bootctl.patch +Patch0023: 0023-README-fix-typo.patch +Patch0024: 0024-networkctl-fix-uninitialized-variable.patch +Patch0025: 0025-conf-parser-parsing-error-logs-should-show-a-type-no.patch +Patch0026: 0026-core-namespace-Protect-usr-instead-of-home-with-Prot.patch +Patch0027: 0027-udev-Bring-back-persistant-storage-symlinks-for-bcac.patch +Patch0028: 0028-sd-device-fix-invalid-property-strv-pointers.patch +Patch0029: 0029-zsh-completion-fix-typo-in-_bootctl.patch +Patch0030: 0030-load-fragment-use-UNESCAPE_RELAX-flag-to-parse-exec-.patch +Patch0031: 0031-test-unit-file-add-test-for-improperly-escaped-exec-.patch +Patch0032: 0032-Separate-the-sign-from-the-number.patch +Patch0033: 0033-zsh-completion-fix-completion-of-user-services.patch +Patch0034: 0034-zsh-completion-a-more-style-tag-aware-_systemctl.patch +Patch0035: 0035-missing-add-more-btrfs-defines.patch +Patch0036: 0036-hwdb-Update-database-of-Bluetooth-company-identifier.patch +Patch0037: 0037-hwdb-update.patch +Patch0038: 0038-README-update-links-to-reference-new-home-GitHub.patch +Patch0039: 0039-point-to-github-issues-instead-of-freedesktop-bugzil.patch +Patch0040: 0040-configure.ac-add-missing-komma.patch +Patch0041: 0041-util-fix-another-cunescape-regression.patch +Patch0042: 0042-test-unit-file.c-fixup-the-test-for-commit-3b51f8ddd.patch +Patch0043: 0043-systemctl-Use-usr-bin-editor-if-available.patch +Patch0044: 0044-libudev-enumerate-accept-NULL-parameters-in-add_matc.patch +Patch0045: 0045-Add-dev-xvd-to-60-persistent-storage-whitelist.patch +Patch0046: 0046-hwdb-add-Apple-MagicMouse-entry.patch +Patch0047: 0047-logind-Add-a-udev-rule-to-tag-all-DRM-cards-with-mas.patch +Patch0048: 0048-logind-Save-the-user-s-state-when-a-session-enters-S.patch +Patch0049: 0049-small-fix-ru-translation.patch +Patch0050: 0050-core-mount-skip-incomplete-mountinfo-entries.patch +Patch0051: 0051-fstab-generator-cescape-device-name-in-root-fsck-ser.patch +Patch0052: 0052-logind-Fix-user_elect_display-to-be-more-stable.patch +Patch0053: 0053-systemd-bootchart-Trivial-typo-fix-in-warning.patch +Patch0054: 0054-man-systemd.link-explain-random-MAC-addresses.patch +Patch0055: 0055-rules-whitelist-xvd-devices.patch +Patch0056: 0056-cryptsetup-craft-a-unique-ID-with-the-source-device.patch +Patch0057: 0057-util-bind_remount_recursive-handle-return-0-of-set_c.patch +Patch0058: 0058-hwdb-add-Logitech-TrackMan-Marble-Wheel-USB.patch +Patch0059: 0059-hwdb-update-Logitech-s-unifying-receiver-devices.patch +Patch0060: 0060-keymap-Add-Samsung-NP350V-and-NP670Z.patch +Patch0061: 0061-sd-bus-fix-early-exit-when-we-lack-all-data-in-bus_g.patch +Patch0062: 0062-sd-bus-remove-ucred-parameter-from-bus_message_from_.patch +Patch0063: 0063-bus-creds-always-set-SD_BUS_CREDS_PID-when-we-set-pi.patch +Patch0064: 0064-sd-bus-do-not-use-per-datagram-auxiliary-information.patch +Patch0065: 0065-sd-bus-store-selinux-context-at-connection-time.patch +Patch0066: 0066-journald-simplify-context-handling.patch +Patch0067: 0067-Fix-typo.patch # kernel-install patch for grubby, drop if grubby is obsolete Patch1000: kernel-install-grubby.patch -# Fix udev --daemon crash: -# http://comments.gmane.org/gmane.comp.sysutils.systemd.devel/32067 -# This is upstream commit 040e689654ef08. -Patch1001: 0001-udevd-event-fix-event-queue-in-daemenozied-mode.patch - -# Fix udev --daemon not cleaning child processes: -# https://www.mail-archive.com/systemd-devel@lists.freedesktop.org/msg31806.html -# https://bugzilla.redhat.com/show_bug.cgi?id=1225641 -# This is upstream commit 86c3bece38bcf5. -Patch1002: 0001-udevd-fix-SIGCHLD-handling-in-daemon-mode.patch - -# Add support for petera disk encryption -Patch1003: 0004-cryptsetup-craft-a-unique-ID-with-the-source-device.patch - -# Fix udev block device watch -Patch1004: 0005-rules-fix-typo-in-block-watch-rule.patch -Patch1005: 0006-rules-restore-block-watch-after-CHANGE-events.patch - %global num_patches %{lua: c=0; for i,p in ipairs(patches) do c=c+1; end; print(c);} BuildRequires: libcap-devel @@ -832,7 +881,14 @@ getent passwd systemd-journal-upload >/dev/null 2>&1 || useradd -r -l -g systemd %changelog * Tue Jun 9 2015 Zbigniew Jędrzejewski-Szmek - 220-8 -- Remove gudev +- Remove gudev which is now provided as separate package (libgudev) +- Fix for spurious selinux denials (#1224211) +- Udev change events (#1225905) +- Patches for some potential crashes +- ProtectSystem=yes does not touch /home +- Man page fixes, hwdb updates, shell completion updates +- Restored persistent device symlinks for bcache, xen block devices +- Tag all DRM cards as master-of-seat * Tue Jun 09 2015 Harald Hoyer 220-7 - fix udev block device watch