diff --git a/0379-reduce-the-amount-of-messages-logged-to-dev-kmsg-whe.patch b/0379-reduce-the-amount-of-messages-logged-to-dev-kmsg-whe.patch index 44d1dd4..8d9ace4 100644 --- a/0379-reduce-the-amount-of-messages-logged-to-dev-kmsg-whe.patch +++ b/0379-reduce-the-amount-of-messages-logged-to-dev-kmsg-whe.patch @@ -1,8 +1,8 @@ From 626cb9f4d48010c575497ea7649287d87d5c1308 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Sat, 5 Apr 2014 13:59:01 -0400 -Subject: [PATCH 379/389] reduce the amount of messages logged to /dev/kmsg - when "debug" is specified +Subject: [PATCH] reduce the amount of messages logged to /dev/kmsg when + "debug" is specified (cherry picked from commit b2103dccb354de3f38c49c14ccb637bdf665e40f) @@ -36,6 +36,3 @@ index 935762f..1ac1ba7 100644 } else if (!in_initrd()) { unsigned i; --- -1.8.3.1 - diff --git a/0380-journal-cleanup-up-error-handling-in-update_catalog.patch b/0380-journal-cleanup-up-error-handling-in-update_catalog.patch index 557addb..020afd4 100644 --- a/0380-journal-cleanup-up-error-handling-in-update_catalog.patch +++ b/0380-journal-cleanup-up-error-handling-in-update_catalog.patch @@ -1,8 +1,7 @@ From 3008e643b5b511a171e03a6f55444ea4ee0e6ee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 11 Apr 2014 08:44:55 -0400 -Subject: [PATCH 380/389] journal: cleanup up error handling in - update_catalog() +Subject: [PATCH] journal: cleanup up error handling in update_catalog() - Negative/positive errno mixup caused duplicates not to be detected properly. Now we get a warning about some duplicate entries in our own catalogs... @@ -103,6 +102,3 @@ index 5db5bed..f021dbf 100644 test_catalog_importing(); --- -1.8.3.1 - diff --git a/0381-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0381-hwdb-Update-database-of-Bluetooth-company-identifier.patch index 19a240e..304e246 100644 --- a/0381-hwdb-Update-database-of-Bluetooth-company-identifier.patch +++ b/0381-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -1,8 +1,7 @@ From 0daa5cf9308308e66216e32301a3a2f4f620ec5c Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 12 Apr 2014 10:38:16 -0700 -Subject: [PATCH 381/389] hwdb: Update database of Bluetooth company - identifiers +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers (cherry picked from commit b189101727e80a09864c5e5880663ef565467f19) (cherry picked from commit 9b57078c6304b053f7a6a9eaef7a40a97dc096ec) @@ -48,6 +47,3 @@ index b928f5a..28aa2a7 100644 + +bluetooth:v013E* + ID_VENDOR_FROM_DATABASE=nimai --- -1.8.3.1 - diff --git a/0382-bash-completion-fix-__get_startable_units.patch b/0382-bash-completion-fix-__get_startable_units.patch index f39b200..1f7282d 100644 --- a/0382-bash-completion-fix-__get_startable_units.patch +++ b/0382-bash-completion-fix-__get_startable_units.patch @@ -1,7 +1,7 @@ From efa946235ef9e5b9c91f1f7ec085ace3d070a6af Mon Sep 17 00:00:00 2001 From: Dan Kilman Date: Sun, 13 Apr 2014 18:06:13 +0300 -Subject: [PATCH 382/389] bash completion: fix __get_startable_units +Subject: [PATCH] bash completion: fix __get_startable_units (cherry picked from commit a163b64c4b08e8a4ad39a9a295acf3d1634024a3) (cherry picked from commit cc9db03683d794e2894bb1a682724fb3493e0bf5) @@ -22,6 +22,3 @@ index 857552d..1e4d07a 100644 __get_failed_units () { __systemctl $1 list-units \ | { while read -r a b c d; do [[ $c == "failed" ]] && echo " $a"; done; }; } __get_enabled_units () { __systemctl $1 list-unit-files \ --- -1.8.3.1 - diff --git a/0383-hwdb-update.patch b/0383-hwdb-update.patch index 9537412..b09cbf2 100644 --- a/0383-hwdb-update.patch +++ b/0383-hwdb-update.patch @@ -1,7 +1,7 @@ From fe126c66234ba110ffb4517f98a7190ea723d8c4 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Sun, 13 Apr 2014 23:46:27 -0700 -Subject: [PATCH 383/389] hwdb: update +Subject: [PATCH] hwdb: update (cherry picked from commit dbe633cc027e31a0d4fb488a3c68b7762ef0e7b3) (cherry picked from commit 6ece7006e35a434b961cbed397e9f71bf3b5c47e) @@ -2055,6 +2055,3 @@ index 371a685..d54cb2a 100644 pci:v0000AA42* ID_VENDOR_FROM_DATABASE=Scitex Digital Video --- -1.8.3.1 - diff --git a/0384-hwdb-PCI-include-primary-model-string-in-subsystem-m.patch b/0384-hwdb-PCI-include-primary-model-string-in-subsystem-m.patch index ce41cc2..183c7fb 100644 --- a/0384-hwdb-PCI-include-primary-model-string-in-subsystem-m.patch +++ b/0384-hwdb-PCI-include-primary-model-string-in-subsystem-m.patch @@ -1,6 +1,6 @@ -From 6c61b5e7430ac37630f685469548a65000a49fdf Mon Sep 17 00:00:00 2001 +From 309dbc26cd900bbedf5bebde55dc79c4144a025f Mon Sep 17 00:00:00 2001 From: Kay Sievers -Date: Wed, 11 Jun 2014 18:16:10 +0200 +Date: Mon, 14 Apr 2014 07:54:35 -0700 Subject: [PATCH] hwdb: PCI - include "primary" model string in subsystem model string @@ -11,9 +11,13 @@ some "Network Card Model Foo" to show up as "Laptop Model Bar". Try to make the best out of this mess and concatenate both strings to describe the hardware. + +(cherry picked from commit d060b62fcb4746d3758c567e9379c6728a035b66) +(cherry picked from commit 85f27e3b37972c7e123651d64abd8a305822d662) --- hwdb/20-pci-vendor-model.hwdb | 21356 ++++++++++++++++++++-------------------- - 1 file changed, 10678 insertions(+), 10678 deletions(-) + hwdb/ids-update.pl | 11 +- + 2 files changed, 10685 insertions(+), 10682 deletions(-) diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb index d54cb2a..14637d3 100644 @@ -51578,6 +51582,43 @@ index d54cb2a..14637d3 100644 pci:v0000E159d00000002* ID_MODEL_FROM_DATABASE=Tiger100APC ISDN chipset --- -1.8.3.1 - +diff --git a/hwdb/ids-update.pl b/hwdb/ids-update.pl +index 37d3556..8cfbeaa 100755 +--- a/hwdb/ids-update.pl ++++ b/hwdb/ids-update.pl +@@ -107,6 +107,7 @@ sub usb_classes { + sub pci_vendor { + my $vendor; + my $device; ++ my $device_text; + + open(IN, "<", "pci.ids"); + open(OUT, ">", "20-pci-vendor-model.hwdb"); +@@ -130,10 +131,10 @@ sub pci_vendor { + $line =~ m/^\t([0-9a-f]{4})\s*(.+)$/; + if (defined $1) { + $device = uc $1; +- my $text = $2; ++ $device_text = $2; + print(OUT "\n"); + print(OUT "pci:v0000" . $vendor . "d0000" . $device . "*\n"); +- print(OUT " ID_MODEL_FROM_DATABASE=" . $text . "\n"); ++ print(OUT " ID_MODEL_FROM_DATABASE=" . $device_text . "\n"); + next; + } + +@@ -141,10 +142,12 @@ sub pci_vendor { + if (defined $1) { + my $sub_vendor = uc $1; + my $sub_device = uc $2; +- my $text = $3; ++ my $sub_text = $3; ++ $sub_text =~ s/^\Q$device_text\E\s*//; ++ $sub_text =~ s/(.+)/\ (\1\)/; + print(OUT "\n"); + print(OUT "pci:v0000" . $vendor . "d0000" . $device . "sv0000" . $sub_vendor . "sd0000" . $sub_device . "*\n"); +- print(OUT " ID_MODEL_FROM_DATABASE=" . $text . "\n"); ++ print(OUT " ID_MODEL_FROM_DATABASE=" . $device_text . $sub_text . "\n"); + } + } + diff --git a/0385-sysctl-replaces-some-slashes-with-dots.patch b/0385-sysctl-replaces-some-slashes-with-dots.patch index ae4fd56..25ba5b3 100644 --- a/0385-sysctl-replaces-some-slashes-with-dots.patch +++ b/0385-sysctl-replaces-some-slashes-with-dots.patch @@ -1,7 +1,7 @@ From 8fe9940538c2dbf3b507e4f61146dabe48a6a840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 16 Apr 2014 21:33:46 -0400 -Subject: [PATCH 385/389] sysctl: replaces some slashes with dots +Subject: [PATCH] sysctl: replaces some slashes with dots It turns out that plain sysctl understands a.b/c syntax to write to /proc/sys/a/b.c. Support this for compatibility. @@ -94,6 +94,3 @@ index 8fb0eb6..70c4d89 100644 return s; } --- -1.8.3.1 - diff --git a/0386-man-document-relationship-between-RequiresMountsFor-.patch b/0386-man-document-relationship-between-RequiresMountsFor-.patch index 7113b80..06d0567 100644 --- a/0386-man-document-relationship-between-RequiresMountsFor-.patch +++ b/0386-man-document-relationship-between-RequiresMountsFor-.patch @@ -1,8 +1,8 @@ From 8fa331022f479dbeb489558e6d1241e7738dd1c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 16 Apr 2014 22:15:42 -0400 -Subject: [PATCH 386/389] man: document relationship between RequiresMountsFor - and noauto +Subject: [PATCH] man: document relationship between RequiresMountsFor and + noauto https://bugzilla.redhat.com/show_bug.cgi?id=1088057 (cherry picked from commit 5d2abc04fc95f5c5f6d0eaf2f9b06c70d504019f) @@ -48,6 +48,3 @@ index 4704352..eb8b13d 100644 --- -1.8.3.1 - diff --git a/0387-install-create_symlink-check-unlink-return-value.patch b/0387-install-create_symlink-check-unlink-return-value.patch index 78c93ef..15611fa 100644 --- a/0387-install-create_symlink-check-unlink-return-value.patch +++ b/0387-install-create_symlink-check-unlink-return-value.patch @@ -1,7 +1,7 @@ From c96e341a0d317d6345dbf1f43a8ca0e0c31aaf7d Mon Sep 17 00:00:00 2001 From: Djalal Harouni Date: Thu, 17 Apr 2014 01:47:11 +0100 -Subject: [PATCH 387/389] install: create_symlink() check unlink() return value +Subject: [PATCH] install: create_symlink() check unlink() return value create_symlink() do not check the return value of unlink(), this may confuse the user. @@ -44,6 +44,3 @@ index b9c85b7..e6a61fa 100644 if (symlink(old_path, new_path) >= 0) { add_file_change(changes, n_changes, UNIT_FILE_UNLINK, new_path, NULL); --- -1.8.3.1 - diff --git a/0388-delta-do-not-use-unicode-chars-in-C-locale.patch b/0388-delta-do-not-use-unicode-chars-in-C-locale.patch index b24c5d6..ada61d2 100644 --- a/0388-delta-do-not-use-unicode-chars-in-C-locale.patch +++ b/0388-delta-do-not-use-unicode-chars-in-C-locale.patch @@ -1,7 +1,7 @@ From f4b442a95d85a73cbe3a75fb20812942900c4307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 16 Apr 2014 23:33:41 -0400 -Subject: [PATCH 388/389] delta: do not use unicode chars in C locale +Subject: [PATCH] delta: do not use unicode chars in C locale https://bugzilla.redhat.com/show_bug.cgi?id=1088418 (cherry picked from commit 00a5cc3a63c125633e822f39efd9c32223169f62) @@ -131,6 +131,3 @@ index a8dd57e..f1aea80 100644 free(hashmap_remove(bottom, basename(p))); k = hashmap_put(bottom, basename(p), p); if (k < 0) { --- -1.8.3.1 - diff --git a/0389-core-print-debug-instead-of-error-message.patch b/0389-core-print-debug-instead-of-error-message.patch index 39793c7..dc88d0c 100644 --- a/0389-core-print-debug-instead-of-error-message.patch +++ b/0389-core-print-debug-instead-of-error-message.patch @@ -1,7 +1,7 @@ From f517790db5277fa71d6ae3617244f1acc4b62572 Mon Sep 17 00:00:00 2001 From: Michal Sekletar Date: Wed, 14 May 2014 15:13:43 +0200 -Subject: [PATCH 389/389] core: print debug instead of error message +Subject: [PATCH] core: print debug instead of error message In case that session scope is in some other state than SCOPE_RUNNING or SCOPE_ABANDONED we will not print error message. It might be the case @@ -26,6 +26,3 @@ index 58dd9ff..71d6921 100644 reply = dbus_message_new_method_return(message); if (!reply) --- -1.8.3.1 - diff --git a/0390-tmpfiles-fix-permissions-on-new-journal-files.patch b/0390-tmpfiles-fix-permissions-on-new-journal-files.patch new file mode 100644 index 0000000..2773bf8 --- /dev/null +++ b/0390-tmpfiles-fix-permissions-on-new-journal-files.patch @@ -0,0 +1,27 @@ +From 6e166e82a0dfb7fc51397fdb72797bf10624a510 Mon Sep 17 00:00:00 2001 +From: Greg KH +Date: Tue, 15 Apr 2014 14:12:01 -0700 +Subject: [PATCH] tmpfiles: fix permissions on new journal files + +When starting up journald on a new system, set the proper permissions on +the system.journal files, not only on the journal directory. + +(cherry picked from commit a606871da508995f5ede113a8fc6538afd98966c) +(cherry picked from commit ea082a72550975b831076e135f89c035259fdca8) +--- + tmpfiles.d/systemd.conf | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf +index 7c6d6b9..c470045 100644 +--- a/tmpfiles.d/systemd.conf ++++ b/tmpfiles.d/systemd.conf +@@ -23,6 +23,6 @@ d /run/systemd/machines 0755 root root - + d /run/systemd/shutdown 0755 root root - + + m /var/log/journal 2755 root systemd-journal - - +-m /var/log/journal/%m 2755 root systemd-journal - - ++Z /var/log/journal/%m 2755 root systemd-journal - - + m /run/log/journal 2755 root systemd-journal - - +-m /run/log/journal/%m 2755 root systemd-journal - - ++Z /run/log/journal/%m 2755 root systemd-journal - - diff --git a/0391-implement-a-union-to-pad-out-file_handle.patch b/0391-implement-a-union-to-pad-out-file_handle.patch new file mode 100644 index 0000000..fb4ff27 --- /dev/null +++ b/0391-implement-a-union-to-pad-out-file_handle.patch @@ -0,0 +1,102 @@ +From 15934e2c8123ee307574059d7c3f6a5916c054c9 Mon Sep 17 00:00:00 2001 +From: Dave Reisner +Date: Sat, 19 Apr 2014 13:22:35 -0400 +Subject: [PATCH] implement a union to pad out file_handle + +Cases where name_to_handle_at is used allocated the full struct to be +MAX_HANDLE_SZ, and assigned this size to handle_bytes. This is wrong +since handle_bytes should describe the length of the flexible array +member and not the whole struct. + +Define a union type which includes sufficient padding to allow +assignment of MAX_HANDLE_SZ to be correct. + +(cherry picked from commit 370c860f748d149097710dc7952a64f627db9de7) + +Conflicts: + src/shared/util.h + +(cherry picked from commit 91795825a093331ef136be1d630c5fcad299dfe8) + +Conflicts: + src/libudev/libudev-monitor.c + src/shared/util.h +--- + src/readahead/readahead-common.c | 6 ++---- + src/shared/util.h | 6 ++++++ + src/tmpfiles/tmpfiles.c | 11 ++++------- + 3 files changed, 12 insertions(+), 11 deletions(-) + +diff --git a/src/readahead/readahead-common.c b/src/readahead/readahead-common.c +index aea1fbe..1edf9cc 100644 +--- a/src/readahead/readahead-common.c ++++ b/src/readahead/readahead-common.c +@@ -75,7 +75,7 @@ int fs_on_ssd(const char *p) { + if (major(st.st_dev) == 0) { + _cleanup_fclose_ FILE *f = NULL; + int mount_id; +- struct file_handle *h; ++ union file_handle_union h = { .handle.handle_bytes = MAX_HANDLE_SZ, }; + + /* Might be btrfs, which exposes "ssd" as mount flag if it is on ssd. + * +@@ -83,9 +83,7 @@ int fs_on_ssd(const char *p) { + * and then lookup the mount ID in mountinfo to find + * the mount options. */ + +- h = alloca(MAX_HANDLE_SZ); +- h->handle_bytes = MAX_HANDLE_SZ; +- r = name_to_handle_at(AT_FDCWD, p, h, &mount_id, AT_SYMLINK_FOLLOW); ++ r = name_to_handle_at(AT_FDCWD, p, &h.handle, &mount_id, AT_SYMLINK_FOLLOW); + if (r < 0) + return false; + +diff --git a/src/shared/util.h b/src/shared/util.h +index 47a3dc9..a173885 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -22,6 +22,7 @@ + ***/ + + #include ++#include + #include + #include + #include +@@ -776,3 +777,8 @@ static inline void qsort_safe(void *base, size_t nmemb, size_t size, + qsort(base, nmemb, size, compar); + } + } ++ ++union file_handle_union { ++ struct file_handle handle; ++ char padding[sizeof(struct file_handle) + MAX_HANDLE_SZ]; ++}; +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index fb88acd..98d01a1 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -215,19 +215,16 @@ static bool unix_socket_alive(const char *fn) { + } + + static int dir_is_mount_point(DIR *d, const char *subdir) { +- struct file_handle *h; ++ union file_handle_union h = { .handle.handle_bytes = MAX_HANDLE_SZ }; + int mount_id_parent, mount_id; + int r_p, r; + +- h = alloca(MAX_HANDLE_SZ); +- +- h->handle_bytes = MAX_HANDLE_SZ; +- r_p = name_to_handle_at(dirfd(d), ".", h, &mount_id_parent, 0); ++ r_p = name_to_handle_at(dirfd(d), ".", &h.handle, &mount_id_parent, 0); + if (r_p < 0) + r_p = -errno; + +- h->handle_bytes = MAX_HANDLE_SZ; +- r = name_to_handle_at(dirfd(d), subdir, h, &mount_id, 0); ++ h.handle.handle_bytes = MAX_HANDLE_SZ; ++ r = name_to_handle_at(dirfd(d), subdir, &h.handle, &mount_id, 0); + if (r < 0) + r = -errno; + diff --git a/0392-analyze-fix-plot-with-bad-y-size.patch b/0392-analyze-fix-plot-with-bad-y-size.patch new file mode 100644 index 0000000..5719db0 --- /dev/null +++ b/0392-analyze-fix-plot-with-bad-y-size.patch @@ -0,0 +1,30 @@ +From cf4985c7528dae09a20de12603108e23914e3313 Mon Sep 17 00:00:00 2001 +From: Jeffrey Clark +Date: Wed, 23 Apr 2014 22:37:43 +0200 +Subject: [PATCH] analyze: fix plot with bad y size + +systemd-analyze plot > test.svg produces output with all y and height +element attributes equal to zero. This of course causes the resulting +svg to appear blank (zero height). Bug does not affect x86. Looks like +a compiler optimization may be the culprit. + +https://github.com/archlinuxarm/PKGBUILDs/issues/815 +(cherry picked from commit a213b7e977221ca96bbc1b19a5a879c912ba2488) +(cherry picked from commit 6e150a59cacafbb2c339e0854f449d63ef919a4f) +--- + src/analyze/systemd-analyze.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c +index 317baf9..25f8ad6 100644 +--- a/src/analyze/systemd-analyze.c ++++ b/src/analyze/systemd-analyze.c +@@ -41,7 +41,7 @@ + #include "pager.h" + + #define SCALE_X (0.1 / 1000.0) /* pixels per us */ +-#define SCALE_Y 20.0 ++#define SCALE_Y (20.0) + + #define compare(a, b) (((a) > (b))? 1 : (((b) > (a))? -1 : 0)) + diff --git a/0393-util-make-sure-all-our-name_to_handle_at-code-makes-.patch b/0393-util-make-sure-all-our-name_to_handle_at-code-makes-.patch new file mode 100644 index 0000000..0cf8c23 --- /dev/null +++ b/0393-util-make-sure-all-our-name_to_handle_at-code-makes-.patch @@ -0,0 +1,80 @@ +From 40d9f7140b14274413e4f604b5c54aab6b07a3bd Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 24 Apr 2014 07:46:31 +0200 +Subject: [PATCH] util: make sure all our name_to_handle_at() code makes use of + file_handle_union + +(cherry picked from commit 21749924e12201d8f5210c5dc9695e18fd16bb93) +(cherry picked from commit 6b494ffbcb54873508b6ca18ec93dfa20221d542) + +Conflicts: + src/libudev/libudev-monitor.c +--- + src/shared/path-util.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index 45099ee..d8c14e8 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -327,11 +327,15 @@ bool path_equal(const char *a, const char *b) { + } + + int path_is_mount_point(const char *t, bool allow_symlink) { +- char *parent; +- int r; +- struct file_handle *h; ++ ++ union file_handle_union h = { ++ .handle.handle_bytes = MAX_HANDLE_SZ ++ }; ++ + int mount_id, mount_id_parent; ++ char *parent; + struct stat a, b; ++ int r; + + /* We are not actually interested in the file handles, but + * name_to_handle_at() also passes us the mount ID, hence use +@@ -340,12 +344,9 @@ int path_is_mount_point(const char *t, bool allow_symlink) { + if (path_equal(t, "/")) + return 1; + +- h = alloca(MAX_HANDLE_SZ); +- h->handle_bytes = MAX_HANDLE_SZ; +- +- r = name_to_handle_at(AT_FDCWD, t, h, &mount_id, allow_symlink ? AT_SYMLINK_FOLLOW : 0); ++ r = name_to_handle_at(AT_FDCWD, t, &h.handle, &mount_id, allow_symlink ? AT_SYMLINK_FOLLOW : 0); + if (r < 0) { +- if (errno == ENOSYS || errno == ENOTSUP) ++ if (IN_SET(errno, ENOSYS, EOPNOTSUPP)) + /* This kernel or file system does not support + * name_to_handle_at(), hence fallback to the + * traditional stat() logic */ +@@ -361,15 +362,14 @@ int path_is_mount_point(const char *t, bool allow_symlink) { + if (r < 0) + return r; + +- h->handle_bytes = MAX_HANDLE_SZ; +- r = name_to_handle_at(AT_FDCWD, parent, h, &mount_id_parent, 0); ++ h.handle.handle_bytes = MAX_HANDLE_SZ; ++ r = name_to_handle_at(AT_FDCWD, parent, &h.handle, &mount_id_parent, 0); + free(parent); +- + if (r < 0) { + /* The parent can't do name_to_handle_at() but the + * directory we are interested in can? If so, it must + * be a mount point */ +- if (errno == ENOTSUP) ++ if (errno == EOPNOTSUPP) + return 1; + + return -errno; +@@ -396,7 +396,6 @@ fallback: + + r = lstat(parent, &b); + free(parent); +- + if (r < 0) + return -errno; + diff --git a/0394-Fix-keysize-handling-in-cryptsetup-bits-vs.-bytes.patch b/0394-Fix-keysize-handling-in-cryptsetup-bits-vs.-bytes.patch new file mode 100644 index 0000000..97884d2 --- /dev/null +++ b/0394-Fix-keysize-handling-in-cryptsetup-bits-vs.-bytes.patch @@ -0,0 +1,58 @@ +From ecdee21de85bfcbb308f47a7983b683f71ed111d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20H=C3=A4rdeman?= +Date: Tue, 25 Mar 2014 11:05:28 +0100 +Subject: [PATCH] Fix keysize handling in cryptsetup (bits vs. bytes) + +The command line key-size is in bits but the libcryptsetup API expects bytes. + +Note that the modulo 8 check is in the original cryptsetup binary as well, so +it's no new limitation. + +(v2: changed the point at which the /= 8 is performed, rebased, removed tabs) + +(cherry picked from commit 6131a78b4d247618715e042e14ad682f678d3b32) + +Conflicts: + src/cryptsetup/cryptsetup.c + +(cherry picked from commit 19ef179118bcf92b7290669edf7e38e12f1a80d6) +--- + src/cryptsetup/cryptsetup.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index 6a76d21..1211433 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -88,6 +88,13 @@ static int parse_one_option(const char *option) { + return 0; + } + ++ if (opt_key_size % 8) { ++ log_error("size= not a multiple of 8, ignoring."); ++ return 0; ++ } ++ ++ opt_key_size /= 8; ++ + } else if (startswith(option, "key-slot=")) { + + opt_type = CRYPT_LUKS1; +@@ -414,7 +421,7 @@ static int attach_luks_or_plain(struct crypt_device *cd, + /* for CRYPT_PLAIN limit reads + * from keyfile to key length, and + * ignore keyfile-size */ +- opt_keyfile_size = opt_key_size / 8; ++ opt_keyfile_size = opt_key_size; + + /* In contrast to what the name + * crypt_setup() might suggest this +@@ -577,7 +584,7 @@ int main(int argc, char *argv[]) { + else + until = 0; + +- opt_key_size = (opt_key_size > 0 ? opt_key_size : 256); ++ opt_key_size = (opt_key_size > 0 ? opt_key_size : (256 / 8)); + + if (key_file) { + struct stat st; diff --git a/0395-udev-increase-the-size-of-RESULT-buffer.patch b/0395-udev-increase-the-size-of-RESULT-buffer.patch new file mode 100644 index 0000000..73e3bdd --- /dev/null +++ b/0395-udev-increase-the-size-of-RESULT-buffer.patch @@ -0,0 +1,28 @@ +From 38ca51efdd827ad68dc72139f2a45054da7ae5a3 Mon Sep 17 00:00:00 2001 +From: Robert Milasan +Date: Thu, 24 Apr 2014 11:23:33 +0200 +Subject: [PATCH] udev: increase the size of RESULT buffer + +Under some conditions, in udev_rules_apply_to_event the fact that +result is 1024 bytes, creates problems if the output of the running +command/app is bigger then 1024 bytes. + +(cherry picked from commit 209b031e4fb7b50fc1812fc7c6ea59ca2f5d0c78) +(cherry picked from commit aa8c95a158ada263eb0ddc53643bf94517290871) +--- + src/udev/udev-rules.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c +index 392ae86..366d870 100644 +--- a/src/udev/udev-rules.c ++++ b/src/udev/udev-rules.c +@@ -2058,7 +2058,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event + case TK_M_PROGRAM: { + char program[UTIL_PATH_SIZE]; + char **envp; +- char result[UTIL_PATH_SIZE]; ++ char result[UTIL_LINE_SIZE]; + + free(event->program_result); + event->program_result = NULL; diff --git a/0396-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch b/0396-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch new file mode 100644 index 0000000..4e4679c --- /dev/null +++ b/0396-job-add-waiting-jobs-to-run-queue-in-unit_coldplug.patch @@ -0,0 +1,44 @@ +From fca7e7a4d9e325236893a3774472ebfdeb6540ad Mon Sep 17 00:00:00 2001 +From: Brandon Philips +Date: Fri, 25 Apr 2014 09:31:59 -0600 +Subject: [PATCH] job: add waiting jobs to run queue in unit_coldplug + +When we have job installed and added to run queue for service which is +still in dead state and systemd initiates reload then after reload we +never add deserialized job to the run queue again. This is caused by +check in service_coldplug() where we check if deserialized state is +something else than dead state, which is not the case thus we never call +service_set_state() and finally unit_notify() where we would have added +job to the run queue. + +Thanks to Michal Sekletar for the original patch. + +(cherry picked from commit 20a83d7bf4542875f8033b68682a4da4993010e8) + +Conflicts: + src/core/job.c + +(cherry picked from commit 39cdf9313c28c3853aa001bbb522f71703cbfcc3) + +Conflicts: + src/core/job.c + +This includes the fixup in ae6feb2a01f6954af682bc3580c95d99721dcf46. +--- + src/core/job.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/core/job.c b/src/core/job.c +index 7d2b994..c6bf08f 100644 +--- a/src/core/job.c ++++ b/src/core/job.c +@@ -1070,6 +1070,9 @@ int job_coldplug(Job *j) { + .events = EPOLLIN, + }; + ++ if (j->state == JOB_WAITING) ++ job_add_to_run_queue(j); ++ + if (j->timer_watch.type != WATCH_JOB_TIMER) + return 0; + diff --git a/0397-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch b/0397-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch new file mode 100644 index 0000000..22677b8 --- /dev/null +++ b/0397-machine-id-only-look-into-KVM-uuid-when-we-are-not-r.patch @@ -0,0 +1,81 @@ +From 3661cdb8e4bf9745402f2e476d38ba8b21431554 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 28 Apr 2014 18:11:40 +0200 +Subject: [PATCH] machine-id: only look into KVM uuid when we are not running + in a container + +(cherry picked from commit 0b36bbc42d3a408531517a02acaf56105b863d55) + +Conflicts: + src/core/machine-id-setup.c + +(cherry picked from commit 0ade4b119d9d00252ce51f85b9b9019d0717c183) +--- + src/core/machine-id-setup.c | 47 +++++++++++++++++++++++---------------------- + 1 file changed, 24 insertions(+), 23 deletions(-) + +diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c +index 18e015f..dcd1630 100644 +--- a/src/core/machine-id-setup.c ++++ b/src/core/machine-id-setup.c +@@ -88,29 +88,6 @@ static int generate(char id[34]) { + } + } + +- /* If that didn't work, see if we are running in qemu/kvm and a +- * machine ID was passed in via -uuid on the qemu/kvm command +- * line */ +- +- r = detect_vm(&vm_id); +- if (r > 0 && streq(vm_id, "kvm")) { +- char uuid[37]; +- +- fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); +- if (fd >= 0) { +- k = loop_read(fd, uuid, 36, false); +- close_nointr_nofail(fd); +- +- if (k >= 36) { +- r = shorten_uuid(id, uuid); +- if (r >= 0) { +- log_info("Initializing machine ID from KVM UUID."); +- return 0; +- } +- } +- } +- } +- + /* If that didn't work either, see if we are running in a + * container, and a machine ID was passed in via + * $container_uuid the way libvirt/LXC does it */ +@@ -128,6 +105,30 @@ static int generate(char id[34]) { + } + } + } ++ ++ } else { ++ /* If we are not running in a container, see if we are ++ * running in qemu/kvm and a machine ID was passed in ++ * via -uuid on the qemu/kvm command line */ ++ ++ r = detect_vm(&vm_id); ++ if (r > 0 && streq(vm_id, "kvm")) { ++ char uuid[37]; ++ ++ fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); ++ if (fd >= 0) { ++ k = loop_read(fd, uuid, 36, false); ++ close_nointr_nofail(fd); ++ ++ if (k >= 36) { ++ r = shorten_uuid(id, uuid); ++ if (r >= 0) { ++ log_info("Initializing machine ID from KVM UUID."); ++ return 0; ++ } ++ } ++ } ++ } + } + + /* If that didn't work, generate a random machine id */ diff --git a/0398-hwdb-update.patch b/0398-hwdb-update.patch new file mode 100644 index 0000000..4bec12f --- /dev/null +++ b/0398-hwdb-update.patch @@ -0,0 +1,3963 @@ +From 84338737f00943285fe9832b51b6a7ff2acff12f Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Mon, 5 May 2014 14:23:10 +0200 +Subject: [PATCH] hwdb: update + +(cherry picked from commit 61fb23db45c626d92b4e33f09b9287f58a3625a5) +(cherry picked from commit 65d593c63301cd4deeef72f027901a4511e07f0c) +--- + hwdb/20-OUI.hwdb | 295 ++++++++++++- + hwdb/20-pci-vendor-model.hwdb | 174 ++++++-- + hwdb/20-usb-vendor-model.hwdb | 992 ++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 1368 insertions(+), 93 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index 17794ed..afc0d90 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -13940,7 +13940,7 @@ OUI:000063* + ID_OUI_FROM_DATABASE=BARCO CONTROL ROOMS GMBH + + OUI:000064* +- ID_OUI_FROM_DATABASE=YOKOGAWA DIGITAL COMPUTER CORP ++ ID_OUI_FROM_DATABASE=Yokogawa Electric Corporation + + OUI:000065* + ID_OUI_FROM_DATABASE=Network General Corporation +@@ -14927,7 +14927,7 @@ OUI:0001AE* + ID_OUI_FROM_DATABASE=Trex Enterprises + + OUI:0001AF* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:0001B0* + ID_OUI_FROM_DATABASE=Fulltek Technology Co., Ltd. +@@ -18272,7 +18272,7 @@ OUI:00060A* + ID_OUI_FROM_DATABASE=Blue2space + + OUI:00060B* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:00060C* + ID_OUI_FROM_DATABASE=Melco Industries, Inc. +@@ -20441,7 +20441,7 @@ OUI:0008F8* + ID_OUI_FROM_DATABASE=UTC CCS + + OUI:0008F9* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:0008FA* + ID_OUI_FROM_DATABASE=Karl E.Brinkmann GmbH +@@ -46612,6 +46612,9 @@ OUI:0064A6* + OUI:00664B* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + ++OUI:006B8E* ++ ID_OUI_FROM_DATABASE=Shanghai Feixun Communication Co.,Ltd. ++ + OUI:006B9E* + ID_OUI_FROM_DATABASE=VIZIO Inc + +@@ -46850,7 +46853,7 @@ OUI:008041* + ID_OUI_FROM_DATABASE=VEB KOMBINAT ROBOTRON + + OUI:008042* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:008043* + ID_OUI_FROM_DATABASE=NETWORLD, INC. +@@ -49919,7 +49922,7 @@ OUI:00C0F8* + ID_OUI_FROM_DATABASE=ABOUT COMPUTING INC. + + OUI:00C0F9* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:00C0FA* + ID_OUI_FROM_DATABASE=CANARY COMMUNICATIONS, INC. +@@ -50957,7 +50960,7 @@ OUI:00E034* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + + OUI:00E035* +- ID_OUI_FROM_DATABASE=Emerson Network Power ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:00E036* + ID_OUI_FROM_DATABASE=PIONEER CORPORATION +@@ -52477,6 +52480,9 @@ OUI:0838A5* + OUI:083AB8* + ID_OUI_FROM_DATABASE=Shinoda Plasma Co., Ltd. + ++OUI:083D88* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:083E0C* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -52495,9 +52501,6 @@ OUI:084027* + OUI:08482C* + ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD. + +-OUI:084929* +- ID_OUI_FROM_DATABASE=CYBATI +- + OUI:084E1C* + ID_OUI_FROM_DATABASE=H2A Systems, LLC + +@@ -52867,6 +52870,9 @@ OUI:0C8910* + OUI:0C8BFD* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:0C8C8F* ++ ID_OUI_FROM_DATABASE=Kamo Technology Limited ++ + OUI:0C8CDC* + ID_OUI_FROM_DATABASE=Suunto Oy + +@@ -53515,6 +53521,9 @@ OUI:1499E2* + OUI:149FE8* + ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. + ++OUI:14A364* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:14A62C* + ID_OUI_FROM_DATABASE=S.M. Dezac S.A. + +@@ -54403,6 +54412,9 @@ OUI:20918A* + OUI:2091D9* + ID_OUI_FROM_DATABASE=I'M SPA + ++OUI:20934D* ++ ID_OUI_FROM_DATABASE=Fujian Star-net Communication Co., Ltd ++ + OUI:209AE9* + ID_OUI_FROM_DATABASE=Volacomm Co., Ltd + +@@ -54598,6 +54610,9 @@ OUI:24470E* + OUI:24497B* + ID_OUI_FROM_DATABASE=Innovative Converged Devices Inc + ++OUI:244F1D* ++ ID_OUI_FROM_DATABASE=iRule LLC ++ + OUI:245FDF* + ID_OUI_FROM_DATABASE=KYOCERA Corporation + +@@ -54751,6 +54766,9 @@ OUI:24DEC6* + OUI:24E271* + ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd + ++OUI:24E314* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:24E6BA* + ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky + +@@ -54829,6 +54847,9 @@ OUI:2826A6* + OUI:28285D* + ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation + ++OUI:2829CC* ++ ID_OUI_FROM_DATABASE=Corsa Technology Incorporated ++ + OUI:2829D9* + ID_OUI_FROM_DATABASE=GlobalBeiMing technology (Beijing)Co. Ltd + +@@ -55087,12 +55108,18 @@ OUI:28E14C* + OUI:28E297* + ID_OUI_FROM_DATABASE=Shanghai InfoTM Microelectronics Co.,Ltd. + ++OUI:28E31F* ++ ID_OUI_FROM_DATABASE=Xiaomi inc. ++ + OUI:28E347* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + + OUI:28E608* + ID_OUI_FROM_DATABASE=Tokheim + ++OUI:28E6E9* ++ ID_OUI_FROM_DATABASE=SIS Sat Internet Services GmbH ++ + OUI:28E794* + ID_OUI_FROM_DATABASE=Microtime Computer Inc. + +@@ -55225,6 +55252,9 @@ OUI:2C534A* + OUI:2C542D* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:2C54CF* ++ ID_OUI_FROM_DATABASE=LG Electronics ++ + OUI:2C553C* + ID_OUI_FROM_DATABASE=Gainspeed, Inc. + +@@ -55330,6 +55360,9 @@ OUI:2CA835* + OUI:2CAB25* + ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd + ++OUI:2CABA4* ++ ID_OUI_FROM_DATABASE=Cisco SPVTG ++ + OUI:2CB05D* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -55456,6 +55489,9 @@ OUI:303294* + OUI:3032D4* + ID_OUI_FROM_DATABASE=Hanilstm Co., Ltd. + ++OUI:303335* ++ ID_OUI_FROM_DATABASE=Boosty ++ + OUI:3037A6* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -55888,6 +55924,9 @@ OUI:34BA9A* + OUI:34BB1F* + ID_OUI_FROM_DATABASE=Research In Motion + ++OUI:34BB26* ++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC ++ + OUI:34BCA6* + ID_OUI_FROM_DATABASE=Beijing Ding Qing Technology, Ltd. + +@@ -55975,6 +56014,9 @@ OUI:34EF44* + OUI:34EF8B* + ID_OUI_FROM_DATABASE=NTT Communications Corporation + ++OUI:34F0CA* ++ ID_OUI_FROM_DATABASE=Shenzhen Linghangyuan Digital Technology Co.,Ltd. ++ + OUI:34F39B* + ID_OUI_FROM_DATABASE=WizLAN Ltd. + +@@ -56023,6 +56065,9 @@ OUI:381766* + OUI:38192F* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:381C1A* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:381C4A* + ID_OUI_FROM_DATABASE=SIMCom Wireless Solutions Co.,Ltd. + +@@ -56236,6 +56281,9 @@ OUI:38F597* + OUI:38F708* + ID_OUI_FROM_DATABASE=National Resource Management, Inc. + ++OUI:38F889* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:38F8B7* + ID_OUI_FROM_DATABASE=V2COM PARTICIPACOES S.A. + +@@ -56287,6 +56335,9 @@ OUI:3C15C2* + OUI:3C15EA* + ID_OUI_FROM_DATABASE=TESCOM CO., LTD. + ++OUI:3C189F* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:3C18A0* + ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co.,Ltd. + +@@ -56521,6 +56572,9 @@ OUI:3CD7DA* + OUI:3CD92B* + ID_OUI_FROM_DATABASE=Hewlett-Packard Company + ++OUI:3CD9CE* ++ ID_OUI_FROM_DATABASE=Eclipse WiFi ++ + OUI:3CDF1E* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -56725,6 +56779,9 @@ OUI:407A80* + OUI:407B1B* + ID_OUI_FROM_DATABASE=Mettle Networks Inc. + ++OUI:408256* ++ ID_OUI_FROM_DATABASE=Continental Automotive GmbH ++ + OUI:4083DE* + ID_OUI_FROM_DATABASE=Motorola + +@@ -56818,6 +56875,9 @@ OUI:40C245* + OUI:40C4D6* + ID_OUI_FROM_DATABASE=ChongQing Camyu Technology Development Co.,Ltd. + ++OUI:40C62A* ++ ID_OUI_FROM_DATABASE=Shanghai Jing Ren Electronic Technology Co., Ltd. ++ + OUI:40C7C9* + ID_OUI_FROM_DATABASE=Naviit Inc. + +@@ -57001,6 +57061,9 @@ OUI:446132* + OUI:44619C* + ID_OUI_FROM_DATABASE=FONsystem co. ltd. + ++OUI:44666E* ++ ID_OUI_FROM_DATABASE=IP-LINE ++ + OUI:446755* + ID_OUI_FROM_DATABASE=Orbit Irrigation + +@@ -57019,6 +57082,9 @@ OUI:44700B* + OUI:447098* + ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED + ++OUI:44746C* ++ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB ++ + OUI:447BC4* + ID_OUI_FROM_DATABASE=DualShine Technology(SZ)Co.,Ltd + +@@ -57079,6 +57145,9 @@ OUI:44A42D* + OUI:44A689* + ID_OUI_FROM_DATABASE=PROMAX ELECTRONICA SA + ++OUI:44A6E5* ++ ID_OUI_FROM_DATABASE=THINKING TECHNOLOGY CO.,LTD ++ + OUI:44A7CF* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + +@@ -57178,6 +57247,9 @@ OUI:48022A* + OUI:480362* + ID_OUI_FROM_DATABASE=DESAY ELECTRONICS(HUIZHOU)CO.,LTD + ++OUI:480C49* ++ ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC ++ + OUI:481249* + ID_OUI_FROM_DATABASE=Luxcom Technologies Inc. + +@@ -57463,6 +57535,9 @@ OUI:4C2258* + OUI:4C2578* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:4C26E7* ++ ID_OUI_FROM_DATABASE=Welgate Co., Ltd. ++ + OUI:4C2C80* + ID_OUI_FROM_DATABASE=Beijing Skyway Technologies Co.,Ltd + +@@ -57535,6 +57610,9 @@ OUI:4C63EB* + OUI:4C64D9* + ID_OUI_FROM_DATABASE=Guangdong Leawin Group Co., Ltd + ++OUI:4C6E6E* ++ ID_OUI_FROM_DATABASE=Comnect Technology CO.,LTD ++ + OUI:4C72B9* + ID_OUI_FROM_DATABASE=Pegatron Corporation + +@@ -57565,6 +57643,9 @@ OUI:4C8093* + OUI:4C82CF* + ID_OUI_FROM_DATABASE=Echostar Technologies + ++OUI:4C83DE* ++ ID_OUI_FROM_DATABASE=Cisco SPVTG ++ + OUI:4C8B30* + ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc + +@@ -57592,6 +57673,9 @@ OUI:4C9E80* + OUI:4C9EE4* + ID_OUI_FROM_DATABASE=Hanyang Navicom Co.,Ltd. + ++OUI:4C9EFF* ++ ID_OUI_FROM_DATABASE=ZyXEL Communications Corp ++ + OUI:4CA56D* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -57775,6 +57859,9 @@ OUI:504A6E* + OUI:504F94* + ID_OUI_FROM_DATABASE=Loxone Electronics GmbH + ++OUI:505065* ++ ID_OUI_FROM_DATABASE=TAKT Corporation ++ + OUI:505663* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -57808,6 +57895,9 @@ OUI:506313* + OUI:506441* + ID_OUI_FROM_DATABASE=Greenlee + ++OUI:506787* ++ ID_OUI_FROM_DATABASE=iTellus ++ + OUI:5067F0* + ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation + +@@ -58693,6 +58783,12 @@ OUI:5CAC4C* + OUI:5CB524* + ID_OUI_FROM_DATABASE=Sony Ericsson Mobile Communications AB + ++OUI:5CB6CC* ++ ID_OUI_FROM_DATABASE=NovaComm Technologies Inc. ++ ++OUI:5CB8CB* ++ ID_OUI_FROM_DATABASE=Allis Communications ++ + OUI:5CBD9E* + ID_OUI_FROM_DATABASE=HONGKONG MIRACLE EAGLE TECHNOLOGY(GROUP) LIMITED + +@@ -58789,6 +58885,9 @@ OUI:5CF8A1* + OUI:5CF938* + ID_OUI_FROM_DATABASE=Apple, Inc + ++OUI:5CF96A* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:5CF9DD* + ID_OUI_FROM_DATABASE=Dell Inc + +@@ -58927,6 +59026,9 @@ OUI:60748D* + OUI:607688* + ID_OUI_FROM_DATABASE=Velodyne + ++OUI:6077E2* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:60812B* + ID_OUI_FROM_DATABASE=Custom Control Concepts + +@@ -59074,6 +59176,9 @@ OUI:60E00E* + OUI:60E327* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:60E701* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:60E956* + ID_OUI_FROM_DATABASE=Ayla Networks, Inc + +@@ -59131,6 +59236,9 @@ OUI:6405BE* + OUI:64094C* + ID_OUI_FROM_DATABASE=Beijing Superbee Wireless Technology Co.,Ltd + ++OUI:640980* ++ ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD ++ + OUI:640B4A* + ID_OUI_FROM_DATABASE=Digital Telecom Technology Limited + +@@ -59254,6 +59362,9 @@ OUI:645FFF* + OUI:646223* + ID_OUI_FROM_DATABASE=Cellient Co., Ltd. + ++OUI:64649B* ++ ID_OUI_FROM_DATABASE=juniper networks ++ + OUI:6465C0* + ID_OUI_FROM_DATABASE=Nuvon, Inc + +@@ -59680,6 +59791,9 @@ OUI:689C5E* + OUI:689C70* + ID_OUI_FROM_DATABASE=Apple + ++OUI:68A0F6* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:68A1B7* + ID_OUI_FROM_DATABASE=Honghao Mingchuan Technology (Beijing) CO.,Ltd. + +@@ -60130,6 +60244,9 @@ OUI:702B1D* + OUI:702C1F* + ID_OUI_FROM_DATABASE=Wisol + ++OUI:702DD1* ++ ID_OUI_FROM_DATABASE=Newings Communication CO., LTD. ++ + OUI:702F4B* + ID_OUI_FROM_DATABASE=PolyVision Inc. + +@@ -60211,6 +60328,9 @@ OUI:705986* + OUI:705AB6* + ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD. + ++OUI:705B2E* ++ ID_OUI_FROM_DATABASE=M2Communication Inc. ++ + OUI:705CAD* + ID_OUI_FROM_DATABASE=Konami Gaming Inc + +@@ -60568,6 +60688,9 @@ OUI:748EF8* + OUI:748F1B* + ID_OUI_FROM_DATABASE=MasterImage 3D + ++OUI:748F4D* ++ ID_OUI_FROM_DATABASE=MEN Mikro Elektronik GmbH ++ + OUI:749050* + ID_OUI_FROM_DATABASE=Renesas Electronics Corporation + +@@ -60694,6 +60817,9 @@ OUI:74F07D* + OUI:74F102* + ID_OUI_FROM_DATABASE=Beijing HCHCOM Technology Co., Ltd + ++OUI:74F413* ++ ID_OUI_FROM_DATABASE=Maxwell Forest ++ + OUI:74F612* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -61582,6 +61708,9 @@ OUI:806CBC* + OUI:80711F* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:80717A* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:807693* + ID_OUI_FROM_DATABASE=Newag SA + +@@ -61633,6 +61762,9 @@ OUI:80946C* + OUI:8096B1* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:8096CA* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind Co.,Ltd ++ + OUI:80971B* + ID_OUI_FROM_DATABASE=Altenergy Power System,Inc. + +@@ -61699,6 +61831,9 @@ OUI:80D019* + OUI:80D18B* + ID_OUI_FROM_DATABASE=Hangzhou I'converge Technology Co.,Ltd + ++OUI:80D21D* ++ ID_OUI_FROM_DATABASE=AzureWave Technologies, Inc ++ + OUI:80D433* + ID_OUI_FROM_DATABASE=LzLabs GmbH + +@@ -62356,6 +62491,9 @@ OUI:8C2F39* + OUI:8C3330* + ID_OUI_FROM_DATABASE=EmFirst Co., Ltd. + ++OUI:8C3357* ++ ID_OUI_FROM_DATABASE=HiteVision Digital Media Technology Co.,Ltd. ++ + OUI:8C3AE3* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -62842,6 +62980,9 @@ OUI:90B134* + OUI:90B21F* + ID_OUI_FROM_DATABASE=Apple + ++OUI:90B686* ++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. ++ + OUI:90B8D0* + ID_OUI_FROM_DATABASE=Joyent, Inc. + +@@ -62887,6 +63028,9 @@ OUI:90D92C* + OUI:90DA4E* + ID_OUI_FROM_DATABASE=AVANU + ++OUI:90DA6A* ++ ID_OUI_FROM_DATABASE=MCC System Co., Ltd. ++ + OUI:90DB46* + ID_OUI_FROM_DATABASE=E-LEAD ELECTRONIC CO., LTD + +@@ -63100,6 +63244,9 @@ OUI:94ACCA* + OUI:94AE61* + ID_OUI_FROM_DATABASE=Alcatel Lucent + ++OUI:94AEE3* ++ ID_OUI_FROM_DATABASE=Belden Hirschmann Industries (Suzhou) Ltd. ++ + OUI:94B8C5* + ID_OUI_FROM_DATABASE=RuggedCom Inc. + +@@ -63151,6 +63298,9 @@ OUI:94CE2C* + OUI:94D019* + ID_OUI_FROM_DATABASE=Cydle Corp. + ++OUI:94D60E* ++ ID_OUI_FROM_DATABASE=shenzhen yunmao information technologies co., ltd ++ + OUI:94D723* + ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co., Ltd + +@@ -63730,6 +63880,9 @@ OUI:9CC077* + OUI:9CC0D2* + ID_OUI_FROM_DATABASE=Conductix-Wampfler AG + ++OUI:9CC172* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:9CC7A6* + ID_OUI_FROM_DATABASE=AVM GmbH + +@@ -63799,6 +63952,9 @@ OUI:A002DC* + OUI:A00363* + ID_OUI_FROM_DATABASE=Robert Bosch Healthcare GmbH + ++OUI:A00627* ++ ID_OUI_FROM_DATABASE=NEXPA System ++ + OUI:A00798* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -63898,6 +64054,9 @@ OUI:A051C6* + OUI:A055DE* + ID_OUI_FROM_DATABASE=Pace plc + ++OUI:A056B2* ++ ID_OUI_FROM_DATABASE=Harman/Becker Automotive Systems GmbH ++ + OUI:A0593A* + ID_OUI_FROM_DATABASE=V.D.S. Video Display Systems srl + +@@ -64234,6 +64393,9 @@ OUI:A45C27* + OUI:A45D36* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:A45DA1* ++ ID_OUI_FROM_DATABASE=ADB Broadband Italia ++ + OUI:A46032* + ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD + +@@ -64312,6 +64474,9 @@ OUI:A49F89* + OUI:A4A24A* + ID_OUI_FROM_DATABASE=Cisco SPVTG + ++OUI:A4A4D3* ++ ID_OUI_FROM_DATABASE=Bluebank Communication Technology Co.Ltd ++ + OUI:A4A80F* + ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd. + +@@ -64462,6 +64627,9 @@ OUI:A80600* + OUI:A80C0D* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:A81374* ++ ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company ++ + OUI:A8154D* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -64495,6 +64663,9 @@ OUI:A82BD6* + OUI:A830AD* + ID_OUI_FROM_DATABASE=Wei Fang Goertek Electronics Co.,Ltd + ++OUI:A8329A* ++ ID_OUI_FROM_DATABASE=Digicom Futuristic Technologies Ltd. ++ + OUI:A83944* + ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc + +@@ -64582,6 +64753,9 @@ OUI:A88CEE* + OUI:A88D7B* + ID_OUI_FROM_DATABASE=SunDroid Global limited. + ++OUI:A88E24* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:A8922C* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -64903,6 +65077,9 @@ OUI:AC9CE4* + OUI:ACA016* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:ACA213* ++ ID_OUI_FROM_DATABASE=Shenzhen Bilian electronic CO.,LTD ++ + OUI:ACA22C* + ID_OUI_FROM_DATABASE=Baycity Technologies Ltd + +@@ -65068,6 +65245,9 @@ OUI:B01B7C* + OUI:B01C91* + ID_OUI_FROM_DATABASE=Elim Co + ++OUI:B01F81* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. ++ + OUI:B024F3* + ID_OUI_FROM_DATABASE=Progeny Systems + +@@ -65113,6 +65293,9 @@ OUI:B058C4* + OUI:B05B1F* + ID_OUI_FROM_DATABASE=THERMO FISHER SCIENTIFIC S.P.A. + ++OUI:B05B67* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:B05CE5* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -65338,6 +65521,9 @@ OUI:B407F9* + OUI:B40832* + ID_OUI_FROM_DATABASE=TC Communications + ++OUI:B40AC6* ++ ID_OUI_FROM_DATABASE=DEXON Systems Ltd. ++ + OUI:B40B44* + ID_OUI_FROM_DATABASE=Smartisan Technology Co., Ltd. + +@@ -65533,6 +65719,9 @@ OUI:B4AA4D* + OUI:B4AB2C* + ID_OUI_FROM_DATABASE=MtM Technology Corporation + ++OUI:B4AE6F* ++ ID_OUI_FROM_DATABASE=Circle Reliance, Inc. ++ + OUI:B4B017* + ID_OUI_FROM_DATABASE=Avaya, Inc + +@@ -65566,6 +65755,9 @@ OUI:B4C810* + OUI:B4CCE9* + ID_OUI_FROM_DATABASE=PROSYST + ++OUI:B4CEF6* ++ ID_OUI_FROM_DATABASE=HTC Corporation ++ + OUI:B4CFDB* + ID_OUI_FROM_DATABASE=Shenzhen Jiuzhou Electric Co.,LTD + +@@ -65812,6 +66004,9 @@ OUI:B898B0* + OUI:B898F7* + ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen + ++OUI:B89919* ++ ID_OUI_FROM_DATABASE=7signal Solutions, Inc ++ + OUI:B89AED* + ID_OUI_FROM_DATABASE=OceanServer Technology, Inc + +@@ -66160,6 +66355,9 @@ OUI:BC9889* + OUI:BC99BC* + ID_OUI_FROM_DATABASE=FonSee Technology Inc. + ++OUI:BC9CC5* ++ ID_OUI_FROM_DATABASE=Beijing Huafei Technology Co., Ltd. ++ + OUI:BC9DA5* + ID_OUI_FROM_DATABASE=DASCOM Europe GmbH + +@@ -66511,6 +66709,9 @@ OUI:C0EAE4* + OUI:C0F1C4* + ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd. + ++OUI:C0F2FB* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:C0F79D* + ID_OUI_FROM_DATABASE=Powercode + +@@ -66613,6 +66814,9 @@ OUI:C43C3C* + OUI:C43DC7* + ID_OUI_FROM_DATABASE=NETGEAR + ++OUI:C44202* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:C4438F* + ID_OUI_FROM_DATABASE=LG Electronics + +@@ -66634,6 +66838,9 @@ OUI:C44AD0* + OUI:C44B44* + ID_OUI_FROM_DATABASE=Omniprint Inc. + ++OUI:C44BD1* ++ ID_OUI_FROM_DATABASE=Wallys Communications Teachnologies Co.,Ltd. ++ + OUI:C44E1F* + ID_OUI_FROM_DATABASE=BlueN + +@@ -66835,6 +67042,9 @@ OUI:C4F57C* + OUI:C4FCE4* + ID_OUI_FROM_DATABASE=DishTV NZ Ltd + ++OUI:C80210* ++ ID_OUI_FROM_DATABASE=LG Innotek ++ + OUI:C80258* + ID_OUI_FROM_DATABASE=ITW GSE ApS + +@@ -67363,6 +67573,9 @@ OUI:CC9F35* + OUI:CCA0E5* + ID_OUI_FROM_DATABASE=DZG Metering GmbH + ++OUI:CCA223* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:CCA374* + ID_OUI_FROM_DATABASE=Guangdong Guanglian Electronic Technology Co.Ltd + +@@ -67498,6 +67711,9 @@ OUI:CCFE3C* + OUI:D00790* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:D00AAB* ++ ID_OUI_FROM_DATABASE=Yokogawa Digital Computer Corporation ++ + OUI:D00EA4* + ID_OUI_FROM_DATABASE=Porsche Cars North America + +@@ -67576,6 +67792,9 @@ OUI:D05875* + OUI:D059C3* + ID_OUI_FROM_DATABASE=CeraMicro Technology Corporation + ++OUI:D059E4* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:D05A0F* + ID_OUI_FROM_DATABASE=I-BT DIGITAL CO.,LTD + +@@ -68248,6 +68467,9 @@ OUI:D86595* + OUI:D866C6* + ID_OUI_FROM_DATABASE=Shenzhen Daystar Technology Co.,ltd + ++OUI:D866EE* ++ ID_OUI_FROM_DATABASE=BOXIN COMMUNICATION CO.,LTD. ++ + OUI:D867D9* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + +@@ -68542,6 +68764,9 @@ OUI:DC49C9* + OUI:DC4EDE* + ID_OUI_FROM_DATABASE=SHINYEI TECHNOLOGY CO., LTD. + ++OUI:DC537C* ++ ID_OUI_FROM_DATABASE=Compal Broadband Networks, Inc. ++ + OUI:DC5726* + ID_OUI_FROM_DATABASE=Power-One + +@@ -69112,6 +69337,9 @@ OUI:E45614* + OUI:E457A8* + ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc. + ++OUI:E45D52* ++ ID_OUI_FROM_DATABASE=Avaya, Inc ++ + OUI:E46449* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -69298,6 +69526,9 @@ OUI:E81132* + OUI:E81324* + ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD + ++OUI:E8150E* ++ ID_OUI_FROM_DATABASE=Nokia Corporation ++ + OUI:E817FC* + ID_OUI_FROM_DATABASE=NIFTY Corporation + +@@ -69373,6 +69604,9 @@ OUI:E85B5B* + OUI:E85BF0* + ID_OUI_FROM_DATABASE=Imaging Diagnostics + ++OUI:E85D6B* ++ ID_OUI_FROM_DATABASE=Luminate Wireless ++ + OUI:E85E53* + ID_OUI_FROM_DATABASE=Infratec Datentechnik GmbH + +@@ -69409,6 +69643,9 @@ OUI:E878A1* + OUI:E87AF3* + ID_OUI_FROM_DATABASE=S5 Tech S.r.l. + ++OUI:E8802E* ++ ID_OUI_FROM_DATABASE=Apple ++ + OUI:E880D8* + ID_OUI_FROM_DATABASE=GNTEK Electronics Co.,Ltd. + +@@ -69719,7 +69956,7 @@ OUI:EC9B5B* + ID_OUI_FROM_DATABASE=Nokia Corporation + + OUI:EC9ECD* +- ID_OUI_FROM_DATABASE=Emerson Network Power and Embedded Computing ++ ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + + OUI:ECA29B* + ID_OUI_FROM_DATABASE=Kemppi Oy +@@ -69745,6 +69982,9 @@ OUI:ECC38A* + OUI:ECC882* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:ECCB30* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:ECCD6D* + ID_OUI_FROM_DATABASE=Allied Telesis, Inc. + +@@ -69763,6 +70003,9 @@ OUI:ECD925* + OUI:ECD950* + ID_OUI_FROM_DATABASE=IRT SA + ++OUI:ECD9D1* ++ ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd. ++ + OUI:ECDE3D* + ID_OUI_FROM_DATABASE=Lamprey Networks, Inc. + +@@ -70144,6 +70387,12 @@ OUI:F406A5* + OUI:F40B93* + ID_OUI_FROM_DATABASE=Research In Motion + ++OUI:F40E11* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. ++ ++OUI:F40F1B* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:F40F9B* + ID_OUI_FROM_DATABASE=WAVELINK + +@@ -70165,6 +70414,9 @@ OUI:F41FC2* + OUI:F42012* + ID_OUI_FROM_DATABASE=Cuciniale GmbH + ++OUI:F42833* ++ ID_OUI_FROM_DATABASE=MMPC Inc. ++ + OUI:F42896* + ID_OUI_FROM_DATABASE=SPECTO PAINEIS ELETRONICOS LTDA + +@@ -70294,6 +70546,9 @@ OUI:F499AC* + OUI:F49F54* + ID_OUI_FROM_DATABASE=Samsung Electronics + ++OUI:F49FF3* ++ ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd ++ + OUI:F4A294* + ID_OUI_FROM_DATABASE=EAGLE WORLD DEVELOPMENT CO., LIMITED + +@@ -70351,6 +70606,9 @@ OUI:F4CE46* + OUI:F4CFE2* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:F4D032* ++ ID_OUI_FROM_DATABASE=Yunnan Ideal Information&Technology.,Ltd ++ + OUI:F4D261* + ID_OUI_FROM_DATABASE=SEMOCON Co., Ltd + +@@ -70390,12 +70648,18 @@ OUI:F4F5A5* + OUI:F4F5E8* + ID_OUI_FROM_DATABASE=Google + ++OUI:F4F646* ++ ID_OUI_FROM_DATABASE=Dediprog Technology Co. Ltd. ++ + OUI:F4F951* + ID_OUI_FROM_DATABASE=Apple + + OUI:F4FC32* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:F4FD2B* ++ ID_OUI_FROM_DATABASE=ZOYI Company ++ + OUI:F80113* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + +@@ -70798,6 +71062,9 @@ OUI:FC1607* + OUI:FC1794* + ID_OUI_FROM_DATABASE=InterCreative Co., Ltd + ++OUI:FC1910* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:FC19D0* + ID_OUI_FROM_DATABASE=Cloud Vision Networks Technology Co.,Ltd. + +@@ -70906,6 +71173,9 @@ OUI:FC7516* + OUI:FC75E6* + ID_OUI_FROM_DATABASE=Handreamnet + ++OUI:FC790B* ++ ID_OUI_FROM_DATABASE=Hitachi High Technologies America, Inc. ++ + OUI:FC7CE7* + ID_OUI_FROM_DATABASE=FCI USA LLC + +@@ -70948,6 +71218,9 @@ OUI:FCA841* + OUI:FCA9B0* + ID_OUI_FROM_DATABASE=MIARTECH (SHANGHAI),INC. + ++OUI:FCAA14* ++ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. ++ + OUI:FCAD0F* + ID_OUI_FROM_DATABASE=QTS NETWORKS + +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index 14637d3..2957774 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -1673,6 +1673,9 @@ pci:v00001002d00001306* + pci:v00001002d00001307* + ID_MODEL_FROM_DATABASE=Kaveri + ++pci:v00001002d00001308* ++ ID_MODEL_FROM_DATABASE=Kaveri HDMI/DP Audio Controller ++ + pci:v00001002d00001309* + ID_MODEL_FROM_DATABASE=Kaveri [Radeon R7 Graphics] + +@@ -4268,6 +4271,9 @@ pci:v00001002d00006611sv00001B0Asd000090D3* + pci:v00001002d00006613* + ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240] + ++pci:v00001002d00006613sv00001682sd00007240* ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240] (R7 240 2048 MB) ++ + pci:v00001002d00006620* + ID_MODEL_FROM_DATABASE=Mars + +@@ -6024,31 +6030,31 @@ 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] ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] + + pci:v00001002d00006820sv0000103Csd00001851* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M] (Radeon HD 7750M) ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon HD 7750M) + + pci:v00001002d00006820sv000017AAsd00003801* +- ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M] (Radeon R9 M275) ++ ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X] (Radeon R9 M275) + + pci:v00001002d00006821* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] + + pci:v00001002d00006821sv00001002sd0000031E* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] (FirePro SX4000) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro SX4000) + + pci:v00001002d00006821sv00001028sd000005CC* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] (FirePro M5100) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) + + pci:v00001002d00006821sv00001028sd000015CC* +- ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M] (FirePro M5100) ++ ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X] (FirePro M5100) + + pci:v00001002d00006822* + ID_MODEL_FROM_DATABASE=Venus PRO [Radeon E8860] + + pci:v00001002d00006823* +- ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M] ++ ID_MODEL_FROM_DATABASE=Venus PRO [Radeon HD 8850M / R9 M265X] + + pci:v00001002d00006825* + ID_MODEL_FROM_DATABASE=Heathrow XT [Radeon HD 7870M] +@@ -7770,64 +7776,73 @@ pci:v00001002d000068F9sv000017AFsd00003014* + ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 5000/6000/7350/8350 Series] (Radeon HD 6350) + + pci:v00001002d000068FA* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] + + pci:v00001002d000068FAsv00001019sd00000019* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001019sd00000021* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001019sd00000022* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001019sd00000026* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 8350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 8350) + + pci:v00001002d000068FAsv0000103Csd00002ADF* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350A) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350A) + + pci:v00001002d000068FAsv0000103Csd00002AE8* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350A) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350A) + + pci:v00001002d000068FAsv00001043sd00008350* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 8350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 8350) + + pci:v00001002d000068FAsv00001462sd00002128* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001462sd00002184* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001462sd00002186* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001462sd00002495* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001462sd0000B490* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv00001642sd00003985* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) ++ ++pci:v00001002d000068FAsv0000174Bsd00003510* ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 8350) ++ ++pci:v00001002d000068FAsv0000174Bsd00003521* ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon R5 220) ++ ++pci:v00001002d000068FAsv0000174Bsd00003522* ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon R5 220) + + pci:v00001002d000068FAsv0000174Bsd00007350* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv0000174Bsd00008153* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 8350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 8350) + + pci:v00001002d000068FAsv0000174Bsd0000E127* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv0000174Bsd0000E153* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv0000174Bsd0000E180* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FAsv000017AFsd00003015* +- ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350] (Radeon HD 7350) ++ ID_MODEL_FROM_DATABASE=Cedar [Radeon HD 7350/8350 / R5 220] (Radeon HD 7350) + + pci:v00001002d000068FE* + ID_MODEL_FROM_DATABASE=Cedar LE +@@ -8886,7 +8901,7 @@ pci:v00001002d0000980A* + ID_MODEL_FROM_DATABASE=Wrestler [Radeon HD 7290] + + pci:v00001002d00009830* +- ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400] ++ ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400 / R3 Series] + + pci:v00001002d00009831* + ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400E] +@@ -8904,13 +8919,13 @@ pci:v00001002d00009835* + ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8310E] + + pci:v00001002d00009836* +- ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8280] ++ ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8280 / R3 Series] + + pci:v00001002d00009837* + ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8280E] + + pci:v00001002d00009838* +- ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8240] ++ ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8240 / R3 Series] + + pci:v00001002d00009839* + ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8180] +@@ -10724,6 +10739,33 @@ pci:v00001022d00001418* + pci:v00001022d00001419* + ID_MODEL_FROM_DATABASE=Family 15h (Models 10h-1fh) I/O Memory Management Unit + ++pci:v00001022d0000141A* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 0 ++ ++pci:v00001022d0000141B* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 1 ++ ++pci:v00001022d0000141C* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 2 ++ ++pci:v00001022d0000141D* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 3 ++ ++pci:v00001022d0000141E* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 4 ++ ++pci:v00001022d0000141F* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Function 5 ++ ++pci:v00001022d00001422* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Root Complex ++ ++pci:v00001022d00001423* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) I/O Memory Management Unit ++ ++pci:v00001022d00001426* ++ ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Root Port ++ + pci:v00001022d00001439* + ID_MODEL_FROM_DATABASE=Family 16h Processor Functions 5:1 + +@@ -17621,6 +17663,9 @@ pci:v00001093d000071BC* + pci:v00001093d000071D0* + ID_MODEL_FROM_DATABASE=PXI-6143 + ++pci:v00001093d000071DC* ++ ID_MODEL_FROM_DATABASE=PCI-1588 ++ + pci:v00001093d00007260* + ID_MODEL_FROM_DATABASE=PXI-5142 + +@@ -17639,6 +17684,9 @@ pci:v00001093d000072AA* + pci:v00001093d000072AB* + ID_MODEL_FROM_DATABASE=PCI-5105 + ++pci:v00001093d000072B8* ++ ID_MODEL_FROM_DATABASE=PXI-6682 ++ + pci:v00001093d0000730F* + ID_MODEL_FROM_DATABASE=PXI-5922EX + +@@ -17708,6 +17756,9 @@ pci:v00001093d000073F0* + pci:v00001093d000073F1* + ID_MODEL_FROM_DATABASE=PCI-5153 + ++pci:v00001093d00007405* ++ ID_MODEL_FROM_DATABASE=PXIe-6674T ++ + pci:v00001093d0000745E* + ID_MODEL_FROM_DATABASE=PXI-5153EX + +@@ -17726,6 +17777,12 @@ pci:v00001093d00007539* + pci:v00001093d0000753A* + ID_MODEL_FROM_DATABASE=NI 9159 + ++pci:v00001093d000075E5* ++ ID_MODEL_FROM_DATABASE=PXI-6683 ++ ++pci:v00001093d000075E6* ++ ID_MODEL_FROM_DATABASE=PXI-6683H ++ + pci:v00001093d00007626* + ID_MODEL_FROM_DATABASE=NI 9154 + +@@ -28100,6 +28157,9 @@ pci:v000010EC* + pci:v000010ECd00000139* + ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller + ++pci:v000010ECd00005208* ++ ID_MODEL_FROM_DATABASE=RTS5208 PCI Express Card Reader ++ + pci:v000010ECd00005209* + ID_MODEL_FROM_DATABASE=RTS5209 PCI Express Card Reader + +@@ -28128,7 +28188,7 @@ pci:v000010ECd00005249sv0000103Csd00001909* + ID_MODEL_FROM_DATABASE=RTS5249 PCI Express Card Reader (ZBook 15) + + pci:v000010ECd00005288* +- ID_MODEL_FROM_DATABASE=Barossa PCI Express Card Reader ++ ID_MODEL_FROM_DATABASE=RTS5288 PCI Express Card Reader + + pci:v000010ECd00008029* + ID_MODEL_FROM_DATABASE=RTL-8029(AS) +@@ -32153,6 +32213,9 @@ pci:v00001131d00007160* + pci:v00001131d00007160sv00001458sd00009009* + ID_MODEL_FROM_DATABASE=SAA7160 (E8000 DVB-T/Analog TV/FM tuner) + ++pci:v00001131d00007160sv00001461sd00001455* ++ ID_MODEL_FROM_DATABASE=SAA7160 (AVerTV Hybrid Speedy PCI-E (H788)) ++ + pci:v00001131d00007162* + ID_MODEL_FROM_DATABASE=SAA7162 + +@@ -34691,6 +34754,9 @@ pci:v000011ABd00002A42* + pci:v000011ABd00002A43* + ID_MODEL_FROM_DATABASE=88W8366 [TopDog] 802.11n Wireless + ++pci:v000011ABd00002A55* ++ ID_MODEL_FROM_DATABASE=88W8864 [Avastar] 802.11ac Wireless ++ + pci:v000011ABd00002B36* + ID_MODEL_FROM_DATABASE=88W8764 [Avastar] 802.11n Wireless + +@@ -36536,6 +36602,9 @@ pci:v00001217d00008120* + pci:v00001217d00008130* + ID_MODEL_FROM_DATABASE=Integrated MS/MSPRO/xD Controller + ++pci:v00001217d00008221* ++ ID_MODEL_FROM_DATABASE=SD/MMC Card Reader Controller ++ + pci:v00001217d00008320* + ID_MODEL_FROM_DATABASE=OZ600 MMC/SD Controller + +@@ -43278,7 +43347,13 @@ pci:v00001469* + ID_VENDOR_FROM_DATABASE=Cleveland Motion Controls + + pci:v0000146A* +- ID_VENDOR_FROM_DATABASE=IFR ++ ID_VENDOR_FROM_DATABASE=Aeroflex ++ ++pci:v0000146Ad00003010* ++ ID_MODEL_FROM_DATABASE=3010 RF Synthesizer ++ ++pci:v0000146Ad00003A11* ++ ID_MODEL_FROM_DATABASE=3011A PXI RF Synthesizer + + pci:v0000146B* + ID_VENDOR_FROM_DATABASE=Parascan Technologies Ltd +@@ -52409,6 +52484,9 @@ pci:v00001AB8d00004006* + pci:v00001AB9* + ID_VENDOR_FROM_DATABASE=Espia Srl + ++pci:v00001AC8* ++ ID_VENDOR_FROM_DATABASE=Aeroflex Gaisler ++ + pci:v00001ACC* + ID_VENDOR_FROM_DATABASE=Point of View BV + +@@ -52724,9 +52802,15 @@ pci:v00001B4Bd000091A0* + pci:v00001B4Bd000091A4* + ID_MODEL_FROM_DATABASE=88SE912x IDE Controller + ++pci:v00001B4Bd00009220* ++ ID_MODEL_FROM_DATABASE=88SE9220 PCIe 2.0 x2 2-port SATA 6 Gb/s RAID Controller ++ + pci:v00001B4Bd00009230* + ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller + ++pci:v00001B4Bd00009235* ++ ID_MODEL_FROM_DATABASE=88SE9235 PCIe 2.0 x2 4-port SATA 6 Gb/s Controller ++ + pci:v00001B4Bd00009445* + ID_MODEL_FROM_DATABASE=88SE9445 PCIe 2.0 x4 4-Port SAS/SATA 6 Gbps RAID Controller + +@@ -54693,7 +54777,7 @@ pci:v00006688* + ID_VENDOR_FROM_DATABASE=Zycoo Co., Ltd + + pci:v00006688d00001200* +- ID_MODEL_FROM_DATABASE=CooVOX TDM Analog Module ++ ID_MODEL_FROM_DATABASE=CooVox TDM Analog Module + + pci:v00006688d00001400* + ID_MODEL_FROM_DATABASE=CooVOX TDM GSM Module +@@ -59066,8 +59150,11 @@ pci:v00008086d00001522sv00008086sd000000A4* + pci:v00008086d00001523* + ID_MODEL_FROM_DATABASE=I350 Gigabit Backplane Connection + ++pci:v00008086d00001523sv00001028sd00000060* ++ ID_MODEL_FROM_DATABASE=I350 Gigabit Backplane Connection (Gigabit 2P I350 LOM) ++ + pci:v00008086d00001523sv00001028sd00001F9B* +- ID_MODEL_FROM_DATABASE=I350 Gigabit Backplane Connection (Gigabit 4P I350 bNDC) ++ ID_MODEL_FROM_DATABASE=I350 Gigabit Backplane Connection (Gigabit 4P I350-t bNDC) + + pci:v00008086d00001523sv0000103Csd00001784* + ID_MODEL_FROM_DATABASE=I350 Gigabit Backplane Connection (Ethernet 1Gb 2-port 361FLB Adapter) +@@ -59183,9 +59270,6 @@ pci:v00008086d00001536* + pci:v00008086d00001537* + ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection + +-pci:v00008086d00001538* +- ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection +- + pci:v00008086d00001539* + ID_MODEL_FROM_DATABASE=I211 Gigabit Network Connection + +@@ -59270,6 +59354,12 @@ pci:v00008086d0000155Dsv00008086sd00000002* + pci:v00008086d00001560* + ID_MODEL_FROM_DATABASE=Ethernet Controller X540 + ++pci:v00008086d0000156F* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection I219-LM ++ ++pci:v00008086d00001570* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection I219-V ++ + pci:v00008086d00001571* + ID_MODEL_FROM_DATABASE=XL710 X710 Virtual Function + +@@ -59316,16 +59406,16 @@ pci:v00008086d00001581sv00001028sd00001F98* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10Gbe backplane (Ethernet 10G 4P X710-k bNDC) + + pci:v00008086d00001583* +- ID_MODEL_FROM_DATABASE=Ethernet Controller LX710 for 40GbE QSFP+ ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ + + pci:v00008086d00001583sv00008086sd00000001* +- ID_MODEL_FROM_DATABASE=Ethernet Controller LX710 for 40GbE QSFP+ (Ethernet Converged Network Adapter XL710-Q2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged Network Adapter XL710-Q2) + + pci:v00008086d00001583sv00008086sd00000002* +- ID_MODEL_FROM_DATABASE=Ethernet Controller LX710 for 40GbE QSFP+ (Ethernet Converged Network Adapter XL710-Q2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged Network Adapter XL710-Q2) + + pci:v00008086d00001583sv00008086sd00000003* +- ID_MODEL_FROM_DATABASE=Ethernet Controller LX710 for 40GbE QSFP+ (Ethernet I/O Module XL710-Q2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet I/O Module XL710-Q2) + + pci:v00008086d00001584* + ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ +diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb +index 014c628..52586bc 100644 +--- a/hwdb/20-usb-vendor-model.hwdb ++++ b/hwdb/20-usb-vendor-model.hwdb +@@ -21,7 +21,7 @@ usb:v0004* + ID_VENDOR_FROM_DATABASE=Nebraska Furniture Mart + + usb:v0011* +- ID_VENDOR_FROM_DATABASE=Unknown manufacturer ++ ID_VENDOR_FROM_DATABASE=Unknown + + usb:v0011p7788* + ID_MODEL_FROM_DATABASE=Flash mass storage drive +@@ -275,6 +275,9 @@ usb:v03EBp2110* + usb:v03EBp2122* + ID_MODEL_FROM_DATABASE=XMEGA-A1 Explained evaluation kit + ++usb:v03EBp2141* ++ ID_MODEL_FROM_DATABASE=ICE debugger ++ + usb:v03EBp2310* + ID_MODEL_FROM_DATABASE=EVK11xx evaluation board + +@@ -455,6 +458,9 @@ usb:v03F0p0121* + usb:v03F0p0122* + ID_MODEL_FROM_DATABASE=HID Internet Keyboard + ++usb:v03F0p0139* ++ ID_MODEL_FROM_DATABASE=Barcode Scanner 4430 ++ + usb:v03F0p0201* + ID_MODEL_FROM_DATABASE=ScanJet 6200c + +@@ -782,6 +788,9 @@ usb:v03F0p1517* + usb:v03F0p1524* + ID_MODEL_FROM_DATABASE=Smart Card Keyboard - KR + ++usb:v03F0p1539* ++ ID_MODEL_FROM_DATABASE=Mini Magnetic Stripe Reader ++ + usb:v03F0p1602* + ID_MODEL_FROM_DATABASE=PhotoSmart 330 series + +@@ -893,6 +902,9 @@ usb:v03F0p1D02* + usb:v03F0p1D17* + ID_MODEL_FROM_DATABASE=LaserJet 1320 + ++usb:v03F0p1D24* ++ ID_MODEL_FROM_DATABASE=Barcode scanner ++ + usb:v03F0p1E02* + ID_MODEL_FROM_DATABASE=PhotoSmart A320 Printer series + +@@ -935,6 +947,9 @@ usb:v03F0p2012* + usb:v03F0p201D* + ID_MODEL_FROM_DATABASE=un2400 Gobi Wireless Modem (QDL mode) + ++usb:v03F0p2039* ++ ID_MODEL_FROM_DATABASE=Cashdrawer ++ + usb:v03F0p2102* + ID_MODEL_FROM_DATABASE=PhotoSmart 7345 + +@@ -1008,7 +1023,7 @@ usb:v03F0p2505* + ID_MODEL_FROM_DATABASE=ScanJet 3770 + + usb:v03F0p2512* +- ID_MODEL_FROM_DATABASE=OfficeJet Pro L7300 ++ ID_MODEL_FROM_DATABASE=OfficeJet Pro L7300 / Compaq LA2405 series monitor + + usb:v03F0p2514* + ID_MODEL_FROM_DATABASE=4-port hub +@@ -1046,6 +1061,9 @@ usb:v03F0p2704* + usb:v03F0p2717* + ID_MODEL_FROM_DATABASE=Color LaserJet 2830 + ++usb:v03F0p2724* ++ ID_MODEL_FROM_DATABASE=Magnetic Stripe Reader IDRA-334133-HP ++ + usb:v03F0p2811* + ID_MODEL_FROM_DATABASE=PSC-2100 + +@@ -1424,6 +1442,9 @@ usb:v03F0p5817* + usb:v03F0p5911* + ID_MODEL_FROM_DATABASE=PhotoSmart C6180 + ++usb:v03F0p5912* ++ ID_MODEL_FROM_DATABASE=Officejet Pro 8600 ++ + usb:v03F0p5A11* + ID_MODEL_FROM_DATABASE=PhotoSmart C7100 series + +@@ -1532,6 +1553,9 @@ usb:v03F0p6B02* + usb:v03F0p6B11* + ID_MODEL_FROM_DATABASE=Photosmart C4500 series + ++usb:v03F0p6C11* ++ ID_MODEL_FROM_DATABASE=Photosmart C4480 ++ + usb:v03F0p6C17* + ID_MODEL_FROM_DATABASE=Color LaserJet 4610 + +@@ -1913,6 +1937,9 @@ usb:v03FC* + usb:v03FD* + ID_VENDOR_FROM_DATABASE=Xilinx, Inc. + ++usb:v03FDp0008* ++ ID_MODEL_FROM_DATABASE=Platform Cable USB II ++ + usb:v03FE* + ID_VENDOR_FROM_DATABASE=Farallon Comunications + +@@ -2012,6 +2039,9 @@ usb:v0403p0232* + usb:v0403p1060* + ID_MODEL_FROM_DATABASE=JTAG adapter + ++usb:v0403p1234* ++ ID_MODEL_FROM_DATABASE=IronLogic RFID Adapter [Z-2 USB] ++ + usb:v0403p6001* + ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC + +@@ -2084,12 +2114,18 @@ usb:v0403p8B2B* + usb:v0403p8B2C* + ID_MODEL_FROM_DATABASE=Alpermann+Velte TCC70 + ++usb:v0403p9132* ++ ID_MODEL_FROM_DATABASE=LCD and Temperature Interface ++ + usb:v0403p9133* + ID_MODEL_FROM_DATABASE=CallerID + + usb:v0403p9135* + ID_MODEL_FROM_DATABASE=Rotary Pub alarm + ++usb:v0403p9136* ++ ID_MODEL_FROM_DATABASE=Pulsecounter ++ + usb:v0403p9E90* + ID_MODEL_FROM_DATABASE=Marvell OpenRD Base/Client + +@@ -2291,6 +2327,9 @@ usb:v0403pEF10* + usb:v0403pF070* + ID_MODEL_FROM_DATABASE=Serial Converter 422/485 [Vardaan VEUSB422R3] + ++usb:v0403pF0E9* ++ ID_MODEL_FROM_DATABASE=Tagsys L-P101 ++ + usb:v0403pF1A0* + ID_MODEL_FROM_DATABASE=Asix PRESTO Programmer + +@@ -2999,6 +3038,9 @@ usb:v040Ap4021* + usb:v040Ap4022* + ID_MODEL_FROM_DATABASE=1400 Digital Photo Printer + ++usb:v040Ap402B* ++ ID_MODEL_FROM_DATABASE=Photo Printer 6850 ++ + usb:v040Ap402E* + ID_MODEL_FROM_DATABASE=605 Photo Printer + +@@ -4379,6 +4421,9 @@ usb:v0424p7500* + usb:v0424p9512* + ID_MODEL_FROM_DATABASE=SMC9512/9514 USB Hub + ++usb:v0424p9514* ++ ID_MODEL_FROM_DATABASE=SMC9514 Hub ++ + usb:v0424pA700* + ID_MODEL_FROM_DATABASE=2 Port Hub + +@@ -5219,6 +5264,9 @@ usb:v0451p2046* + usb:v0451p2077* + ID_MODEL_FROM_DATABASE=TUSB2077 Hub + ++usb:v0451p2F90* ++ ID_MODEL_FROM_DATABASE=SM-USB-DIG ++ + usb:v0451p3410* + ID_MODEL_FROM_DATABASE=TUSB3410 Microcontroller + +@@ -5534,6 +5582,9 @@ usb:v0458p5003* + usb:v0458p5004* + ID_MODEL_FROM_DATABASE=G-pen Tablet + ++usb:v0458p505E* ++ ID_MODEL_FROM_DATABASE=Genius iSlim 330 ++ + usb:v0458p6001* + ID_MODEL_FROM_DATABASE=GF3000F Ethernet Adapter + +@@ -5600,6 +5651,24 @@ usb:v0458p705A* + usb:v0458p705C* + ID_MODEL_FROM_DATABASE=Genius iSlim 1300AF + ++usb:v0458p7061* ++ ID_MODEL_FROM_DATABASE=Genius iLook 1321 V2 ++ ++usb:v0458p7066* ++ ID_MODEL_FROM_DATABASE=Acer Crystal Eye Webcam ++ ++usb:v0458p7067* ++ ID_MODEL_FROM_DATABASE=Genius iSlim 1300AF V2 ++ ++usb:v0458p7068* ++ ID_MODEL_FROM_DATABASE=Genius eFace 1325R ++ ++usb:v0458p706D* ++ ID_MODEL_FROM_DATABASE=Genius iSlim 2000AF V2 ++ ++usb:v0458p7076* ++ ID_MODEL_FROM_DATABASE=Genius FaceCam 312 ++ + usb:v0458p7079* + ID_MODEL_FROM_DATABASE=FaceCam 2025R + +@@ -5609,6 +5678,12 @@ usb:v0458p707F* + usb:v0458p7088* + ID_MODEL_FROM_DATABASE=WideCam 1050 + ++usb:v0458p7089* ++ ID_MODEL_FROM_DATABASE=Genius FaceCam 320 ++ ++usb:v0458p708C* ++ ID_MODEL_FROM_DATABASE=Genius WideCam F100 ++ + usb:v0459* + ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc. + +@@ -6017,6 +6092,15 @@ usb:v045Ep02B0* + usb:v045Ep02B6* + ID_MODEL_FROM_DATABASE=Xbox 360 / Bluetooth Wireless Headset + ++usb:v045Ep02BE* ++ ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Audio ++ ++usb:v045Ep02BF* ++ ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Camera ++ ++usb:v045Ep02C2* ++ ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Motor ++ + usb:v045Ep0400* + ID_MODEL_FROM_DATABASE=Windows Powered Pocket PC 2002 + +@@ -6866,6 +6950,9 @@ usb:v046Dp0830* + usb:v046Dp0840* + ID_MODEL_FROM_DATABASE=QuickCam Express + ++usb:v046Dp0843* ++ ID_MODEL_FROM_DATABASE=Webcam C930e ++ + usb:v046Dp0850* + ID_MODEL_FROM_DATABASE=QuickCam Web + +@@ -7169,6 +7256,12 @@ usb:v046Dp0A1F* + usb:v046Dp0A29* + ID_MODEL_FROM_DATABASE=H600 [Wireless Headset] + ++usb:v046Dp0A38* ++ ID_MODEL_FROM_DATABASE=Headset H340 ++ ++usb:v046Dp0A4D* ++ ID_MODEL_FROM_DATABASE=G430 Surround Sound Gaming Headset ++ + usb:v046Dp0B02* + ID_MODEL_FROM_DATABASE=C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode) + +@@ -7650,7 +7743,7 @@ usb:v046DpC31B* + ID_MODEL_FROM_DATABASE=Compact Keyboard K300 + + usb:v046DpC31C* +- ID_MODEL_FROM_DATABASE=Keyboard K120 for Business ++ ID_MODEL_FROM_DATABASE=Keyboard K120 + + usb:v046DpC31D* + ID_MODEL_FROM_DATABASE=Media Keyboard K200 +@@ -7751,6 +7844,9 @@ usb:v046DpC529* + usb:v046DpC52B* + ID_MODEL_FROM_DATABASE=Unifying Receiver + ++usb:v046DpC52D* ++ ID_MODEL_FROM_DATABASE=R700 Remote Presenter receiver ++ + usb:v046DpC52E* + ID_MODEL_FROM_DATABASE=MK260 Wireless Combo Receiver + +@@ -7760,6 +7856,18 @@ usb:v046DpC52F* + usb:v046DpC532* + ID_MODEL_FROM_DATABASE=Unifying Receiver + ++usb:v046DpC603* ++ ID_MODEL_FROM_DATABASE=3Dconnexion Spacemouse Plus XT ++ ++usb:v046DpC605* ++ ID_MODEL_FROM_DATABASE=3Dconnexion CADman ++ ++usb:v046DpC606* ++ ID_MODEL_FROM_DATABASE=3Dconnexion Spacemouse Classic ++ ++usb:v046DpC621* ++ ID_MODEL_FROM_DATABASE=3Dconnexion Spaceball 5000 ++ + usb:v046DpC623* + ID_MODEL_FROM_DATABASE=3Dconnexion Space Traveller 3D Mouse + +@@ -7772,9 +7880,18 @@ usb:v046DpC626* + usb:v046DpC627* + ID_MODEL_FROM_DATABASE=3Dconnexion Space Explorer 3D Mouse + ++usb:v046DpC628* ++ ID_MODEL_FROM_DATABASE=3Dconnexion Space Navigator for Notebooks ++ + usb:v046DpC629* + ID_MODEL_FROM_DATABASE=3Dconnexion SpacePilot Pro 3D Mouse + ++usb:v046DpC62B* ++ ID_MODEL_FROM_DATABASE=3Dconnexion Space Mouse Pro ++ ++usb:v046DpC640* ++ ID_MODEL_FROM_DATABASE=NuLOOQ navigator ++ + usb:v046DpC702* + ID_MODEL_FROM_DATABASE=Cordless Presenter + +@@ -8609,6 +8726,9 @@ usb:v0480p0011* + usb:v0480p0014* + ID_MODEL_FROM_DATABASE=InTouch Module + ++usb:v0480p0100* ++ ID_MODEL_FROM_DATABASE=Stor.E Slim USB 3.0 ++ + usb:v0480pA006* + ID_MODEL_FROM_DATABASE=External Disk 1.5TB + +@@ -10043,6 +10163,9 @@ usb:v04A9p2225* + usb:v04A9p2228* + ID_MODEL_FROM_DATABASE=CanoScan 4400F + ++usb:v04A9p2229* ++ ID_MODEL_FROM_DATABASE=CanoScan 8600F ++ + usb:v04A9p2602* + ID_MODEL_FROM_DATABASE=MultiPASS C555 + +@@ -10988,6 +11111,9 @@ usb:v04A9p3233* + usb:v04A9p3234* + ID_MODEL_FROM_DATABASE=PowerShot SX150 IS + ++usb:v04A9p3235* ++ ID_MODEL_FROM_DATABASE=PowerShot ELPH 510 HS / IXUS 1100 HS ++ + usb:v04A9p3236* + ID_MODEL_FROM_DATABASE=PowerShot S100 + +@@ -11057,12 +11183,18 @@ usb:v04A9p325B* + usb:v04A9p325C* + ID_MODEL_FROM_DATABASE=PowerShot SX500 IS + ++usb:v04A9p325E* ++ ID_MODEL_FROM_DATABASE=PowerShot N ++ + usb:v04A9p325F* + ID_MODEL_FROM_DATABASE=PowerShot SX280 HS + + usb:v04A9p3260* + ID_MODEL_FROM_DATABASE=PowerShot SX270 HS + ++usb:v04A9p3261* ++ ID_MODEL_FROM_DATABASE=PowerShot A3500 IS ++ + usb:v04A9p3262* + ID_MODEL_FROM_DATABASE=PowerShot A2600 + +@@ -11087,6 +11219,15 @@ usb:v04A9p3277* + usb:v04A9p327D* + ID_MODEL_FROM_DATABASE=Powershot ELPH 115 IS / IXUS 132 + ++usb:v04A9p3288* ++ ID_MODEL_FROM_DATABASE=Powershot ELPH 135 / IXUS 145 ++ ++usb:v04A9p3289* ++ ID_MODEL_FROM_DATABASE=PowerShot ELPH 340 HS / IXUS 265 HS ++ ++usb:v04A9p328A* ++ ID_MODEL_FROM_DATABASE=PowerShot ELPH 150 IS / IXUS 155 ++ + usb:v04AA* + ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd + +@@ -11471,6 +11612,9 @@ usb:v04B4p2050* + usb:v04B4p2830* + ID_MODEL_FROM_DATABASE=Opera1 DVB-S (cold state) + ++usb:v04B4p4235* ++ ID_MODEL_FROM_DATABASE=Monitor 02 Driver ++ + usb:v04B4p4381* + ID_MODEL_FROM_DATABASE=SCAPS USC-1 Scanner Controller + +@@ -12407,6 +12551,9 @@ usb:v04C5p10AE* + usb:v04C5p10AF* + ID_MODEL_FROM_DATABASE=fi-4220C2 + ++usb:v04C5p10C7* ++ ID_MODEL_FROM_DATABASE=fi-60f scanner ++ + usb:v04C5p10E0* + ID_MODEL_FROM_DATABASE=fi-5120c Scanner + +@@ -12981,7 +13128,7 @@ usb:v04D9p2519* + ID_MODEL_FROM_DATABASE=Shenzhen LogoTech 2.4GHz receiver + + usb:v04D9p2832* +- ID_MODEL_FROM_DATABASE=1channel Telephone line recorder ++ ID_MODEL_FROM_DATABASE=HT82A832R Audio MCU + + usb:v04D9p2834* + ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU +@@ -13070,6 +13217,9 @@ usb:v04DAp2374* + usb:v04DAp2451* + ID_MODEL_FROM_DATABASE=HDC-SD9 + ++usb:v04DAp245B* ++ ID_MODEL_FROM_DATABASE=HC-X920K (3MOS Full HD video camcorder) ++ + usb:v04DAp2497* + ID_MODEL_FROM_DATABASE=HDC-TM700 + +@@ -13535,6 +13685,9 @@ usb:v04E8p1006* + usb:v04E8p130C* + ID_MODEL_FROM_DATABASE=NX100 + ++usb:v04E8p1F05* ++ ID_MODEL_FROM_DATABASE=S2 Portable [JMicron] (500GB) ++ + usb:v04E8p1F06* + ID_MODEL_FROM_DATABASE=HX-MU064DA portable harddisk + +@@ -13670,6 +13823,9 @@ usb:v04E8p3310* + usb:v04E8p3315* + ID_MODEL_FROM_DATABASE=ML-2540 Series Laser Printer + ++usb:v04E8p331E* ++ ID_MODEL_FROM_DATABASE=M262x/M282x Xpress Series Laser Printer ++ + usb:v04E8p3409* + ID_MODEL_FROM_DATABASE=SCX-4216F Scanner + +@@ -13718,6 +13874,9 @@ usb:v04E8p3420* + usb:v04E8p3426* + ID_MODEL_FROM_DATABASE=SCX-4500 Laser Printer + ++usb:v04E8p342D* ++ ID_MODEL_FROM_DATABASE=SCX-4x28 Series ++ + usb:v04E8p344F* + ID_MODEL_FROM_DATABASE=SCX-3400 Series + +@@ -14058,7 +14217,7 @@ usb:v04E8p685B* + ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II] (mass storage mode) + + usb:v04E8p685C* +- ID_MODEL_FROM_DATABASE=GT-I9250 Phone [Galaxy Nexus] ++ ID_MODEL_FROM_DATABASE=GT-I9250 Phone [Galaxy Nexus] (Mass storage mode) + + usb:v04E8p685D* + ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II] (Download mode) +@@ -14067,7 +14226,10 @@ usb:v04E8p685E* + ID_MODEL_FROM_DATABASE=GT-I9100 / GT-C3350 Phones (USB Debugging mode) + + usb:v04E8p6860* +- ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1] ++ ID_MODEL_FROM_DATABASE=GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1] , GT-I9500 [Galaxy S 4] ++ ++usb:v04E8p6863* ++ ID_MODEL_FROM_DATABASE=GT-I9500 [Galaxy S4] / GT-I9250 [Galaxy Nexus] (network tethering) + + usb:v04E8p6865* + ID_MODEL_FROM_DATABASE=GT-I9300 Phone [Galaxy S III] (PTP mode) +@@ -14075,6 +14237,9 @@ usb:v04E8p6865* + usb:v04E8p6866* + ID_MODEL_FROM_DATABASE=GT-I9300 Phone [Galaxy S III] (debugging mode) + ++usb:v04E8p6868* ++ ID_MODEL_FROM_DATABASE=Escape Composite driver for Android Phones: Modem+Diagnostic+ADB ++ + usb:v04E8p6875* + ID_MODEL_FROM_DATABASE=GT-B3710 Standalone LTE device (Commercial) + +@@ -14342,6 +14507,12 @@ usb:v04F2pB057* + usb:v04F2pB059* + ID_MODEL_FROM_DATABASE=CKF7037 HP webcam + ++usb:v04F2pB064* ++ ID_MODEL_FROM_DATABASE=CNA7137 Integrated Webcam ++ ++usb:v04F2pB070* ++ ID_MODEL_FROM_DATABASE=Camera ++ + usb:v04F2pB071* + ID_MODEL_FROM_DATABASE=2.0M UVC Webcam / CNF7129 + +@@ -14411,6 +14582,9 @@ usb:v04F2pB2B0* + usb:v04F2pB2B9* + ID_MODEL_FROM_DATABASE=Lenovo Integrated Camera UVC + ++usb:v04F2pB2DA* ++ ID_MODEL_FROM_DATABASE=thinkpad t430s camera ++ + usb:v04F2pB2EA* + ID_MODEL_FROM_DATABASE=Integrated Camera [ThinkPad] + +@@ -14420,6 +14594,9 @@ usb:v04F2pB330* + usb:v04F2pB354* + ID_MODEL_FROM_DATABASE=UVC 1.00 device HD UVC WebCam + ++usb:v04F2pB394* ++ ID_MODEL_FROM_DATABASE=Integrated Camera ++ + usb:v04F3* + ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp. + +@@ -15038,6 +15215,9 @@ usb:v04F9p01EB* + usb:v04F9p01F4* + ID_MODEL_FROM_DATABASE=MFC-5890CN + ++usb:v04F9p0217* ++ ID_MODEL_FROM_DATABASE=MFC-8480DN ++ + usb:v04F9p0223* + ID_MODEL_FROM_DATABASE=DCP-365CN + +@@ -15158,9 +15338,15 @@ usb:v04FCp5331* + usb:v04FCp5360* + ID_MODEL_FROM_DATABASE=Sunplus Generic Digital Camera + ++usb:v04FCp5563* ++ ID_MODEL_FROM_DATABASE=Digital Media Player MP3/WMA [The Sharper Image] ++ + usb:v04FCp5720* + ID_MODEL_FROM_DATABASE=Card Reader Driver + ++usb:v04FCp6333* ++ ID_MODEL_FROM_DATABASE=Siri A9 UVC chipset ++ + usb:v04FCp7333* + ID_MODEL_FROM_DATABASE=Finet Technology Palmpix DC-85 + +@@ -15239,6 +15425,18 @@ usb:v0502p3325* + usb:v0502p3341* + ID_MODEL_FROM_DATABASE=Iconia tablet A500 + ++usb:v0502p33C3* ++ ID_MODEL_FROM_DATABASE=Liquid Gallant Duo E350 ++ ++usb:v0502p33C4* ++ ID_MODEL_FROM_DATABASE=Liquid Gallant Duo E350 (debug mode) ++ ++usb:v0502p33C7* ++ ID_MODEL_FROM_DATABASE=Liquid Gallant Duo E350 (USB tethering) ++ ++usb:v0502p33C8* ++ ID_MODEL_FROM_DATABASE=Liquid Gallant Duo E350 (debug mode, USB tethering) ++ + usb:v0502pD001* + ID_MODEL_FROM_DATABASE=Divio NW801/DVC-V6+ Digital Camera + +@@ -15446,6 +15644,9 @@ usb:v050Dp0416* + usb:v050Dp0551* + ID_MODEL_FROM_DATABASE=F6C550-AVR UPS + ++usb:v050Dp065A* ++ ID_MODEL_FROM_DATABASE=F8T065BF Mini Bluetooth 4.0 Adapter ++ + usb:v050Dp0706* + ID_MODEL_FROM_DATABASE=2-N-1 7-Port Hub (Lower half) + +@@ -15497,6 +15698,9 @@ usb:v050Dp2103* + usb:v050Dp21F1* + ID_MODEL_FROM_DATABASE=N300 WLAN N Adapter [ISY] + ++usb:v050Dp21F2* ++ ID_MODEL_FROM_DATABASE=RTL8192CU 802.11n WLAN Adapter [ISY IWL 4000] ++ + usb:v050Dp258A* + ID_MODEL_FROM_DATABASE=F5U258 Host to Host cable + +@@ -15728,6 +15932,9 @@ usb:v0525p1200* + usb:v0525p1265* + ID_MODEL_FROM_DATABASE=File-backed Storage Gadget + ++usb:v0525p3424* ++ ID_MODEL_FROM_DATABASE=Lumidigm Venus fingerprint sensor ++ + usb:v0525pA0F0* + ID_MODEL_FROM_DATABASE=Cambridge Electronic Devices Power1401 mk 2 + +@@ -16655,6 +16862,9 @@ usb:v054Cp035B* + usb:v054Cp035C* + ID_MODEL_FROM_DATABASE=NWZ-A726/A728/A729 + ++usb:v054Cp035F* ++ ID_MODEL_FROM_DATABASE=UP-DR200 Photo Printer ++ + usb:v054Cp0382* + ID_MODEL_FROM_DATABASE=Memory Stick PRO-HG Duo Adaptor (MSAC-UAH1) + +@@ -16694,9 +16904,18 @@ usb:v054Cp0485* + usb:v054Cp04CB* + ID_MODEL_FROM_DATABASE=WALKMAN NWZ-E354 + ++usb:v054Cp0541* ++ ID_MODEL_FROM_DATABASE=DSC-HX100V [Cybershot Digital Still Camera] ++ ++usb:v054Cp0689* ++ ID_MODEL_FROM_DATABASE=Walkman NWZ-B173F ++ + usb:v054Cp06BB* + ID_MODEL_FROM_DATABASE=WALKMAN NWZ-F805 + ++usb:v054Cp088C* ++ ID_MODEL_FROM_DATABASE=Portable Headphone Amplifier ++ + usb:v054Cp1000* + ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver + +@@ -16721,6 +16940,12 @@ usb:v0550p0004* + usb:v0550p0005* + ID_MODEL_FROM_DATABASE=InkJet Color Printer + ++usb:v0550p000B* ++ ID_MODEL_FROM_DATABASE=Workcentre 24 ++ ++usb:v0550p014E* ++ ID_MODEL_FROM_DATABASE=CM215b Printer ++ + usb:v0551* + ID_VENDOR_FROM_DATABASE=CompuTrend Systems, Inc. + +@@ -17306,6 +17531,9 @@ usb:v056Ap0069* + usb:v056Ap0081* + ID_MODEL_FROM_DATABASE=Graphire Wireless 6x8 + ++usb:v056Ap0084* ++ ID_MODEL_FROM_DATABASE=Wireless adapter for Bamboo tablets ++ + usb:v056Ap0090* + ID_MODEL_FROM_DATABASE=TPC90 + +@@ -17372,6 +17600,9 @@ usb:v056Ap00D1* + usb:v056Ap00D3* + ID_MODEL_FROM_DATABASE=Bamboo Fun (CTH-661) + ++usb:v056Ap00D4* ++ ID_MODEL_FROM_DATABASE=Bamboo Pen (CTL-460) ++ + usb:v056Ap00D6* + ID_MODEL_FROM_DATABASE=Bamboo Pen & Touch (CTH-460) + +@@ -17390,6 +17621,12 @@ usb:v056Ap00F6* + usb:v056Ap00F8* + ID_MODEL_FROM_DATABASE=Cintiq 24HD touch (DTH-2400) tablet + ++usb:v056Ap0307* ++ ID_MODEL_FROM_DATABASE=Cintiq Companion Hybrid 13HD (DTH-A1300) tablet ++ ++usb:v056Ap0309* ++ ID_MODEL_FROM_DATABASE=Cintiq Companion Hybrid 13HD (DTH-A1300) touchscreen ++ + usb:v056Ap0400* + ID_MODEL_FROM_DATABASE=PenPartner 4x5 + +@@ -18719,6 +18956,9 @@ usb:v0586p341E* + usb:v0586p341F* + ID_MODEL_FROM_DATABASE=NWD2205 802.11n Wireless N Adapter [Realtek RTL8192CU] + ++usb:v0586p3425* ++ ID_MODEL_FROM_DATABASE=NWD6505 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7610U] ++ + usb:v0586p343E* + ID_MODEL_FROM_DATABASE=N220 802.11bgn Wireless Adapter + +@@ -18737,9 +18977,15 @@ usb:v058A* + usb:v058B* + ID_VENDOR_FROM_DATABASE=Infineon Technologies + ++usb:v058Bp0015* ++ ID_MODEL_FROM_DATABASE=Flash Loader utility ++ + usb:v058Bp001C* + ID_MODEL_FROM_DATABASE=Flash Drive + ++usb:v058Bp0041* ++ ID_MODEL_FROM_DATABASE=Flash Loader utility ++ + usb:v058C* + ID_VENDOR_FROM_DATABASE=In Focus Systems + +@@ -18855,7 +19101,7 @@ usb:v058Fp6366* + ID_MODEL_FROM_DATABASE=Multi Flash Reader + + usb:v058Fp6377* +- ID_MODEL_FROM_DATABASE=Multimedia Card Reader ++ ID_MODEL_FROM_DATABASE=AU6375 4-LUN card reader + + usb:v058Fp6386* + ID_MODEL_FROM_DATABASE=Memory Card +@@ -18926,12 +19172,18 @@ usb:v058Fp9510* + usb:v058Fp9520* + ID_MODEL_FROM_DATABASE=EMV Certified Smart Card Reader + ++usb:v058Fp9540* ++ ID_MODEL_FROM_DATABASE=AU9540 Smartcard Reader ++ + usb:v058Fp9720* + ID_MODEL_FROM_DATABASE=USB-Serial Adapter + + usb:v058FpA014* + ID_MODEL_FROM_DATABASE=Asus Integrated Webcam + ++usb:v058FpB002* ++ ID_MODEL_FROM_DATABASE=Acer Integrated Webcam ++ + usb:v0590* + ID_VENDOR_FROM_DATABASE=Omron Corp. + +@@ -18983,6 +19235,9 @@ usb:v0596p0002* + usb:v0596p0500* + ID_MODEL_FROM_DATABASE=PCT Multitouch HID Controller + ++usb:v0596p0543* ++ ID_MODEL_FROM_DATABASE=DELL XPS touchscreen ++ + usb:v0597* + ID_VENDOR_FROM_DATABASE=Trisignal Communications + +@@ -19055,6 +19310,9 @@ usb:v059Bp0061* + usb:v059Bp006D* + ID_MODEL_FROM_DATABASE=HipZip MP3 Player + ++usb:v059Bp0070* ++ ID_MODEL_FROM_DATABASE=eGo Portable Hard Drive ++ + usb:v059Bp007C* + ID_MODEL_FROM_DATABASE=Ultra Max USB/1394 + +@@ -19163,9 +19421,15 @@ usb:v059Fp0323* + usb:v059Fp0421* + ID_MODEL_FROM_DATABASE=Big Disk G465 + ++usb:v059Fp0525* ++ ID_MODEL_FROM_DATABASE=BigDisk Extreme 500 ++ + usb:v059Fp0641* + ID_MODEL_FROM_DATABASE=Mobile Hard Drive + ++usb:v059Fp0829* ++ ID_MODEL_FROM_DATABASE=BigDisk Extreme+ ++ + usb:v059Fp100C* + ID_MODEL_FROM_DATABASE=Rugged Triple Interface Mobile Hard Drive + +@@ -19190,6 +19454,9 @@ usb:v059Fp1049* + usb:v059Fp1052* + ID_MODEL_FROM_DATABASE=P'9220 Mobile Drive + ++usb:v059Fp1064* ++ ID_MODEL_FROM_DATABASE=Rugged 16 and 32 GB ++ + usb:v059FpA601* + ID_MODEL_FROM_DATABASE=HardDrive + +@@ -19464,7 +19731,7 @@ usb:v05ACp0225* + ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (JIS) + + usb:v05ACp0229* +- ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (MacBook Pro) (ANSI) ++ ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (ANSI) + + usb:v05ACp022A* + ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (MacBook Pro) (ISO) +@@ -19545,7 +19812,7 @@ usb:v05ACp0302* + ID_MODEL_FROM_DATABASE=Optical Mouse [Fujitsu] + + usb:v05ACp0304* +- ID_MODEL_FROM_DATABASE=Optical USB Mouse [Mitsumi] ++ ID_MODEL_FROM_DATABASE=Mighty Mouse [Mitsumi, M1152] + + usb:v05ACp0306* + ID_MODEL_FROM_DATABASE=Optical USB Mouse [Fujitsu] +@@ -19577,6 +19844,9 @@ usb:v05ACp1003* + usb:v05ACp1006* + ID_MODEL_FROM_DATABASE=Hub in Aluminum Keyboard + ++usb:v05ACp1008* ++ ID_MODEL_FROM_DATABASE=Mini DisplayPort to Dual-Link DVI Adapter ++ + usb:v05ACp1101* + ID_MODEL_FROM_DATABASE=Speakers + +@@ -19670,6 +19940,9 @@ usb:v05ACp1265* + usb:v05ACp1266* + ID_MODEL_FROM_DATABASE=iPod Nano 6.Gen + ++usb:v05ACp1267* ++ ID_MODEL_FROM_DATABASE=iPod Nano 7.Gen ++ + usb:v05ACp1281* + ID_MODEL_FROM_DATABASE=Apple Mobile Device [Recovery Mode] + +@@ -19700,6 +19973,9 @@ usb:v05ACp1299* + usb:v05ACp129A* + ID_MODEL_FROM_DATABASE=iPad + ++usb:v05ACp129C* ++ ID_MODEL_FROM_DATABASE=iPhone 4(CDMA) ++ + usb:v05ACp129E* + ID_MODEL_FROM_DATABASE=iPod Touch 4.Gen + +@@ -19712,15 +19988,30 @@ usb:v05ACp12A0* + usb:v05ACp12A2* + ID_MODEL_FROM_DATABASE=iPad 2 (3G; 64GB) + ++usb:v05ACp12A3* ++ ID_MODEL_FROM_DATABASE=iPad 2 (CDMA) ++ ++usb:v05ACp12A4* ++ ID_MODEL_FROM_DATABASE=iPad 3 (wifi) ++ ++usb:v05ACp12A5* ++ ID_MODEL_FROM_DATABASE=iPad 3 (CDMA) ++ + usb:v05ACp12A6* + ID_MODEL_FROM_DATABASE=iPad 3 (3G, 16 GB) + ++usb:v05ACp12A8* ++ ID_MODEL_FROM_DATABASE=iPhone5/5C/5S ++ + usb:v05ACp12A9* + ID_MODEL_FROM_DATABASE=iPad 2 + + usb:v05ACp12AA* + ID_MODEL_FROM_DATABASE=iPod Touch 5.Gen [A1421] + ++usb:v05ACp12AB* ++ ID_MODEL_FROM_DATABASE=iPad 4 (WiFi, 32GB) ++ + usb:v05ACp1300* + ID_MODEL_FROM_DATABASE=iPod Shuffle + +@@ -19742,6 +20033,15 @@ usb:v05ACp1402* + usb:v05ACp1500* + ID_MODEL_FROM_DATABASE=SuperDrive [A1379] + ++usb:v05ACp8005* ++ ID_MODEL_FROM_DATABASE=OHCI Root Hub Simulation ++ ++usb:v05ACp8006* ++ ID_MODEL_FROM_DATABASE=EHCI Root Hub Simulation ++ ++usb:v05ACp8007* ++ ID_MODEL_FROM_DATABASE=XHCI Root Hub USB 2.0 Simulation ++ + usb:v05ACp8202* + ID_MODEL_FROM_DATABASE=HCF V.90 Data/Fax Modem + +@@ -19838,6 +20138,9 @@ usb:v05ACp8510* + usb:v05ACp911C* + ID_MODEL_FROM_DATABASE=Hub in A1082 [Cinema HD Display 23"] + ++usb:v05ACp9127* ++ ID_MODEL_FROM_DATABASE=Hub in Thunderbolt Display ++ + usb:v05ACp912F* + ID_MODEL_FROM_DATABASE=Hub in 30" Cinema Display + +@@ -20042,6 +20345,9 @@ usb:v05C6p9202* + usb:v05C6p9203* + ID_MODEL_FROM_DATABASE=Gobi Wireless Modem + ++usb:v05C6p9205* ++ ID_MODEL_FROM_DATABASE=Gobi 2000 ++ + usb:v05C6p9211* + ID_MODEL_FROM_DATABASE=Acer Gobi Wireless Modem (QDL mode) + +@@ -20123,9 +20429,18 @@ usb:v05C8p021A* + usb:v05C8p0318* + ID_MODEL_FROM_DATABASE=Webcam + ++usb:v05C8p0361* ++ ID_MODEL_FROM_DATABASE=SunplusIT INC. HP Truevision HD Webcam ++ ++usb:v05C8p036E* ++ ID_MODEL_FROM_DATABASE=Webcam ++ + usb:v05C8p0403* + ID_MODEL_FROM_DATABASE=Webcam + ++usb:v05C8p041B* ++ ID_MODEL_FROM_DATABASE=HP 2.0MP High Definition Webcam ++ + usb:v05C9* + ID_VENDOR_FROM_DATABASE=Semtech Corp. + +@@ -20861,6 +21176,9 @@ usb:v05DCp4D12* + usb:v05DCp4D30* + ID_MODEL_FROM_DATABASE=MP3 Player + ++usb:v05DCpA209* ++ ID_MODEL_FROM_DATABASE=JumpDrive S70 ++ + usb:v05DCpA300* + ID_MODEL_FROM_DATABASE=JumpDrive2 + +@@ -20921,6 +21239,9 @@ usb:v05DCpA701* + usb:v05DCpA731* + ID_MODEL_FROM_DATABASE=JumpDrive FireFly + ++usb:v05DCpA768* ++ ID_MODEL_FROM_DATABASE=JumpDrive Retrax ++ + usb:v05DCpA790* + ID_MODEL_FROM_DATABASE=JumpDrive 2GB + +@@ -20930,6 +21251,9 @@ usb:v05DCpA811* + usb:v05DCpA813* + ID_MODEL_FROM_DATABASE=16gB flash thumb drive + ++usb:v05DCpA815* ++ ID_MODEL_FROM_DATABASE=JumpDrive V10 ++ + usb:v05DCpB002* + ID_MODEL_FROM_DATABASE=USB CF Reader + +@@ -20939,6 +21263,9 @@ usb:v05DCpB018* + usb:v05DCpB047* + ID_MODEL_FROM_DATABASE=SDHC Reader [RW047-7000] + ++usb:v05DCpBA02* ++ ID_MODEL_FROM_DATABASE=Workflow CFR1 ++ + usb:v05DCpC753* + ID_MODEL_FROM_DATABASE=JumpDrive TwistTurn + +@@ -21084,7 +21411,7 @@ usb:v05E3p0607* + ID_MODEL_FROM_DATABASE=Logitech G110 Hub + + usb:v05E3p0608* +- ID_MODEL_FROM_DATABASE=USB-2.0 4-Port HUB ++ ID_MODEL_FROM_DATABASE=Hub + + usb:v05E3p0610* + ID_MODEL_FROM_DATABASE=4-port hub +@@ -21158,6 +21485,9 @@ usb:v05E3p0718* + usb:v05E3p0719* + ID_MODEL_FROM_DATABASE=SATA adapter + ++usb:v05E3p0722* ++ ID_MODEL_FROM_DATABASE=SD/MMC card reader ++ + usb:v05E3p0723* + ID_MODEL_FROM_DATABASE=GL827L SD/MMC/MS Flash Card Reader + +@@ -21170,9 +21500,18 @@ usb:v05E3p0727* + usb:v05E3p0731* + ID_MODEL_FROM_DATABASE=GL3310 SATA 3Gb/s Bridge Controller + ++usb:v05E3p0732* ++ ID_MODEL_FROM_DATABASE=All-in-One Cardreader ++ + usb:v05E3p0736* + ID_MODEL_FROM_DATABASE=microSD Reader/Writer + ++usb:v05E3p0741* ++ ID_MODEL_FROM_DATABASE=microSD Card Reader ++ ++usb:v05E3p0743* ++ ID_MODEL_FROM_DATABASE=SDXC and microSDXC CardReader ++ + usb:v05E3p0760* + ID_MODEL_FROM_DATABASE=USB 2.0 Card Reader/Writer + +@@ -21296,6 +21635,9 @@ usb:v05F3p0081* + usb:v05F3p00FF* + ID_MODEL_FROM_DATABASE=VEC Footpedal + ++usb:v05F3p0203* ++ ID_MODEL_FROM_DATABASE=Y-mouse Keyboard & Mouse Adapter ++ + usb:v05F3p020B* + ID_MODEL_FROM_DATABASE=PS2 Adapter + +@@ -21410,6 +21752,9 @@ usb:v05FEp0014* + usb:v05FEp1010* + ID_MODEL_FROM_DATABASE=Optical Wireless + ++usb:v05FEp2001* ++ ID_MODEL_FROM_DATABASE=Microsoft Wireless Receiver 700 ++ + usb:v05FF* + ID_VENDOR_FROM_DATABASE=LeCroy Corp. + +@@ -21434,6 +21779,9 @@ usb:v0603* + usb:v0603p00F1* + ID_MODEL_FROM_DATABASE=Keyboard + ++usb:v0603p00F2* ++ ID_MODEL_FROM_DATABASE=Keyboard (Labtec Ultra Flat Keyboard) ++ + usb:v0603p6871* + ID_MODEL_FROM_DATABASE=Mouse + +@@ -21491,6 +21839,9 @@ usb:v060Bp2231* + usb:v060Bp2270* + ID_MODEL_FROM_DATABASE=Gigabyte K8100 Aivia Gaming Keyboard + ++usb:v060Bp5253* ++ ID_MODEL_FROM_DATABASE=Thermaltake MEKA G-Unit Gaming Keyboard ++ + usb:v060Bp5811* + ID_MODEL_FROM_DATABASE=ACK-571U Wireless Keyboard + +@@ -21911,6 +22262,9 @@ usb:v064EpA110* + usb:v064EpA114* + ID_MODEL_FROM_DATABASE=Lemote Webcam + ++usb:v064EpA116* ++ ID_MODEL_FROM_DATABASE=UVC 1.3MPixel WebCam ++ + usb:v064EpA136* + ID_MODEL_FROM_DATABASE=Asus Integrated Webcam [CN031B] + +@@ -22893,7 +23247,7 @@ usb:v068Ep00F4* + ID_MODEL_FROM_DATABASE=Combatstick + + usb:v068Ep00FA* +- ID_MODEL_FROM_DATABASE=Flight Sim Pedals ++ ID_MODEL_FROM_DATABASE=Ch Throttle Quadrant + + usb:v068Ep00FF* + ID_MODEL_FROM_DATABASE=Flight Sim Yoke +@@ -22955,6 +23309,9 @@ usb:v0698p9999* + usb:v0699* + ID_VENDOR_FROM_DATABASE=Tektronix, Inc. + ++usb:v0699p0347* ++ ID_MODEL_FROM_DATABASE=AFG 3022B ++ + usb:v069A* + ID_VENDOR_FROM_DATABASE=Askey Computer Corp. + +@@ -23486,6 +23843,9 @@ usb:v06C2* + usb:v06C2p0030* + ID_MODEL_FROM_DATABASE=PhidgetRFID + ++usb:v06C2p0031* ++ ID_MODEL_FROM_DATABASE=RFID reader ++ + usb:v06C2p0038* + ID_MODEL_FROM_DATABASE=4-Motor PhidgetServo v3.0 + +@@ -23789,6 +24149,12 @@ usb:v06D3p0394* + usb:v06D3p03A1* + ID_MODEL_FROM_DATABASE=CP9550D/DW Port + ++usb:v06D3p3B30* ++ ID_MODEL_FROM_DATABASE=CP-D70DW / CP-D707DW ++ ++usb:v06D3p3B31* ++ ID_MODEL_FROM_DATABASE=CP-K60DW-S ++ + usb:v06D4* + ID_VENDOR_FROM_DATABASE=Cisco Systems + +@@ -24575,6 +24941,9 @@ usb:v072Fp1000* + usb:v072Fp1001* + ID_MODEL_FROM_DATABASE=PLDT Drive + ++usb:v072Fp2200* ++ ID_MODEL_FROM_DATABASE=ACR122U ++ + usb:v072Fp8002* + ID_MODEL_FROM_DATABASE=AET63 BioTRUSTKey + +@@ -25046,6 +25415,12 @@ usb:v0765* + usb:v0765p5001* + ID_MODEL_FROM_DATABASE=Huey PRO Colorimeter + ++usb:v0765p5020* ++ ID_MODEL_FROM_DATABASE=i1 Display Pro ++ ++usb:v0765p6003* ++ ID_MODEL_FROM_DATABASE=ColorMunki Smile ++ + usb:v0765pD094* + ID_MODEL_FROM_DATABASE=X-Rite DTP94 [Quato Silver Haze Pro] + +@@ -25325,12 +25700,24 @@ usb:v0781p5530* + usb:v0781p5567* + ID_MODEL_FROM_DATABASE=Cruzer Blade + ++usb:v0781p556C* ++ ID_MODEL_FROM_DATABASE=Ultra ++ ++usb:v0781p556D* ++ ID_MODEL_FROM_DATABASE=Memory Vault ++ + usb:v0781p5571* + ID_MODEL_FROM_DATABASE=Cruzer Fit + ++usb:v0781p5576* ++ ID_MODEL_FROM_DATABASE=Cruzer Facet ++ + usb:v0781p5580* + ID_MODEL_FROM_DATABASE=SDCZ80 Flash Drive + ++usb:v0781p5581* ++ ID_MODEL_FROM_DATABASE=Ultra ++ + usb:v0781p5E10* + ID_MODEL_FROM_DATABASE=Encrypted + +@@ -25830,7 +26217,7 @@ usb:v07AAp001A* + ID_MODEL_FROM_DATABASE=ULUSB-11 Key + + usb:v07AAp001C* +- ID_MODEL_FROM_DATABASE=CG-WLUSB2GTST 802.11g Wireless Adapter [Intersil ISL3887] ++ ID_MODEL_FROM_DATABASE=CG-WLUSB2GT 802.11g Wireless Adapter [Intersil ISL3880] + + usb:v07AAp002E* + ID_MODEL_FROM_DATABASE=CG-WLUSB2GPX [Ralink RT2571W] +@@ -26114,6 +26501,9 @@ usb:v07B4p0114* + usb:v07B4p0118* + ID_MODEL_FROM_DATABASE=Mju Mini Digital/Mju Digital 500 Camera / Stylus 850 SW + ++usb:v07B4p0125* ++ ID_MODEL_FROM_DATABASE=Tough TG-1 Camera ++ + usb:v07B4p0184* + ID_MODEL_FROM_DATABASE=P-S100 port + +@@ -26441,6 +26831,9 @@ usb:v07C4pA400* + usb:v07C4pA600* + ID_MODEL_FROM_DATABASE=Card Reader + ++usb:v07C4pA604* ++ ID_MODEL_FROM_DATABASE=12-in-1 Card Reader ++ + usb:v07C4pAD01* + ID_MODEL_FROM_DATABASE=Mass Storage Device + +@@ -26474,6 +26867,9 @@ usb:v07C4pC010* + usb:v07C5* + ID_VENDOR_FROM_DATABASE=APG Cash Drawer + ++usb:v07C5p0500* ++ ID_MODEL_FROM_DATABASE=Cash Drawer ++ + usb:v07C6* + ID_VENDOR_FROM_DATABASE=ShareWave, Inc. + +@@ -27140,6 +27536,9 @@ usb:v0803* + usb:v0803p1300* + ID_MODEL_FROM_DATABASE=V92 Faxmodem + ++usb:v0803p3095* ++ ID_MODEL_FROM_DATABASE=V.92 56K Mini External Modem Model 3095 ++ + usb:v0803p4310* + ID_MODEL_FROM_DATABASE=4410a Wireless-G Adapter [Intersil ISL3887] + +@@ -27713,6 +28112,9 @@ usb:v0846p9018* + usb:v0846p9020* + ID_MODEL_FROM_DATABASE=WNA3100(v1) Wireless-N 300 [Broadcom BCM43231] + ++usb:v0846p9021* ++ ID_MODEL_FROM_DATABASE=WNA3100M(v1) Wireless-N 300 [Realtek RTL8192CU] ++ + usb:v0846p9030* + ID_MODEL_FROM_DATABASE=WNA1100 Wireless-N 150 [Atheros AR9271] + +@@ -27722,9 +28124,21 @@ usb:v0846p9040* + usb:v0846p9041* + ID_MODEL_FROM_DATABASE=WNA1000M 802.11bgn [Realtek RTL8188CUS] + ++usb:v0846p9042* ++ ID_MODEL_FROM_DATABASE=On Networks N150MA 802.11bgn [Realtek RTL8188CUS] ++ ++usb:v0846p9050* ++ ID_MODEL_FROM_DATABASE=A6200 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526] ++ ++usb:v0846p9052* ++ ID_MODEL_FROM_DATABASE=A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU] ++ + usb:v0846pA001* + ID_MODEL_FROM_DATABASE=PA101 10 Mbps HPNA Home Phoneline RJ-1 + ++usb:v0846pF001* ++ ID_MODEL_FROM_DATABASE=On Networks N300MA 802.11bgn [Realtek RTL8192CU] ++ + usb:v084D* + ID_VENDOR_FROM_DATABASE=Minton Optic Industry Co., Inc. + +@@ -27875,8 +28289,17 @@ usb:v085Ap8027* + usb:v085C* + ID_VENDOR_FROM_DATABASE=ColorVision, Inc. + ++usb:v085Cp0100* ++ ID_MODEL_FROM_DATABASE=Spyder 1 ++ + usb:v085Cp0200* +- ID_MODEL_FROM_DATABASE=Monitor Spyder ++ ID_MODEL_FROM_DATABASE=Spyder 2 ++ ++usb:v085Cp0300* ++ ID_MODEL_FROM_DATABASE=Spyder 3 ++ ++usb:v085Cp0400* ++ ID_MODEL_FROM_DATABASE=Spyder 4 + + usb:v0862* + ID_VENDOR_FROM_DATABASE=Teletrol Systems, Inc. +@@ -28127,6 +28550,12 @@ usb:v0892* + usb:v0892p0101* + ID_MODEL_FROM_DATABASE=Smartdio Reader/Writer + ++usb:v0894* ++ ID_VENDOR_FROM_DATABASE=TSI Incorporated ++ ++usb:v0894p0010* ++ ID_MODEL_FROM_DATABASE=Remote NDIS Network Device ++ + usb:v0897* + ID_VENDOR_FROM_DATABASE=Lauterbach + +@@ -28181,6 +28610,18 @@ usb:v08A9p0015* + usb:v08AE* + ID_VENDOR_FROM_DATABASE=Macally (Mace Group, Inc.) + ++usb:v08B0* ++ ID_VENDOR_FROM_DATABASE=Metrohm ++ ++usb:v08B0p0006* ++ ID_MODEL_FROM_DATABASE=814 Sample Processor ++ ++usb:v08B0p0015* ++ ID_MODEL_FROM_DATABASE=857 Titrando ++ ++usb:v08B0p001A* ++ ID_MODEL_FROM_DATABASE=852 Titrando ++ + usb:v08B4* + ID_VENDOR_FROM_DATABASE=Sorenson Vision, Inc. + +@@ -29036,6 +29477,12 @@ usb:v0906* + usb:v0908* + ID_VENDOR_FROM_DATABASE=Siemens AG + ++usb:v0908p01F4* ++ ID_MODEL_FROM_DATABASE=SIMATIC NET CP 5711 ++ ++usb:v0908p01FE* ++ ID_MODEL_FROM_DATABASE=SIMATIC NET PC Adapter A2 ++ + usb:v0908p2701* + ID_MODEL_FROM_DATABASE=ShenZhen SANZHAI Technology Co.,Ltd Spy Pen VGA + +@@ -29285,12 +29732,18 @@ usb:v091Ep23CC* + usb:v091Ep2459* + ID_MODEL_FROM_DATABASE=GPSmap 62/78 series + ++usb:v091Ep2491* ++ ID_MODEL_FROM_DATABASE=Edge 800 ++ + usb:v091Ep2519* + ID_MODEL_FROM_DATABASE=eTrex 30 + + usb:v091Ep2535* + ID_MODEL_FROM_DATABASE=Edge 800 + ++usb:v091Ep253C* ++ ID_MODEL_FROM_DATABASE=GPSmap 62sc ++ + usb:v091Ep255B* + ID_MODEL_FROM_DATABASE=Nuvi 2505LM + +@@ -29315,12 +29768,18 @@ usb:v0922p0007* + usb:v0922p0009* + ID_MODEL_FROM_DATABASE=LabelWriter 310 + ++usb:v0922p0019* ++ ID_MODEL_FROM_DATABASE=LabelWriter 400 ++ + usb:v0922p001A* + ID_MODEL_FROM_DATABASE=LabelWriter 400 Turbo + + usb:v0922p0020* + ID_MODEL_FROM_DATABASE=LabelWriter 450 + ++usb:v0922p1001* ++ ID_MODEL_FROM_DATABASE=LabelManager PnP ++ + usb:v0923* + ID_VENDOR_FROM_DATABASE=IC Media Corp. + +@@ -29363,6 +29822,9 @@ usb:v0925* + usb:v0925p0005* + ID_MODEL_FROM_DATABASE=Gamtec.,Ltd SmartJoy PLUS Adapter + ++usb:v0925p03E8* ++ ID_MODEL_FROM_DATABASE=Wii Classic Controller Adapter ++ + usb:v0925p3881* + ID_MODEL_FROM_DATABASE=Saleae Logic + +@@ -29417,6 +29879,9 @@ usb:v0930p000C* + usb:v0930p0010* + ID_MODEL_FROM_DATABASE=Gigabeat S (mtp) + ++usb:v0930p0200* ++ ID_MODEL_FROM_DATABASE=Integrated Bluetooth (Taiyo Yuden) ++ + usb:v0930p0301* + ID_MODEL_FROM_DATABASE=PCX1100U Cable Modem (WDM) + +@@ -29483,6 +29948,9 @@ usb:v0930p070B* + usb:v0930p0A07* + ID_MODEL_FROM_DATABASE=WLM-10U1 802.11abgn Wireless Adapter [Ralink RT3572] + ++usb:v0930p0A13* ++ ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet [Toshiba] ++ + usb:v0930p0B05* + ID_MODEL_FROM_DATABASE=PX1220E-1G25 External hard drive + +@@ -29691,7 +30159,7 @@ usb:v0939* + ID_VENDOR_FROM_DATABASE=Lumberg, Inc. + + usb:v0939p0B15* +- ID_MODEL_FROM_DATABASE=Toshiba Stor.E Alu 2 1TB (PX1710E-1HJ0) ++ ID_MODEL_FROM_DATABASE=Toshiba Stor.E Alu 2 + + usb:v093A* + ID_VENDOR_FROM_DATABASE=Pixart Imaging, Inc. +@@ -29753,6 +30221,9 @@ usb:v093Ap260F* + usb:v093Ap2621* + ID_MODEL_FROM_DATABASE=PAC731x Trust Webcam + ++usb:v093Ap2622* ++ ID_MODEL_FROM_DATABASE=Webcam Genius ++ + usb:v093Ap2624* + ID_MODEL_FROM_DATABASE=Webcam + +@@ -29951,6 +30422,9 @@ usb:v0951p1653* + usb:v0951p1656* + ID_MODEL_FROM_DATABASE=DataTraveler Ultimate G2 + ++usb:v0951p1665* ++ ID_MODEL_FROM_DATABASE=Digital DataTraveler SE9 64GB ++ + usb:v0951p1689* + ID_MODEL_FROM_DATABASE=DataTraveler SE9 + +@@ -29993,6 +30467,9 @@ usb:v0957p0200* + usb:v0957p0202* + ID_MODEL_FROM_DATABASE=E-Video DC-350 Camera + ++usb:v0957p0407* ++ ID_MODEL_FROM_DATABASE=33220A Waveform Generator ++ + usb:v0957p0518* + ID_MODEL_FROM_DATABASE=82357B GPIB Interface + +@@ -30033,7 +30510,7 @@ usb:v095Dp0001* + ID_MODEL_FROM_DATABASE=Polycom ViaVideo + + usb:v0967* +- ID_VENDOR_FROM_DATABASE=Acer (??) ++ ID_VENDOR_FROM_DATABASE=Acer NeWeb Corp. + + usb:v0967p0204* + ID_MODEL_FROM_DATABASE=WarpLink 802.11b Adapter +@@ -30056,6 +30533,12 @@ usb:v096Ep0807* + usb:v0971* + ID_VENDOR_FROM_DATABASE=Gretag-Macbeth AG + ++usb:v0971p2000* ++ ID_MODEL_FROM_DATABASE=i1 Pro ++ ++usb:v0971p2001* ++ ID_MODEL_FROM_DATABASE=i1 Monitor ++ + usb:v0971p2003* + ID_MODEL_FROM_DATABASE=Eye-One display + +@@ -30063,7 +30546,7 @@ usb:v0971p2005* + ID_MODEL_FROM_DATABASE=Huey + + usb:v0971p2007* +- ID_MODEL_FROM_DATABASE=ColorMunki ++ ID_MODEL_FROM_DATABASE=ColorMunki Photo + + usb:v0973* + ID_VENDOR_FROM_DATABASE=Schlumberger +@@ -30182,6 +30665,9 @@ usb:v099Ap0638* + usb:v099Ap610C* + ID_MODEL_FROM_DATABASE=EL-610 Super Mini Electron luminescent Keyboard + ++usb:v099Ap713A* ++ ID_MODEL_FROM_DATABASE=WK-713 Multimedia Keyboard ++ + usb:v099Ap7160* + ID_MODEL_FROM_DATABASE=Hyper Slim Keyboard + +@@ -30375,7 +30861,10 @@ usb:v09D3* + ID_VENDOR_FROM_DATABASE=Com One + + usb:v09D3p0001* +- ID_MODEL_FROM_DATABASE=ISDN TA ++ ID_MODEL_FROM_DATABASE=ISDN TA / Light Rider 128K ++ ++usb:v09D3p000B* ++ ID_MODEL_FROM_DATABASE=Bluetooth Adapter class 1 [BlueLight] + + usb:v09D7* + ID_VENDOR_FROM_DATABASE=Novatel Wireless +@@ -30596,6 +31085,12 @@ usb:v0A07p00DA* + usb:v0A0B* + ID_VENDOR_FROM_DATABASE=Cybex Computer Products Co. + ++usb:v0A0D* ++ ID_VENDOR_FROM_DATABASE=Servergy, Inc ++ ++usb:v0A0Dp2514* ++ ID_MODEL_FROM_DATABASE=CTS-1000 Internal Hub ++ + usb:v0A11* + ID_VENDOR_FROM_DATABASE=Xentec, Inc. + +@@ -30887,6 +31382,9 @@ usb:v0A48p5024* + usb:v0A48p5025* + ID_MODEL_FROM_DATABASE=Mass Storage Device + ++usb:v0A4A* ++ ID_VENDOR_FROM_DATABASE=Ploytec GmbH ++ + usb:v0A4B* + ID_VENDOR_FROM_DATABASE=Fujitsu Media Devices, Ltd + +@@ -31217,6 +31715,9 @@ usb:v0A5CpBD11* + usb:v0A5CpBD13* + ID_MODEL_FROM_DATABASE=BCM4323 802.11abgn Wireless Adapter + ++usb:v0A5CpBD16* ++ ID_MODEL_FROM_DATABASE=BCM4319 802.11bgn Wireless Adapter ++ + usb:v0A5CpBD17* + ID_MODEL_FROM_DATABASE=BCM43236 802.11abgn Wireless Adapter + +@@ -31775,6 +32276,9 @@ usb:v0AC8pC33F* + usb:v0AC8pC429* + ID_MODEL_FROM_DATABASE=Lenovo ThinkCentre Web Camera + ++usb:v0AC8pC42D* ++ ID_MODEL_FROM_DATABASE=Lenovo IdeaCentre Web Camera ++ + usb:v0AC9* + ID_VENDOR_FROM_DATABASE=Micro Solutions, Inc. + +@@ -31823,6 +32327,9 @@ usb:v0ACDp0630* + usb:v0ACDp0810* + ID_MODEL_FROM_DATABASE=SecurePIN (IDPA-506100Y) PIN Pad + ++usb:v0ACDp2030* ++ ID_MODEL_FROM_DATABASE=ValueMag Magnetic Stripe Reader ++ + usb:v0ACE* + ID_VENDOR_FROM_DATABASE=ZyDAS + +@@ -32024,6 +32531,12 @@ usb:v0AF9p0010* + usb:v0AF9p0011* + ID_MODEL_FROM_DATABASE=Micro Innovations IC50C Webcam + ++usb:v0AFA* ++ ID_VENDOR_FROM_DATABASE=DMC Co., Ltd. ++ ++usb:v0AFAp07D2* ++ ID_MODEL_FROM_DATABASE=Controller Board for Projected Capacitive Touch Screen DUS3000 ++ + usb:v0AFC* + ID_VENDOR_FROM_DATABASE=Zaptronix Ltd + +@@ -32042,6 +32555,9 @@ usb:v0B00* + usb:v0B05* + ID_VENDOR_FROM_DATABASE=ASUSTek Computer, Inc. + ++usb:v0B05p0001* ++ ID_MODEL_FROM_DATABASE=MeMO Pad HD 7 (CD-ROM mode) ++ + usb:v0B05p1101* + ID_MODEL_FROM_DATABASE=Mass Storage (UISDMC4S) + +@@ -32147,6 +32663,9 @@ usb:v0B05p1784* + usb:v0B05p1786* + ID_MODEL_FROM_DATABASE=USB-N10 802.11n Network Adapter [Realtek RTL8188SU] + ++usb:v0B05p1788* ++ ID_MODEL_FROM_DATABASE=BT-270 Bluetooth Adapter ++ + usb:v0B05p1791* + ID_MODEL_FROM_DATABASE=WL-167G v3 802.11n Adapter [Realtek RTL8188SU] + +@@ -32159,12 +32678,18 @@ usb:v0B05p179E* + usb:v0B05p179F* + ID_MODEL_FROM_DATABASE=Eee Note EA800 (tablet mode) + ++usb:v0B05p17A0* ++ ID_MODEL_FROM_DATABASE=Xonar U3 sound card ++ + usb:v0B05p17A1* + ID_MODEL_FROM_DATABASE=Eee Note EA800 (mass storage mode) + + usb:v0B05p17AB* + ID_MODEL_FROM_DATABASE=USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU] + ++usb:v0B05p17C9* ++ ID_MODEL_FROM_DATABASE=USB-AC53 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526] ++ + usb:v0B05p4C80* + ID_MODEL_FROM_DATABASE=Transformer Pad TF300TG + +@@ -32183,6 +32708,12 @@ usb:v0B05p4D01* + usb:v0B05p4DAF* + ID_MODEL_FROM_DATABASE=Transformer Pad Infinity TF700 (Fastboot) + ++usb:v0B05p5410* ++ ID_MODEL_FROM_DATABASE=MeMO Pad HD 7 (MTP mode) ++ ++usb:v0B05p5412* ++ ID_MODEL_FROM_DATABASE=MeMO Pad HD 7 (PTP mode) ++ + usb:v0B05p6101* + ID_MODEL_FROM_DATABASE=Cable Modem + +@@ -32228,9 +32759,15 @@ usb:v0B0E* + usb:v0B0Ep0420* + ID_MODEL_FROM_DATABASE=Jabra SPEAK 510 + ++usb:v0B0Ep094D* ++ ID_MODEL_FROM_DATABASE=GN Netcom / Jabra REVO Wireless ++ + usb:v0B0Ep1022* + ID_MODEL_FROM_DATABASE=Jabra PRO 9450, Type 9400BS (DECT Headset) + ++usb:v0B0Ep2007* ++ ID_MODEL_FROM_DATABASE=GN 2000 Stereo Corded Headset ++ + usb:v0B0Ep620C* + ID_MODEL_FROM_DATABASE=Jabra BT620s + +@@ -32291,6 +32828,9 @@ usb:v0B33* + usb:v0B33p0020* + ID_MODEL_FROM_DATABASE=ShuttleXpress + ++usb:v0B33p0700* ++ ID_MODEL_FROM_DATABASE=RollerMouse Pro ++ + usb:v0B37* + ID_VENDOR_FROM_DATABASE=Hitachi ULSI Systems Co., Ltd + +@@ -32687,6 +33227,9 @@ usb:v0B95p1720* + usb:v0B95p1780* + ID_MODEL_FROM_DATABASE=AX88178 + ++usb:v0B95p1790* ++ ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet ++ + usb:v0B95p7720* + ID_MODEL_FROM_DATABASE=AX88772 + +@@ -32786,6 +33329,9 @@ usb:v0BAFp011B* + usb:v0BAFp0121* + ID_MODEL_FROM_DATABASE=USR5423 802.11bg Wireless Adapter [ZyDAS ZD1211B] + ++usb:v0BAFp0303* ++ ID_MODEL_FROM_DATABASE=USR5637 56K Faxmodem ++ + usb:v0BAFp6112* + ID_MODEL_FROM_DATABASE=FaxModem Model 5633 + +@@ -33332,6 +33878,9 @@ usb:v0BB4p0C01* + usb:v0BB4p0C02* + ID_MODEL_FROM_DATABASE=Dream / ADP1 / G1 / Magic / Tattoo (Debug) + ++usb:v0BB4p0C03* ++ ID_MODEL_FROM_DATABASE=Android Phone [Fairphone First Edition (FP1)] ++ + usb:v0BB4p0C13* + ID_MODEL_FROM_DATABASE=Diamond + +@@ -33371,6 +33920,12 @@ usb:v0BB4p0CA2* + usb:v0BB4p0CA5* + ID_MODEL_FROM_DATABASE=Android Phone [Evo Shift 4G] + ++usb:v0BB4p0CAE* ++ ID_MODEL_FROM_DATABASE=T-Mobile MyTouch 4G Slide [Doubleshot] ++ ++usb:v0BB4p0DEA* ++ ID_MODEL_FROM_DATABASE=M7_UL [HTC One] ++ + usb:v0BB4p0FF8* + ID_MODEL_FROM_DATABASE=Desire HD (Tethering Mode) + +@@ -33443,18 +33998,33 @@ usb:v0BC2p2320* + usb:v0BC2p3008* + ID_MODEL_FROM_DATABASE=FreeAgent Desk 1TB + ++usb:v0BC2p3101* ++ ID_MODEL_FROM_DATABASE=FreeAgent XTreme 640GB ++ ++usb:v0BC2p3312* ++ ID_MODEL_FROM_DATABASE=SRD00F2 [Expansion Desktop Drive 2TB] ++ + usb:v0BC2p3320* + ID_MODEL_FROM_DATABASE=SRD00F2 [Expansion Desktop Drive] + + usb:v0BC2p3332* + ID_MODEL_FROM_DATABASE=Expansion + ++usb:v0BC2p5020* ++ ID_MODEL_FROM_DATABASE=FreeAgent GoFlex ++ + usb:v0BC2p5021* + ID_MODEL_FROM_DATABASE=FreeAgent GoFlex USB 2.0 + ++usb:v0BC2p5030* ++ ID_MODEL_FROM_DATABASE=FreeAgent GoFlex Upgrade Cable STAE104 ++ + usb:v0BC2p5031* + ID_MODEL_FROM_DATABASE=FreeAgent GoFlex USB 3.0 + ++usb:v0BC2p5070* ++ ID_MODEL_FROM_DATABASE=FreeAgent GoFlex Desk ++ + usb:v0BC2p50A1* + ID_MODEL_FROM_DATABASE=FreeAgent GoFlex Desk + +@@ -33476,6 +34046,9 @@ usb:v0BC2pA0A1* + usb:v0BC2pA0A4* + ID_MODEL_FROM_DATABASE=Backup Plus Desktop Drive + ++usb:v0BC2pAB00* ++ ID_MODEL_FROM_DATABASE=Slim Portable Drive ++ + usb:v0BC3* + ID_VENDOR_FROM_DATABASE=IPWireless, Inc. + +@@ -33650,6 +34223,12 @@ usb:v0BDAp0184* + usb:v0BDAp0186* + ID_MODEL_FROM_DATABASE=Card Reader + ++usb:v0BDAp0301* ++ ID_MODEL_FROM_DATABASE=multicard reader ++ ++usb:v0BDAp1724* ++ ID_MODEL_FROM_DATABASE=RTL8723AU 802.11n WLAN Adapter ++ + usb:v0BDAp2831* + ID_MODEL_FROM_DATABASE=RTL2831U DVB-T + +@@ -33707,6 +34286,9 @@ usb:v0BDAp8198* + usb:v0BDAp8199* + ID_MODEL_FROM_DATABASE=RTL8187SU 802.11g WLAN Adapter + ++usb:v0BDAp8812* ++ ID_MODEL_FROM_DATABASE=RTL8812AU 802.11a/b/g/n/ac WLAN Adapter ++ + usb:v0BDB* + ID_VENDOR_FROM_DATABASE=Ericsson Business Mobile Networks BV + +@@ -34038,7 +34620,7 @@ usb:v0C24p0019* + ID_MODEL_FROM_DATABASE=Bluetooth Device + + usb:v0C24p0021* +- ID_MODEL_FROM_DATABASE=Bluetooth Device ++ ID_MODEL_FROM_DATABASE=Bluetooth Device (V2.1+EDR) + + usb:v0C24p0C24* + ID_MODEL_FROM_DATABASE=Bluetooth Device(SAMPLE) +@@ -34142,6 +34724,9 @@ usb:v0C45* + usb:v0C45p0011* + ID_MODEL_FROM_DATABASE=EBUDDY + ++usb:v0C45p0520* ++ ID_MODEL_FROM_DATABASE=MaxTrack Wireless Mouse ++ + usb:v0C45p1018* + ID_MODEL_FROM_DATABASE=Compact Flash storage memory card reader + +@@ -34496,9 +35081,15 @@ usb:v0C45p62C0* + usb:v0C45p62E0* + ID_MODEL_FROM_DATABASE=MSI Starcam Racer + ++usb:v0C45p6300* ++ ID_MODEL_FROM_DATABASE=PC Microscope camera ++ + usb:v0C45p6310* + ID_MODEL_FROM_DATABASE=Sonix USB 2.0 Camera + ++usb:v0C45p6340* ++ ID_MODEL_FROM_DATABASE=Camera ++ + usb:v0C45p6341* + ID_MODEL_FROM_DATABASE=Defender G-Lens 2577 HD720p Camera + +@@ -34526,6 +35117,12 @@ usb:v0C45p6419* + usb:v0C45p641D* + ID_MODEL_FROM_DATABASE=1.3 MPixel Integrated Webcam + ++usb:v0C45p643F* ++ ID_MODEL_FROM_DATABASE=Dell Integrated HD Webcam ++ ++usb:v0C45p644D* ++ ID_MODEL_FROM_DATABASE=1.3 MPixel Integrated Webcam ++ + usb:v0C45p6480* + ID_MODEL_FROM_DATABASE=Sonix 1.3 MP Laptop Integrated Webcam + +@@ -34535,6 +35132,9 @@ usb:v0C45p648B* + usb:v0C45p64BD* + ID_MODEL_FROM_DATABASE=Sony Visual Communication Camera + ++usb:v0C45p7401* ++ ID_MODEL_FROM_DATABASE=TEMPer Temperature Sensor ++ + usb:v0C45p7402* + ID_MODEL_FROM_DATABASE=TEMPerHUM Temperature & Humidity Sensor + +@@ -35390,6 +35990,9 @@ usb:v0CF3p3000* + usb:v0CF3p3002* + ID_MODEL_FROM_DATABASE=AR3011 Bluetooth + ++usb:v0CF3p3004* ++ ID_MODEL_FROM_DATABASE=AR3012 Bluetooth 4.0 ++ + usb:v0CF3p3005* + ID_MODEL_FROM_DATABASE=AR3011 Bluetooth + +@@ -35564,6 +36167,15 @@ usb:v0D35* + usb:v0D3A* + ID_VENDOR_FROM_DATABASE=Posiflex Technologies, Inc. + ++usb:v0D3Ap0206* ++ ID_MODEL_FROM_DATABASE=Series 3xxx Cash Drawer ++ ++usb:v0D3Ap0207* ++ ID_MODEL_FROM_DATABASE=Series 3xxx Cash Drawer ++ ++usb:v0D3Ap0500* ++ ID_MODEL_FROM_DATABASE=Magnetic Stripe Reader ++ + usb:v0D3C* + ID_VENDOR_FROM_DATABASE=Sri Cable Technology, Ltd + +@@ -35573,6 +36185,9 @@ usb:v0D3D* + usb:v0D3Dp0001* + ID_MODEL_FROM_DATABASE=HID Keyboard + ++usb:v0D3Dp0040* ++ ID_MODEL_FROM_DATABASE=PS/2 Adapter ++ + usb:v0D3E* + ID_VENDOR_FROM_DATABASE=Fitcom, inc. + +@@ -35651,6 +36266,9 @@ usb:v0D49p7010* + usb:v0D49p7100* + ID_MODEL_FROM_DATABASE=OneTouch II 300GB External Hard Disk + ++usb:v0D49p7310* ++ ID_MODEL_FROM_DATABASE=OneTouch 4 ++ + usb:v0D49p7410* + ID_MODEL_FROM_DATABASE=Mobile Hard Disk Drive (1TB) + +@@ -35858,6 +36476,9 @@ usb:v0D78* + usb:v0D7A* + ID_VENDOR_FROM_DATABASE=MARX Datentechnik GmbH + ++usb:v0D7Ap0001* ++ ID_MODEL_FROM_DATABASE=CrypToken ++ + usb:v0D7B* + ID_VENDOR_FROM_DATABASE=Wellco Technology Co., Ltd + +@@ -36404,6 +37025,12 @@ usb:v0DB7* + usb:v0DB7p0002* + ID_MODEL_FROM_DATABASE=Goldpfeil P-LAN + ++usb:v0DBA* ++ ID_VENDOR_FROM_DATABASE=Digidesign ++ ++usb:v0DBAp3000* ++ ID_MODEL_FROM_DATABASE=Mbox 2 ++ + usb:v0DBC* + ID_VENDOR_FROM_DATABASE=A&D Medical + +@@ -36776,6 +37403,9 @@ usb:v0DF6p0060* + usb:v0DF6p0062* + ID_MODEL_FROM_DATABASE=WLA-5000 802.11abgn [Ralink RT3572] + ++usb:v0DF6p0072* ++ ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet [Sitecom] ++ + usb:v0DF6p061C* + ID_MODEL_FROM_DATABASE=LN-028 Network USB 2.0 Adapter + +@@ -37253,6 +37883,9 @@ usb:v0E79p14AD* + usb:v0E79p150E* + ID_MODEL_FROM_DATABASE=80 G9 + ++usb:v0E79p3001* ++ ID_MODEL_FROM_DATABASE=40 Titanium ++ + usb:v0E7B* + ID_VENDOR_FROM_DATABASE=On-Tech Industry Co., Ltd + +@@ -37292,9 +37925,15 @@ usb:v0E8Dp1806* + usb:v0E8Dp1836* + ID_MODEL_FROM_DATABASE=Samsung SE-S084 Super WriteMaster Slim External DVD writer + ++usb:v0E8Dp2000* ++ ID_MODEL_FROM_DATABASE=MT65xx Preloader ++ + usb:v0E8Dp3329* + ID_MODEL_FROM_DATABASE=Qstarz BT-Q1000XT + ++usb:v0E8Dp763E* ++ ID_MODEL_FROM_DATABASE=MT7630e Bluetooth Adapter ++ + usb:v0E8F* + ID_VENDOR_FROM_DATABASE=GreenAsia Inc. + +@@ -37302,7 +37941,7 @@ usb:v0E8Fp0003* + ID_MODEL_FROM_DATABASE=MaxFire Blaze2 + + usb:v0E8Fp0012* +- ID_MODEL_FROM_DATABASE=USB Wireless 2.4GHz Gamepad ++ ID_MODEL_FROM_DATABASE=Joystick/Gamepad + + usb:v0E8Fp0016* + ID_MODEL_FROM_DATABASE=4 port USB 1.1 hub UH-174 +@@ -37436,9 +38075,18 @@ usb:v0EB7* + usb:v0EB8* + ID_VENDOR_FROM_DATABASE=Mettler Toledo + ++usb:v0EB8p2200* ++ ID_MODEL_FROM_DATABASE=Ariva Scale ++ + usb:v0EB8pF000* + ID_MODEL_FROM_DATABASE=PS60 Scale + ++usb:v0EBB* ++ ID_VENDOR_FROM_DATABASE=Thermo Fisher Scientific ++ ++usb:v0EBBp0002* ++ ID_MODEL_FROM_DATABASE=FT-IR Spectrometer ++ + usb:v0EBE* + ID_VENDOR_FROM_DATABASE=VWeb Corp. + +@@ -37559,6 +38207,12 @@ usb:v0EEFp0001* + usb:v0EEFp0002* + ID_MODEL_FROM_DATABASE=Touchscreen Controller(Professional) + ++usb:v0EEFp7200* ++ ID_MODEL_FROM_DATABASE=Touchscreen Controller ++ ++usb:v0EEFpA802* ++ ID_MODEL_FROM_DATABASE=eGalaxTouch EXC7920 ++ + usb:v0EF0* + ID_VENDOR_FROM_DATABASE=Hitachi Cable, Ltd + +@@ -37670,6 +38324,12 @@ usb:v0F12* + usb:v0F13* + ID_VENDOR_FROM_DATABASE=Acetek Technology Co., Ltd + ++usb:v0F14* ++ ID_VENDOR_FROM_DATABASE=Ingenico ++ ++usb:v0F14p0012* ++ ID_MODEL_FROM_DATABASE=Vital'Act 3S ++ + usb:v0F18* + ID_VENDOR_FROM_DATABASE=Finger Lakes Instrumentation + +@@ -37754,6 +38414,12 @@ usb:v0F37* + usb:v0F38* + ID_VENDOR_FROM_DATABASE=Nien-Yi Industrial Corp. + ++usb:v0F39* ++ ID_VENDOR_FROM_DATABASE=TG3 Electronics ++ ++usb:v0F39p0876* ++ ID_MODEL_FROM_DATABASE=Keyboard [87 Francium Pro] ++ + usb:v0F3D* + ID_VENDOR_FROM_DATABASE=Airprime, Incorporated + +@@ -37841,6 +38507,9 @@ usb:v0F63* + usb:v0F63p0010* + ID_MODEL_FROM_DATABASE=Leapster Explorer + ++usb:v0F63p0022* ++ ID_MODEL_FROM_DATABASE=Leap Reader ++ + usb:v0F63p0500* + ID_MODEL_FROM_DATABASE=Fly Fusion + +@@ -37928,6 +38597,9 @@ usb:v0F6Ep0404* + usb:v0F73* + ID_VENDOR_FROM_DATABASE=DFI + ++usb:v0F78* ++ ID_VENDOR_FROM_DATABASE=Guntermann & Drunck GmbH ++ + usb:v0F7C* + ID_VENDOR_FROM_DATABASE=DQ Technology, Inc. + +@@ -38064,7 +38736,7 @@ usb:v0FCAp8001* + ID_MODEL_FROM_DATABASE=Blackberry Handheld + + usb:v0FCAp8004* +- ID_MODEL_FROM_DATABASE=Blackberry Handheld ++ ID_MODEL_FROM_DATABASE=Blackberry + + usb:v0FCAp8007* + ID_MODEL_FROM_DATABASE=Blackberry Handheld +@@ -38147,6 +38819,12 @@ usb:v0FCEp3138* + usb:v0FCEp3149* + ID_MODEL_FROM_DATABASE=Xperia X8 + ++usb:v0FCEp514F* ++ ID_MODEL_FROM_DATABASE=Xperia arc S [Adb-Enable Mode] ++ ++usb:v0FCEp5169* ++ ID_MODEL_FROM_DATABASE=Xperia S [Adb-Enable Mode] ++ + usb:v0FCEp5177* + ID_MODEL_FROM_DATABASE=Xperia Ion [Debug Mode] + +@@ -38309,6 +38987,9 @@ usb:v0FCEpE166* + usb:v0FCEpE167* + ID_MODEL_FROM_DATABASE=XPERIA mini + ++usb:v0FCEpF0FA* ++ ID_MODEL_FROM_DATABASE=Liveview micro display MN800 in DFU mode ++ + usb:v0FCF* + ID_VENDOR_FROM_DATABASE=Dynastream Innovations, Inc. + +@@ -38316,13 +38997,16 @@ usb:v0FCFp1003* + ID_MODEL_FROM_DATABASE=ANT Development Board + + usb:v0FCFp1004* +- ID_MODEL_FROM_DATABASE=ANT2USB ++ ID_MODEL_FROM_DATABASE=ANTUSB Stick + + usb:v0FCFp1006* + ID_MODEL_FROM_DATABASE=ANT Development Board + + usb:v0FCFp1008* +- ID_MODEL_FROM_DATABASE=Mini stick Suunto ++ ID_MODEL_FROM_DATABASE=ANTUSB2 Stick ++ ++usb:v0FCFp1009* ++ ID_MODEL_FROM_DATABASE=ANTUSB-m Stick + + usb:v0FD0* + ID_VENDOR_FROM_DATABASE=Tulip Computers B.V. +@@ -38378,6 +39062,12 @@ usb:v0FDAp0100* + usb:v0FDC* + ID_VENDOR_FROM_DATABASE=Micro Plus + ++usb:v0FDE* ++ ID_VENDOR_FROM_DATABASE=Oregon Scientific ++ ++usb:v0FDEpCA01* ++ ID_MODEL_FROM_DATABASE=WMRS200 weather station ++ + usb:v0FE0* + ID_VENDOR_FROM_DATABASE=Osterhout Design Group + +@@ -38471,6 +39161,9 @@ usb:v0FFF* + usb:v1000* + ID_VENDOR_FROM_DATABASE=Speed Tech Corp. + ++usb:v1000p153B* ++ ID_MODEL_FROM_DATABASE=TerraTec Electronic GmbH ++ + usb:v1001* + ID_VENDOR_FROM_DATABASE=Ritronics Components (S) Pte., Ltd + +@@ -38504,6 +39197,9 @@ usb:v1004p618E* + usb:v1004p618F* + ID_MODEL_FROM_DATABASE=Ally/Optimus One + ++usb:v1004p61C5* ++ ID_MODEL_FROM_DATABASE=P880 / Charge only ++ + usb:v1004p61C6* + ID_MODEL_FROM_DATABASE=Vortex (msc) + +@@ -38514,7 +39210,7 @@ usb:v1004p61F1* + ID_MODEL_FROM_DATABASE=Optimus Android Phone [LG Software mode] + + usb:v1004p61F9* +- ID_MODEL_FROM_DATABASE=V909 G-Slate ++ ID_MODEL_FROM_DATABASE=Optimus (Various Models) MTP Mode + + usb:v1004p61FC* + ID_MODEL_FROM_DATABASE=Optimus 3 +@@ -38528,9 +39224,15 @@ usb:v1004p6300* + usb:v1004p631C* + ID_MODEL_FROM_DATABASE=Optimus Android Phone [MTP mode] + ++usb:v1004p631D* ++ ID_MODEL_FROM_DATABASE=Optimus Android Phone (Camera/PTP Mode) ++ + usb:v1004p631E* + ID_MODEL_FROM_DATABASE=Optimus Android Phone [Camera/PTP mode] + ++usb:v1004p631F* ++ ID_MODEL_FROM_DATABASE=Optimus Android Phone (Charge Mode) ++ + usb:v1004p6356* + ID_MODEL_FROM_DATABASE=Optimus Android Phone [Virtual CD mode] + +@@ -38540,6 +39242,9 @@ usb:v1004p6800* + usb:v1004p7000* + ID_MODEL_FROM_DATABASE=LG LDP-7024D(LD)USB + ++usb:v1004p91C8* ++ ID_MODEL_FROM_DATABASE=P880 / USB tethering ++ + usb:v1004pA400* + ID_MODEL_FROM_DATABASE=Renoir (KC910) + +@@ -38742,13 +39447,13 @@ usb:v1033p0068* + ID_MODEL_FROM_DATABASE=3,5'' HDD case MD-231 + + usb:v1038* +- ID_VENDOR_FROM_DATABASE=Ideazon, Inc. ++ ID_VENDOR_FROM_DATABASE=SteelSeries ApS + + usb:v1038p0100* +- ID_MODEL_FROM_DATABASE=Zboard ++ ID_MODEL_FROM_DATABASE=Ideazon Zboard + + usb:v1038p1361* +- ID_MODEL_FROM_DATABASE=Sensei ++ ID_MODEL_FROM_DATABASE=Ideazon Sensei + + usb:v1039* + ID_VENDOR_FROM_DATABASE=devolo AG +@@ -38946,28 +39651,37 @@ usb:v1058p0704* + ID_MODEL_FROM_DATABASE=Passport External HDD + + usb:v1058p070A* +- ID_MODEL_FROM_DATABASE=My Passport Essential SE ++ ID_MODEL_FROM_DATABASE=My Passport Essential SE, My Passport for Mac (WDBAAB) + + usb:v1058p071A* + ID_MODEL_FROM_DATABASE=My Passport + + usb:v1058p0730* +- ID_MODEL_FROM_DATABASE=My Passport ++ ID_MODEL_FROM_DATABASE=My Passport Essential (WDBACY) + + usb:v1058p0740* + ID_MODEL_FROM_DATABASE=My Passport + ++usb:v1058p0741* ++ ID_MODEL_FROM_DATABASE=My Passport Ultra ++ + usb:v1058p0742* + ID_MODEL_FROM_DATABASE=My Passport Essential SE + + usb:v1058p0748* +- ID_MODEL_FROM_DATABASE=My Passport 1TB USB 3.0 ++ ID_MODEL_FROM_DATABASE=My Passport (WDBKXH) ++ ++usb:v1058p0810* ++ ID_MODEL_FROM_DATABASE=My Passport Ultra + + usb:v1058p0900* + ID_MODEL_FROM_DATABASE=MyBook Essential External HDD + + usb:v1058p0901* +- ID_MODEL_FROM_DATABASE=MyBook External HDD ++ ID_MODEL_FROM_DATABASE=My Book Essential Edition (Green Ring) ++ ++usb:v1058p0902* ++ ID_MODEL_FROM_DATABASE=My Book Pro Edition + + usb:v1058p0903* + ID_MODEL_FROM_DATABASE=My Book Premium Edition +@@ -38976,20 +39690,32 @@ usb:v1058p0910* + ID_MODEL_FROM_DATABASE=MyBook Essential External HDD + + usb:v1058p1001* +- ID_MODEL_FROM_DATABASE=External Hard Disk [Elements] ++ ID_MODEL_FROM_DATABASE=Elements Desktop (WDE1U) + + usb:v1058p1003* + ID_MODEL_FROM_DATABASE=Elements 1000 GB + + usb:v1058p1010* +- ID_MODEL_FROM_DATABASE=Elements External HDD ++ ID_MODEL_FROM_DATABASE=Elements Portable (WDBAAR) + + usb:v1058p1021* +- ID_MODEL_FROM_DATABASE=Elements 2TB ++ ID_MODEL_FROM_DATABASE=Elements Desktop (WDBAAU) + + usb:v1058p1023* + ID_MODEL_FROM_DATABASE=Elements SE + ++usb:v1058p1048* ++ ID_MODEL_FROM_DATABASE=Elements Portable (WDBU6Y) ++ ++usb:v1058p10A2* ++ ID_MODEL_FROM_DATABASE=Elements SE Portable (WDBPCK) ++ ++usb:v1058p10A8* ++ ID_MODEL_FROM_DATABASE=Elements Portable (WDBUZG) ++ ++usb:v1058p1100* ++ ID_MODEL_FROM_DATABASE=My Book Essential Edition 2.0 (WDH1U) ++ + usb:v1058p1103* + ID_MODEL_FROM_DATABASE=My Book Studio + +@@ -39272,6 +39998,9 @@ usb:v106Fp0009* + usb:v106Fp000A* + ID_MODEL_FROM_DATABASE=CR10x Coin Recycler + ++usb:v106Fp000C* ++ ID_MODEL_FROM_DATABASE=Xchange ++ + usb:v1076* + ID_VENDOR_FROM_DATABASE=GCT Semiconductor, Inc. + +@@ -39335,6 +40064,12 @@ usb:v1099* + usb:v109A* + ID_VENDOR_FROM_DATABASE=DATASOFT Systems GmbH + ++usb:v109B* ++ ID_VENDOR_FROM_DATABASE=Hisense ++ ++usb:v109Bp9118* ++ ID_MODEL_FROM_DATABASE=Medion P4013 Mobile ++ + usb:v109F* + ID_VENDOR_FROM_DATABASE=eSOL Co., Ltd + +@@ -39458,6 +40193,15 @@ usb:v10BF* + usb:v10BFp0001* + ID_MODEL_FROM_DATABASE=SmartHome PowerLinc + ++usb:v10C3* ++ ID_VENDOR_FROM_DATABASE=Universal Laser Systems, Inc. ++ ++usb:v10C3p00A4* ++ ID_MODEL_FROM_DATABASE=ULS PLS Series Laser Engraver Firmware Loader ++ ++usb:v10C3p00A5* ++ ID_MODEL_FROM_DATABASE=ULS Print Support ++ + usb:v10C4* + ID_VENDOR_FROM_DATABASE=Cygnal Integrated Products, Inc. + +@@ -39509,6 +40253,12 @@ usb:v10C4p8461* + usb:v10C4p8477* + ID_MODEL_FROM_DATABASE=Balluff RFID Reader + ++usb:v10C4p8496* ++ ID_MODEL_FROM_DATABASE=SiLabs Cypress FW downloader ++ ++usb:v10C4p8497* ++ ID_MODEL_FROM_DATABASE=SiLabs Cypress EVB ++ + usb:v10C4p8605* + ID_MODEL_FROM_DATABASE=dilitronics ESoLUX solar lighting controller + +@@ -39527,6 +40277,9 @@ usb:v10C4p8863* + usb:v10C4p8897* + ID_MODEL_FROM_DATABASE=C8051F38x HDMI Splitter [UHBX] + ++usb:v10C4p8918* ++ ID_MODEL_FROM_DATABASE=C8051F38x HDMI Audio Extractor [VSA-HA-DP] ++ + usb:v10C4pEA60* + ID_MODEL_FROM_DATABASE=CP210x UART Bridge / myAVR mySmartUSB light + +@@ -39908,6 +40661,9 @@ usb:v1141* + usb:v1142* + ID_VENDOR_FROM_DATABASE=CyberScan Technologies, Inc. + ++usb:v1142p0709* ++ ID_MODEL_FROM_DATABASE=Cyberview High Speed Scanner ++ + usb:v1145* + ID_VENDOR_FROM_DATABASE=Japan Radio Company + +@@ -39938,6 +40694,9 @@ usb:v114D* + usb:v114F* + ID_VENDOR_FROM_DATABASE=Wavecom + ++usb:v114Fp1234* ++ ID_MODEL_FROM_DATABASE=Fastrack Xtend FXT001 Modem ++ + usb:v115B* + ID_VENDOR_FROM_DATABASE=Salix Technology Co., Ltd. + +@@ -40128,7 +40887,7 @@ usb:v1199p683A* + ID_MODEL_FROM_DATABASE=MC8785 Device + + usb:v1199p683C* +- ID_MODEL_FROM_DATABASE=MC8790 Device ++ ID_MODEL_FROM_DATABASE=Mobile Broadband 3G/UMTS (MC8790 Device) + + usb:v1199p6850* + ID_MODEL_FROM_DATABASE=AirCard 880 Device +@@ -40196,6 +40955,12 @@ usb:v1199p9009* + usb:v1199p900A* + ID_MODEL_FROM_DATABASE=Gobi 2000 Wireless Modem + ++usb:v1199p9055* ++ ID_MODEL_FROM_DATABASE=Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode) ++ ++usb:v1199p9057* ++ ID_MODEL_FROM_DATABASE=Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode) ++ + usb:v119A* + ID_VENDOR_FROM_DATABASE=ZHAN QI Technology Co., Ltd + +@@ -40238,12 +41003,30 @@ usb:v11ACp6565* + usb:v11B0* + ID_VENDOR_FROM_DATABASE=ATECH FLASH TECHNOLOGY + ++usb:v11B0p6208* ++ ID_MODEL_FROM_DATABASE=PRO-28U ++ ++usb:v11BE* ++ ID_VENDOR_FROM_DATABASE=R&D International NV ++ ++usb:v11BEpF0A0* ++ ID_MODEL_FROM_DATABASE=Martin Maxxyz DMX ++ + usb:v11C5* + ID_VENDOR_FROM_DATABASE=Inmax + + usb:v11C5p0521* + ID_MODEL_FROM_DATABASE=IMT-0521 Smartcard Reader + ++usb:v11CA* ++ ID_VENDOR_FROM_DATABASE=VeriFone Inc ++ ++usb:v11CAp0207* ++ ID_MODEL_FROM_DATABASE=PIN Pad VX 810 ++ ++usb:v11CAp0220* ++ ID_MODEL_FROM_DATABASE=PIN Pad VX 805 ++ + usb:v11DB* + ID_VENDOR_FROM_DATABASE=Topfield Co., Ltd. + +@@ -40274,6 +41057,9 @@ usb:v11F5p0005* + usb:v11F5p0008* + ID_MODEL_FROM_DATABASE=UMTS/HSDPA Data Card + ++usb:v11F5p0101* ++ ID_MODEL_FROM_DATABASE=RCU Connect ++ + usb:v11F6* + ID_VENDOR_FROM_DATABASE=Prolific + +@@ -40284,7 +41070,7 @@ usb:v11F7* + ID_VENDOR_FROM_DATABASE=Alcatel (?) + + usb:v11F7p02DF* +- ID_MODEL_FROM_DATABASE=TD10 Mobile phone USB cable ++ ID_MODEL_FROM_DATABASE=Serial cable (v2) for TD-10 Mobile Phone + + usb:v1203* + ID_VENDOR_FROM_DATABASE=TSC Auto ID Technology Co., Ltd +@@ -40352,6 +41138,9 @@ usb:v1228p0012* + usb:v1228p0015* + ID_MODEL_FROM_DATABASE=TPaq21/MPaq21 Datalogger + ++usb:v1228p584C* ++ ID_MODEL_FROM_DATABASE=XL2 Logger ++ + usb:v1230* + ID_VENDOR_FROM_DATABASE=Chipidea-Microelectronica, S.A. + +@@ -40377,20 +41166,110 @@ usb:v1235* + ID_VENDOR_FROM_DATABASE=Novation EMS + + usb:v1235p0001* +- ID_MODEL_FROM_DATABASE=ReMOTE Audio/XStation ++ ID_MODEL_FROM_DATABASE=ReMOTE Audio/XStation First Edition + + usb:v1235p0002* + ID_MODEL_FROM_DATABASE=Speedio + + usb:v1235p0003* +- ID_MODEL_FROM_DATABASE=ReMOTE ZeRO SL ++ ID_MODEL_FROM_DATABASE=RemoteSL + ZeroSL ++ ++usb:v1235p0004* ++ ID_MODEL_FROM_DATABASE=ReMOTE LE ++ ++usb:v1235p0005* ++ ID_MODEL_FROM_DATABASE=XIOSynth [First Edition] ++ ++usb:v1235p0006* ++ ID_MODEL_FROM_DATABASE=XStation ++ ++usb:v1235p0007* ++ ID_MODEL_FROM_DATABASE=XIOSynth ++ ++usb:v1235p0008* ++ ID_MODEL_FROM_DATABASE=ReMOTE SL Compact ++ ++usb:v1235p0009* ++ ID_MODEL_FROM_DATABASE=nIO ++ ++usb:v1235p000A* ++ ID_MODEL_FROM_DATABASE=Nocturn ++ ++usb:v1235p000B* ++ ID_MODEL_FROM_DATABASE=ReMOTE SL MkII ++ ++usb:v1235p000C* ++ ID_MODEL_FROM_DATABASE=ZeRO MkII ++ ++usb:v1235p000E* ++ ID_MODEL_FROM_DATABASE=Launchpad ++ ++usb:v1235p0010* ++ ID_MODEL_FROM_DATABASE=Saffire 6 ++ ++usb:v1235p0011* ++ ID_MODEL_FROM_DATABASE=Ultranova ++ ++usb:v1235p0012* ++ ID_MODEL_FROM_DATABASE=Nocturn Keyboard ++ ++usb:v1235p0013* ++ ID_MODEL_FROM_DATABASE=VRM Box ++ ++usb:v1235p0014* ++ ID_MODEL_FROM_DATABASE=VRM Box Audio Class (2-out) ++ ++usb:v1235p0015* ++ ID_MODEL_FROM_DATABASE=Dicer ++ ++usb:v1235p0016* ++ ID_MODEL_FROM_DATABASE=Ultranova ++ ++usb:v1235p0018* ++ ID_MODEL_FROM_DATABASE=Twitch ++ ++usb:v1235p0019* ++ ID_MODEL_FROM_DATABASE=Impulse 25 ++ ++usb:v1235p001A* ++ ID_MODEL_FROM_DATABASE=Impulse 49 ++ ++usb:v1235p001B* ++ ID_MODEL_FROM_DATABASE=Impulse 61 + + usb:v1235p4661* + ID_MODEL_FROM_DATABASE=ReMOTE25 + ++usb:v1235p8000* ++ ID_MODEL_FROM_DATABASE=Scarlett 18i6 ++ ++usb:v1235p8002* ++ ID_MODEL_FROM_DATABASE=Scarlett 8i6 ++ + usb:v1235p8006* + ID_MODEL_FROM_DATABASE=Focusrite Scarlett 2i2 + ++usb:v1235p8008* ++ ID_MODEL_FROM_DATABASE=Saffire 6 ++ ++usb:v1235p800A* ++ ID_MODEL_FROM_DATABASE=Scarlett 2i4 ++ ++usb:v1235p800C* ++ ID_MODEL_FROM_DATABASE=Scarlett 18i20 ++ ++usb:v1235p800E* ++ ID_MODEL_FROM_DATABASE=iTrack Solo ++ ++usb:v1235p8010* ++ ID_MODEL_FROM_DATABASE=Forte ++ ++usb:v1235p8012* ++ ID_MODEL_FROM_DATABASE=Scarlett 6i6 ++ ++usb:v1235p8014* ++ ID_MODEL_FROM_DATABASE=Scarlett 18i8 ++ + usb:v1241* + ID_VENDOR_FROM_DATABASE=Belkin + +@@ -40410,7 +41289,7 @@ usb:v1241p1166* + ID_MODEL_FROM_DATABASE=MI-2150 Trust Mouse + + usb:v1241p1177* +- ID_MODEL_FROM_DATABASE=F8E842-DL Mouse ++ ID_MODEL_FROM_DATABASE=Mouse [HT82M21A] + + usb:v1241p1503* + ID_MODEL_FROM_DATABASE=Keyboard +@@ -40463,6 +41342,9 @@ usb:v125Fp312A* + usb:v125Fp312B* + ID_MODEL_FROM_DATABASE=Superior S102 Pro + ++usb:v125FpA22A* ++ ID_MODEL_FROM_DATABASE=DashDrive Elite HE720 500GB ++ + usb:v125FpA91A* + ID_MODEL_FROM_DATABASE=Portable HDD CH91 + +@@ -40478,6 +41360,9 @@ usb:v125FpC93A* + usb:v125FpC96A* + ID_MODEL_FROM_DATABASE=C906 Flash Drive + ++usb:v125FpCB10* ++ ID_MODEL_FROM_DATABASE=Dash Drive UV100 ++ + usb:v1260* + ID_VENDOR_FROM_DATABASE=Standard Microsystems Corp. + +@@ -40637,6 +41522,9 @@ usb:v1283p0150* + usb:v1286* + ID_VENDOR_FROM_DATABASE=Marvell Semiconductor, Inc. + ++usb:v1286p00BC* ++ ID_MODEL_FROM_DATABASE=Marvell JTAG Probe ++ + usb:v1286p1FAB* + ID_MODEL_FROM_DATABASE=88W8338 [Libertas] 802.11g + +@@ -40733,6 +41621,12 @@ usb:v12C4p0006* + usb:v12C4p0008* + ID_MODEL_FROM_DATABASE=Teleprompter Foot Control (v1) + ++usb:v12CF* ++ ID_VENDOR_FROM_DATABASE=DEXIN ++ ++usb:v12CFp0170* ++ ID_MODEL_FROM_DATABASE=Tt eSPORTS BLACK Gaming mouse ++ + usb:v12D1* + ID_VENDOR_FROM_DATABASE=Huawei Technologies Co., Ltd. + +@@ -40802,9 +41696,15 @@ usb:v12D1p14CF* + usb:v12D1p14D1* + ID_MODEL_FROM_DATABASE=K3770 3G Modem (Mass Storage Mode) + ++usb:v12D1p14DB* ++ ID_MODEL_FROM_DATABASE=E353/E3131 ++ + usb:v12D1p14F1* + ID_MODEL_FROM_DATABASE=Gobi 3000 HSPA+ Modem + ++usb:v12D1p14FE* ++ ID_MODEL_FROM_DATABASE=Modem (Mass Storage Mode) ++ + usb:v12D1p1501* + ID_MODEL_FROM_DATABASE=Pulse + +@@ -40826,6 +41726,9 @@ usb:v12D1p1521* + usb:v12D1p155A* + ID_MODEL_FROM_DATABASE=R205 Mobile WiFi (CD-ROM mode) + ++usb:v12D1p1575* ++ ID_MODEL_FROM_DATABASE=K5150 LTE modem ++ + usb:v12D1p1805* + ID_MODEL_FROM_DATABASE=AT&T Go Phone U2800A phone + +@@ -41376,7 +42279,7 @@ usb:v13BA* + ID_VENDOR_FROM_DATABASE=PCPlay + + usb:v13BAp0001* +- ID_MODEL_FROM_DATABASE=König Electronic CMP-KEYPAD12 Numeric Keypad ++ ID_MODEL_FROM_DATABASE=Konig Electronic CMP-KEYPAD12 Numeric Keypad + + usb:v13BAp0017* + ID_MODEL_FROM_DATABASE=PS/2 Keyboard+Mouse Adapter +@@ -44096,6 +44999,9 @@ usb:v1740p9801* + usb:v1743* + ID_VENDOR_FROM_DATABASE=General Atomics + ++usb:v1748* ++ ID_VENDOR_FROM_DATABASE=MQP Electronics ++ + usb:v174C* + ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc. + +@@ -46569,7 +47475,7 @@ usb:v1C7B* + ID_VENDOR_FROM_DATABASE=LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD. + + usb:v1C83* +- ID_VENDOR_FROM_DATABASE=Schomäcker GmbH ++ ID_VENDOR_FROM_DATABASE=Schomaecker GmbH + + usb:v1C83p0001* + ID_MODEL_FROM_DATABASE=RS150 V2 +@@ -47678,6 +48584,12 @@ usb:v2047* + usb:v2047p0200* + ID_MODEL_FROM_DATABASE=MSP430 USB HID Bootstrap Loader + ++usb:v2047p0855* ++ ID_MODEL_FROM_DATABASE=Invensense Embedded MotionApp HID Sensor ++ ++usb:v2047p0964* ++ ID_MODEL_FROM_DATABASE=Inventio Software MSP430 ++ + usb:v2080* + ID_VENDOR_FROM_DATABASE=Barnes & Noble + diff --git a/0399-core-check-the-right-variable-for-failed-open.patch b/0399-core-check-the-right-variable-for-failed-open.patch new file mode 100644 index 0000000..a78f27f --- /dev/null +++ b/0399-core-check-the-right-variable-for-failed-open.patch @@ -0,0 +1,24 @@ +From cb7df46774e97de750e83aeca2d9035f919396f9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= +Date: Thu, 8 May 2014 12:57:26 +0200 +Subject: [PATCH] core: check the right variable for failed open() + +(cherry picked from commit cd7affaeea16d3904354b810a292e594dfef25dd) +(cherry picked from commit d7c1de4f3635830d28d6c61f3d1cae2a9474ffd8) +--- + src/core/cgroup.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/cgroup.c b/src/core/cgroup.c +index 32e2599..c215a86 100644 +--- a/src/core/cgroup.c ++++ b/src/core/cgroup.c +@@ -661,7 +661,7 @@ int manager_setup_cgroup(Manager *m) { + close_nointr_nofail(m->pin_cgroupfs_fd); + + m->pin_cgroupfs_fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY|O_NONBLOCK); +- if (r < 0) { ++ if (m->pin_cgroupfs_fd < 0) { + log_error("Failed to open pin file: %m"); + return -errno; + } diff --git a/0400-man-sd_journal_send-does-nothing-when-journald-is-no.patch b/0400-man-sd_journal_send-does-nothing-when-journald-is-no.patch new file mode 100644 index 0000000..28a6490 --- /dev/null +++ b/0400-man-sd_journal_send-does-nothing-when-journald-is-no.patch @@ -0,0 +1,29 @@ +From 661cb407cce539d71a2d8a3aa9c2c453becb9256 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 9 May 2014 08:39:25 -0400 +Subject: [PATCH] man: sd_journal_send does nothing when journald is not + available + +https://bugzilla.redhat.com/show_bug.cgi?id=1096067 +(cherry picked from commit bdf9fc1a940e342afb7a78075984419cb3bc3135) +(cherry picked from commit 1b616bb22308aafb2a45b7f964cd7d485211b323) +--- + man/sd_journal_print.xml | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/man/sd_journal_print.xml b/man/sd_journal_print.xml +index 871baff..5ae10bf 100644 +--- a/man/sd_journal_print.xml ++++ b/man/sd_journal_print.xml +@@ -218,6 +218,11 @@ sd_journal_send("MESSAGE=Hello World, this is PID %lu!", (unsigned long) getpid( + errno-style error code. The + errno3 + variable itself is not altered. ++ ++ If ++ systemd-journald8 ++ is not running (the socket is not present), those ++ functions do nothing, and also return 0. + + + diff --git a/0401-core-sysvcompat-network-should-be-equivalent-to-netw.patch b/0401-core-sysvcompat-network-should-be-equivalent-to-netw.patch new file mode 100644 index 0000000..eb35df3 --- /dev/null +++ b/0401-core-sysvcompat-network-should-be-equivalent-to-netw.patch @@ -0,0 +1,54 @@ +From 040f67302cea64b294ddfa2c46b7571b202ac16d Mon Sep 17 00:00:00 2001 +From: Tom Gundersen +Date: Mon, 12 May 2014 21:26:54 +0200 +Subject: [PATCH] core: sysvcompat - $network should be equivalent to + network-online, rather than network target +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Most likely the facility needed is actual connectivity, rather than whether or not the +network managment daemon is running. + +We also need to explicitly pull in the network-online.target, as it is not active by +default. + +This means {systemd-networkd,NetworkManager}-wait-online.service, can be enabled by default +as part of network-online.target, and only delay boot when some service actively pulls it in. + +See: + +Cc: Pavel Šimerda +Cc: Michal Sekletar +(cherry picked from commit 0404c609f399b2092a3de52eef9d75b0dc12e94c) +(cherry picked from commit 81d4159e6eadb34c25a5643ad95730da2f6f2d69) +--- + src/core/service.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/core/service.c b/src/core/service.c +index c8dbbef..3bda9a3 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -359,7 +359,7 @@ static int sysv_translate_facility(const char *name, const char *filename, char + static const char * const table[] = { + /* LSB defined facilities */ + "local_fs", NULL, +- "network", SPECIAL_NETWORK_TARGET, ++ "network", SPECIAL_NETWORK_ONLINE_TARGET, + "named", SPECIAL_NSS_LOOKUP_TARGET, + "portmap", SPECIAL_RPCBIND_TARGET, + "remote_fs", SPECIAL_REMOTE_FS_TARGET, +@@ -828,7 +828,11 @@ static int service_load_sysv_path(Service *s, const char *path) { + if (r == 0) + continue; + +- r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true); ++ if (streq(m, SPECIAL_NETWORK_ONLINE_TARGET) && !startswith_no_case(t, "X-Start-Before:")) ++ /* the network-online target is special, as it needs to be actively pulled in */ ++ r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, m, NULL, true); ++ else ++ r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true); + + if (r < 0) + log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s", diff --git a/0402-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch b/0402-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch new file mode 100644 index 0000000..d257b7a --- /dev/null +++ b/0402-udev-do-not-skip-the-execution-of-RUN-when-renaming-.patch @@ -0,0 +1,85 @@ +From d0174817bfe323090264edaa3ef1826c20a67d95 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 14 May 2014 00:34:49 +0200 +Subject: [PATCH] udev: do not skip the execution of RUN when renaming a + network device fails + +(cherry picked from commit 1ea972174baba40dbc80c51cbfc4edc49764b59b) +(cherry picked from commit 59c91436bbadecec9f49dba82735ea1347316c70) +--- + src/test/test-udev.c | 3 +-- + src/udev/udevadm-test.c | 13 +++++-------- + src/udev/udevd.c | 7 +++---- + 3 files changed, 9 insertions(+), 14 deletions(-) + +diff --git a/src/test/test-udev.c b/src/test/test-udev.c +index 676669b..c59aab1 100644 +--- a/src/test/test-udev.c ++++ b/src/test/test-udev.c +@@ -157,8 +157,7 @@ int main(int argc, char *argv[]) + } + + err = udev_event_execute_rules(event, rules, &sigmask_orig); +- if (err == 0) +- udev_event_execute_run(event, NULL); ++ udev_event_execute_run(event, NULL); + out: + if (event != NULL && event->fd_signal >= 0) + close(event->fd_signal); +diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c +index 3aa3274..4610823 100644 +--- a/src/udev/udevadm-test.c ++++ b/src/udev/udevadm-test.c +@@ -42,7 +42,6 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) + struct udev_rules *rules = NULL; + struct udev_list_entry *entry; + sigset_t mask, sigmask_orig; +- int err; + int rc = 0; + + static const struct option options[] = { +@@ -141,18 +140,16 @@ static int adm_test(struct udev *udev, int argc, char *argv[]) + goto out; + } + +- err = udev_event_execute_rules(event, rules, &sigmask_orig); ++ udev_event_execute_rules(event, rules, &sigmask_orig); + + udev_list_entry_foreach(entry, udev_device_get_properties_list_entry(dev)) + printf("%s=%s\n", udev_list_entry_get_name(entry), udev_list_entry_get_value(entry)); + +- if (err == 0) { +- udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { +- char program[UTIL_PATH_SIZE]; ++ udev_list_entry_foreach(entry, udev_list_get_entry(&event->run_list)) { ++ char program[UTIL_PATH_SIZE]; + +- udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); +- printf("run: '%s'\n", program); +- } ++ udev_event_apply_format(event, udev_list_entry_get_name(entry), program, sizeof(program)); ++ printf("run: '%s'\n", program); + } + out: + if (event != NULL && event->fd_signal >= 0) +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 7c6c5d6..5235cbd 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -288,13 +288,12 @@ static void worker_new(struct event *event) + udev_event->exec_delay = exec_delay; + + /* apply rules, create node, symlinks */ +- err = udev_event_execute_rules(udev_event, rules, &sigmask_orig); ++ udev_event_execute_rules(udev_event, rules, &sigmask_orig); + +- if (err == 0) +- udev_event_execute_run(udev_event, &sigmask_orig); ++ udev_event_execute_run(udev_event, &sigmask_orig); + + /* apply/restore inotify watch */ +- if (err == 0 && udev_event->inotify_watch) { ++ if (udev_event->inotify_watch) { + udev_watch_begin(udev, dev); + udev_device_update_db(dev); + } diff --git a/0403-udev-avoid-use-of-uninitialized-err.patch b/0403-udev-avoid-use-of-uninitialized-err.patch new file mode 100644 index 0000000..7d846ad --- /dev/null +++ b/0403-udev-avoid-use-of-uninitialized-err.patch @@ -0,0 +1,32 @@ +From 9d0cd14504aeca13f834d77eb31369c6e681046a Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Fri, 16 May 2014 23:46:48 +0200 +Subject: [PATCH] udev: avoid use of uninitialized err + +After 1ea972174baba40dbc80c51cbfc4edc49764b59b err is no longer +set unless we hit a special case. Initialize it to 0 and remove +a check that will never fail. + +(cherry picked from commit bf9bead187802a52a1f376a03caee762d663e945) + +Conflicts: + src/udev/udevd.c + +(cherry picked from commit 6c160b0f7a5581e2c5ae76f57e9e8a6dd0db0ceb) +--- + src/udev/udevd.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udevd.c b/src/udev/udevd.c +index 5235cbd..bbca5d5 100644 +--- a/src/udev/udevd.c ++++ b/src/udev/udevd.c +@@ -272,7 +272,7 @@ static void worker_new(struct event *event) + for (;;) { + struct udev_event *udev_event; + struct worker_message msg; +- int err; ++ int err = 0; + + log_debug("seq %llu running\n", udev_device_get_seqnum(dev)); + udev_event = udev_event_new(dev); diff --git a/0404-shared-install-do-not-prefix-created-symlink-with-ro.patch b/0404-shared-install-do-not-prefix-created-symlink-with-ro.patch new file mode 100644 index 0000000..42eb5aa --- /dev/null +++ b/0404-shared-install-do-not-prefix-created-symlink-with-ro.patch @@ -0,0 +1,128 @@ +From 668f5eddaa8ca968ad2fdcf5509045b08076a0e4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 21 Apr 2014 19:17:40 -0400 +Subject: [PATCH] shared/install: do not prefix created symlink with root path + +Before: /var/tmp/inst1//etc/systemd/system/default.target -> /var/tmp/inst1//usr/lib/systemd/system/graphical.target +After: /var/tmp/inst1/etc/systemd/system/default.target -> /usr/lib/systemd/system/graphical.target +(cherry picked from commit 62b002337727093c21d020c730bd65971f7783a7) +(cherry picked from commit a49631d0c3f1ba15cc353f09e9fe1af99e14e579) +--- + src/shared/install.c | 89 +++++++++++++++++++++++++--------------------------- + 1 file changed, 43 insertions(+), 46 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index e6a61fa..9f34ac5 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1039,67 +1039,64 @@ static int unit_file_search( + assert(info); + assert(paths); + +- if (info->path) +- return unit_file_load(c, info, info->path, allow_symlink); ++ if (info->path) { ++ char *full_path = NULL; ++ ++ if (!isempty(root_dir)) ++ full_path = strappenda(root_dir, info->path); ++ ++ return unit_file_load(c, info, full_path ?: info->path, allow_symlink); ++ } + + assert(info->name); + + STRV_FOREACH(p, paths->unit_path) { +- char *path = NULL; +- +- if (isempty(root_dir)) +- asprintf(&path, "%s/%s", *p, info->name); +- else +- asprintf(&path, "%s/%s/%s", root_dir, *p, info->name); ++ _cleanup_free_ char *path = NULL, *full_path = NULL; + ++ path = strjoin(*p, "/", info->name, NULL); + if (!path) + return -ENOMEM; + +- r = unit_file_load(c, info, path, allow_symlink); ++ if (!isempty(root_dir)) { ++ full_path = strappend(root_dir, path); ++ if (!full_path) ++ return -ENOMEM; ++ } + +- if (r >= 0) ++ r = unit_file_load(c, info, full_path ?: path, allow_symlink); ++ if (r >= 0) { + info->path = path; +- else { +- if (r == -ENOENT && unit_name_is_instance(info->name)) { +- /* Unit file doesn't exist, however instance enablement was requested. +- * We will check if it is possible to load template unit file. */ +- char *template = NULL, +- *template_path = NULL, +- *template_dir = NULL; +- +- template = unit_name_template(info->name); +- if (!template) { +- free(path); +- return -ENOMEM; +- } ++ path = NULL; ++ } else if (r == -ENOENT && unit_name_is_instance(info->name)) { ++ /* Unit file doesn't exist, however instance enablement was requested. ++ * We will check if it is possible to load template unit file. */ ++ _cleanup_free_ char *template = NULL, *template_dir = NULL; ++ ++ template = unit_name_template(info->name); ++ if (!template) ++ return -ENOMEM; + +- /* We will reuse path variable since we don't need it anymore. */ +- template_dir = path; +- *(strrchr(path, '/') + 1) = '\0'; ++ /* We will reuse path variable since we don't need it anymore. */ ++ template_dir = path; ++ *(strrchr(template_dir, '/') + 1) = '\0'; + +- template_path = strjoin(template_dir, template, NULL); +- if (!template_path) { +- free(path); +- free(template); +- return -ENOMEM; +- } ++ path = strappend(template_dir, template); ++ if (!path) ++ return -ENOMEM; + +- /* Let's try to load template unit. */ +- r = unit_file_load(c, info, template_path, allow_symlink); +- if (r >= 0) { +- info->path = strdup(template_path); +- if (!info->path) { +- free(path); +- free(template); +- free(template_path); +- return -ENOMEM; +- } +- } ++ if (!isempty(root_dir)) { ++ free(full_path); ++ full_path = strappend(root_dir, path); ++ if (!full_path) ++ return -ENOMEM; ++ } + +- free(template); +- free(template_path); ++ /* Let's try to load template unit. */ ++ r = unit_file_load(c, info, full_path ?: path, allow_symlink); ++ if (r >= 0) { ++ info->path = path; ++ path = NULL; + } +- free(path); + } + + if (r != -ENOENT && r != -ELOOP) diff --git a/0405-shared-include-root-when-canonicalizing-conf-paths.patch b/0405-shared-include-root-when-canonicalizing-conf-paths.patch new file mode 100644 index 0000000..52c59b2 --- /dev/null +++ b/0405-shared-include-root-when-canonicalizing-conf-paths.patch @@ -0,0 +1,195 @@ +From e15e123cb7692aa16825630cd4315a85b8197b74 Mon Sep 17 00:00:00 2001 +From: Michael Marineau +Date: Fri, 31 Jan 2014 15:35:04 -0800 +Subject: [PATCH] shared: include root when canonicalizing conf paths + +The conf_files_list family accepts an alternate root path to prefix all +directories in the list but path_strv_canonicalize_uniq doesn't use it. +This results in the suspicious behavior of resolving directory symlinks +based on the contents of / instead of the alternate root. + +This adds a prefix argument to path_strv_canonicalize which will now +prepend the prefix, if given, to every path in the list. To avoid +answering what a relative path means when called with a root prefix +path_strv_canonicalize is now path_strv_canonicalize_absolute and only +considers absolute paths. Fortunately all users of already call +path_strv_canonicalize with a list of absolute paths. + +(cherry picked from commit 112cfb181453e38d3ef4a74fba23abbb53392002) +--- + src/shared/conf-files.c | 10 +++------- + src/shared/path-lookup.c | 6 +++--- + src/shared/path-util.c | 29 +++++++++++++++++++---------- + src/shared/path-util.h | 4 ++-- + src/shared/util.c | 2 +- + src/udev/udev-rules.c | 2 +- + 6 files changed, 29 insertions(+), 24 deletions(-) + +diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c +index ed4070c..3d5b1df 100644 +--- a/src/shared/conf-files.c ++++ b/src/shared/conf-files.c +@@ -37,12 +37,8 @@ + #include "hashmap.h" + #include "conf-files.h" + +-static int files_add(Hashmap *h, const char *root, const char *path, const char *suffix) { ++static int files_add(Hashmap *h, const char *dirpath, const char *suffix) { + _cleanup_closedir_ DIR *dir = NULL; +- _cleanup_free_ char *dirpath = NULL; +- +- if (asprintf(&dirpath, "%s%s", root ? root : "", path) < 0) +- return -ENOMEM; + + dir = opendir(dirpath); + if (!dir) { +@@ -104,7 +100,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const + assert(suffix); + + /* This alters the dirs string array */ +- if (!path_strv_canonicalize_uniq(dirs)) ++ if (!path_strv_canonicalize_absolute_uniq(dirs, root)) + return -ENOMEM; + + fh = hashmap_new(string_hash_func, string_compare_func); +@@ -112,7 +108,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const + return -ENOMEM; + + STRV_FOREACH(p, dirs) { +- r = files_add(fh, root, *p, suffix); ++ r = files_add(fh, *p, suffix); + if (r == -ENOMEM) { + hashmap_free_free(fh); + return r; +diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c +index 1a47ea9..03c1380 100644 +--- a/src/shared/path-lookup.c ++++ b/src/shared/path-lookup.c +@@ -316,7 +316,7 @@ int lookup_paths_init( + } + } + +- if (!path_strv_canonicalize(p->unit_path)) ++ if (!path_strv_canonicalize_absolute(p->unit_path, NULL)) + return -ENOMEM; + + strv_uniq(p->unit_path); +@@ -372,10 +372,10 @@ int lookup_paths_init( + return -ENOMEM; + } + +- if (!path_strv_canonicalize(p->sysvinit_path)) ++ if (!path_strv_canonicalize_absolute(p->sysvinit_path, NULL)) + return -ENOMEM; + +- if (!path_strv_canonicalize(p->sysvrcnd_path)) ++ if (!path_strv_canonicalize_absolute(p->sysvrcnd_path, NULL)) + return -ENOMEM; + + strv_uniq(p->sysvinit_path); +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index d8c14e8..36542cd 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -165,7 +165,7 @@ char **path_strv_make_absolute_cwd(char **l) { + return l; + } + +-char **path_strv_canonicalize(char **l) { ++char **path_strv_canonicalize_absolute(char **l, const char *prefix) { + char **s; + unsigned k = 0; + bool enomem = false; +@@ -180,13 +180,21 @@ char **path_strv_canonicalize(char **l) { + STRV_FOREACH(s, l) { + char *t, *u; + +- t = path_make_absolute_cwd(*s); +- free(*s); +- *s = NULL; +- +- if (!t) { +- enomem = true; ++ if (!path_is_absolute(*s)) + continue; ++ ++ if (prefix) { ++ t = strappend(prefix, *s); ++ free(*s); ++ *s = NULL; ++ ++ if (!t) { ++ enomem = true; ++ continue; ++ } ++ } else { ++ t = *s; ++ *s = NULL; + } + + errno = 0; +@@ -196,7 +204,7 @@ char **path_strv_canonicalize(char **l) { + u = t; + else { + free(t); +- if (errno == ENOMEM || !errno) ++ if (errno == ENOMEM || errno == 0) + enomem = true; + + continue; +@@ -215,11 +223,12 @@ char **path_strv_canonicalize(char **l) { + return l; + } + +-char **path_strv_canonicalize_uniq(char **l) { ++char **path_strv_canonicalize_absolute_uniq(char **l, const char *prefix) { ++ + if (strv_isempty(l)) + return l; + +- if (!path_strv_canonicalize(l)) ++ if (!path_strv_canonicalize_absolute(l, prefix)) + return NULL; + + return strv_uniq(l); +diff --git a/src/shared/path-util.h b/src/shared/path-util.h +index 1e58e1b..f867ab6 100644 +--- a/src/shared/path-util.h ++++ b/src/shared/path-util.h +@@ -46,8 +46,8 @@ char* path_startswith(const char *path, const char *prefix) _pure_; + bool path_equal(const char *a, const char *b) _pure_; + + char** path_strv_make_absolute_cwd(char **l); +-char** path_strv_canonicalize(char **l); +-char** path_strv_canonicalize_uniq(char **l); ++char** path_strv_canonicalize_absolute(char **l, const char *prefix); ++char** path_strv_canonicalize_absolute_uniq(char **l, const char *prefix); + + int path_is_mount_point(const char *path, bool allow_symlink); + int path_is_read_only_fs(const char *path); +diff --git a/src/shared/util.c b/src/shared/util.c +index 617c3ac..533db92 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -5704,7 +5704,7 @@ static int search_and_fopen_internal(const char *path, const char *mode, char ** + assert(mode); + assert(_f); + +- if (!path_strv_canonicalize_uniq(search)) ++ if (!path_strv_canonicalize_absolute_uniq(search, NULL)) + return -ENOMEM; + + STRV_FOREACH(i, search) { +diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c +index 366d870..7e6db81 100644 +--- a/src/udev/udev-rules.c ++++ b/src/udev/udev-rules.c +@@ -1628,7 +1628,7 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names) + log_error("failed to build config directory array"); + return udev_rules_unref(rules); + } +- if (!path_strv_canonicalize(rules->dirs)) { ++ if (!path_strv_canonicalize_absolute(rules->dirs, NULL)) { + log_error("failed to canonicalize config directories\n"); + return udev_rules_unref(rules); + } diff --git a/0406-Make-systemctl-root-look-for-files-in-the-proper-pla.patch b/0406-Make-systemctl-root-look-for-files-in-the-proper-pla.patch new file mode 100644 index 0000000..f5f7d10 --- /dev/null +++ b/0406-Make-systemctl-root-look-for-files-in-the-proper-pla.patch @@ -0,0 +1,343 @@ +From 635fe81b0ad6d217e2b16e1c05adef8934ecd3de Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 24 Apr 2014 01:44:10 -0400 +Subject: [PATCH] Make systemctl --root look for files in the proper places + +Running systemctl enable/disable/set-default/... with the --root +option under strace reveals that it accessed various files and +directories in the main fs, and not underneath the specified root. +This can lead to correct results only when the layout and +configuration in the container are identical, which often is not the +case. Fix this by adding the specified root to all file access +operations. + +This patch does not handle some corner cases: symlinks which point +outside of the specified root might be interpreted differently than +they would be by the kernel if the specified root was the real root. +But systemctl does not create such symlinks by itself, and I think +this is enough of a corner case not to be worth the additional +complexity of reimplementing link chasing in systemd. + +Also, simplify the code in a few places and remove an hypothetical +memory leak on error. + +(cherry picked from commit 12ed81d9c88406234c20e9261ae8c8b992d8bc4d) + +Conflicts: + TODO + +(cherry picked from commit fd516dfa0612d2a169158bbed6f8994f47f3e6ce) + +Conflicts: + src/shared/install.c +--- + src/core/manager.c | 2 ++ + src/shared/install.c | 34 +++++++++++++++++++++----------- + src/shared/path-lookup.c | 12 ++++-------- + src/shared/path-lookup.h | 8 +++++++- + src/shared/path-util.c | 49 ++++++++++++++++++++++++++++++++++++----------- + src/systemctl/systemctl.c | 2 +- + 6 files changed, 75 insertions(+), 32 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 28f4d72..1baa863 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -890,6 +890,7 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { + + r = lookup_paths_init( + &m->lookup_paths, m->running_as, true, ++ NULL, + m->generator_unit_path, + m->generator_unit_path_early, + m->generator_unit_path_late); +@@ -2390,6 +2391,7 @@ int manager_reload(Manager *m) { + + q = lookup_paths_init( + &m->lookup_paths, m->running_as, true, ++ NULL, + m->generator_unit_path, + m->generator_unit_path_early, + m->generator_unit_path_late); +diff --git a/src/shared/install.c b/src/shared/install.c +index 9f34ac5..cb07947 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -47,7 +47,9 @@ typedef struct { + #define _cleanup_lookup_paths_free_ _cleanup_(lookup_paths_free) + #define _cleanup_install_context_done_ _cleanup_(install_context_done) + +-static int lookup_paths_init_from_scope(LookupPaths *paths, UnitFileScope scope) { ++static int lookup_paths_init_from_scope(LookupPaths *paths, ++ UnitFileScope scope, ++ const char *root_dir) { + assert(paths); + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); +@@ -57,6 +59,7 @@ static int lookup_paths_init_from_scope(LookupPaths *paths, UnitFileScope scope) + return lookup_paths_init(paths, + scope == UNIT_FILE_SYSTEM ? SYSTEMD_SYSTEM : SYSTEMD_USER, + scope == UNIT_FILE_USER, ++ root_dir, + NULL, NULL, NULL); + } + +@@ -705,7 +708,7 @@ int unit_file_link( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1475,7 +1478,7 @@ int unit_file_enable( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1515,7 +1518,7 @@ int unit_file_disable( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1577,7 +1580,7 @@ int unit_file_set_default( + if (unit_name_to_type(file) != UNIT_TARGET) + return -EINVAL; + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1612,7 +1615,11 @@ int unit_file_get_default( + char **p; + int r; + +- r = lookup_paths_init_from_scope(&paths, scope); ++ assert(scope >= 0); ++ assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(name); ++ ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1664,12 +1671,13 @@ UnitFileState unit_file_get_state( + if (!unit_name_is_valid(name, true)) + return -EINVAL; + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + + STRV_FOREACH(i, paths.unit_path) { + struct stat st; ++ char *partial; + + free(path); + path = NULL; +@@ -1678,10 +1686,14 @@ UnitFileState unit_file_get_state( + asprintf(&path, "%s/%s/%s", root_dir, *i, name); + else + asprintf(&path, "%s/%s", *i, name); +- + if (!path) + return -ENOMEM; + ++ if (root_dir) ++ partial = path + strlen(root_dir) + 1; ++ else ++ partial = path; ++ + /* + * Search for a unit file in our default paths, to + * be sure, that there are no broken symlinks. +@@ -1713,7 +1725,7 @@ UnitFileState unit_file_get_state( + else if (r > 0) + return state; + +- r = unit_file_can_install(&paths, root_dir, path, true); ++ r = unit_file_can_install(&paths, root_dir, partial, true); + if (r < 0 && errno != ENOENT) + return r; + else if (r > 0) +@@ -1821,7 +1833,7 @@ int unit_file_preset( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +@@ -1890,7 +1902,7 @@ int unit_file_get_list( + if (root_dir && scope != UNIT_FILE_SYSTEM) + return -EINVAL; + +- r = lookup_paths_init_from_scope(&paths, scope); ++ r = lookup_paths_init_from_scope(&paths, scope, root_dir); + if (r < 0) + return r; + +diff --git a/src/shared/path-lookup.c b/src/shared/path-lookup.c +index 03c1380..b62f302 100644 +--- a/src/shared/path-lookup.c ++++ b/src/shared/path-lookup.c +@@ -239,6 +239,7 @@ int lookup_paths_init( + LookupPaths *p, + SystemdRunningAs running_as, + bool personal, ++ const char *root_dir, + const char *generator, + const char *generator_early, + const char *generator_late) { +@@ -316,11 +317,9 @@ int lookup_paths_init( + } + } + +- if (!path_strv_canonicalize_absolute(p->unit_path, NULL)) ++ if (!path_strv_canonicalize_absolute_uniq(p->unit_path, root_dir)) + return -ENOMEM; + +- strv_uniq(p->unit_path); +- + if (!strv_isempty(p->unit_path)) { + _cleanup_free_ char *t = strv_join(p->unit_path, "\n\t"); + if (!t) +@@ -372,15 +371,12 @@ int lookup_paths_init( + return -ENOMEM; + } + +- if (!path_strv_canonicalize_absolute(p->sysvinit_path, NULL)) ++ if (!path_strv_canonicalize_absolute_uniq(p->sysvinit_path, root_dir)) + return -ENOMEM; + +- if (!path_strv_canonicalize_absolute(p->sysvrcnd_path, NULL)) ++ if (!path_strv_canonicalize_absolute_uniq(p->sysvrcnd_path, root_dir)) + return -ENOMEM; + +- strv_uniq(p->sysvinit_path); +- strv_uniq(p->sysvrcnd_path); +- + if (!strv_isempty(p->sysvinit_path)) { + _cleanup_free_ char *t = strv_join(p->sysvinit_path, "\n\t"); + if (!t) +diff --git a/src/shared/path-lookup.h b/src/shared/path-lookup.h +index 9dee85f..0db9bfb 100644 +--- a/src/shared/path-lookup.h ++++ b/src/shared/path-lookup.h +@@ -41,5 +41,11 @@ SystemdRunningAs systemd_running_as_from_string(const char *s) _pure_; + + int user_config_home(char **config_home); + +-int lookup_paths_init(LookupPaths *p, SystemdRunningAs running_as, bool personal, const char *generator, const char *generator_early, const char *generator_late); ++int lookup_paths_init(LookupPaths *p, ++ SystemdRunningAs running_as, ++ bool personal, ++ const char *root_dir, ++ const char *generator, ++ const char *generator_early, ++ const char *generator_late); + void lookup_paths_free(LookupPaths *p); +diff --git a/src/shared/path-util.c b/src/shared/path-util.c +index 36542cd..5c0bf93 100644 +--- a/src/shared/path-util.c ++++ b/src/shared/path-util.c +@@ -179,36 +179,63 @@ char **path_strv_canonicalize_absolute(char **l, const char *prefix) { + + STRV_FOREACH(s, l) { + char *t, *u; ++ _cleanup_free_ char *orig = NULL; + +- if (!path_is_absolute(*s)) ++ if (!path_is_absolute(*s)) { ++ free(*s); + continue; ++ } + + if (prefix) { +- t = strappend(prefix, *s); +- free(*s); +- *s = NULL; +- ++ orig = *s; ++ t = strappend(prefix, orig); + if (!t) { + enomem = true; + continue; + } +- } else { ++ } else + t = *s; +- *s = NULL; +- } + + errno = 0; + u = canonicalize_file_name(t); + if (!u) { +- if (errno == ENOENT) +- u = t; +- else { ++ if (errno == ENOENT) { ++ if (prefix) { ++ u = orig; ++ orig = NULL; ++ free(t); ++ } else ++ u = t; ++ } else { + free(t); + if (errno == ENOMEM || errno == 0) + enomem = true; + + continue; + } ++ } else if (prefix) { ++ char *x; ++ ++ free(t); ++ x = path_startswith(u, prefix); ++ if (x) { ++ /* restore the slash if it was lost */ ++ if (!startswith(x, "/")) ++ *(--x) = '/'; ++ ++ t = strdup(x); ++ free(u); ++ if (!t) { ++ enomem = true; ++ continue; ++ } ++ u = t; ++ } else { ++ /* canonicalized path goes outside of ++ * prefix, keep the original path instead */ ++ u = orig; ++ orig = NULL; ++ } + } else + free(t); + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index da49da7..517257b 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -4239,7 +4239,7 @@ static int enable_sysv_units(const char *verb, char **args) { + /* Processes all SysV units, and reshuffles the array so that + * afterwards only the native units remain */ + +- r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, NULL, NULL, NULL); ++ r = lookup_paths_init(&paths, SYSTEMD_SYSTEM, false, arg_root, NULL, NULL, NULL); + if (r < 0) + return r; + diff --git a/0407-util-replace-close_nointr_nofail-by-a-more-useful-sa.patch b/0407-util-replace-close_nointr_nofail-by-a-more-useful-sa.patch new file mode 100644 index 0000000..ac0b44b --- /dev/null +++ b/0407-util-replace-close_nointr_nofail-by-a-more-useful-sa.patch @@ -0,0 +1,2841 @@ +From 458383b9b0bc37dfc357b18cc88cb2ee7852ee90 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 18 Mar 2014 19:22:43 +0100 +Subject: [PATCH] util: replace close_nointr_nofail() by a more useful + safe_close() + +safe_close() automatically becomes a NOP when a negative fd is passed, +and returns -1 unconditionally. This makes it easy to write lines like +this: + + fd = safe_close(fd); + +Which will close an fd if it is open, and reset the fd variable +correctly. + +By making use of this new scheme we can drop a > 200 lines of code that +was required to test for non-negative fds or to reset the closed fd +variable afterwards. + +(cherry-picked from commit 03e334a1c7dc8c20c38902aa039440763acc9b17) + +(cherry picked from commit 4529ad1defde79e74797b494ab3ac924ce06ff2a) + +Conflicts: + src/core/automount.c + src/core/busname.c + src/core/dbus.c + src/core/execute.c + src/core/manager.c + src/core/path.c + src/core/socket.c + src/journal/journalctl.c + src/journal/journald-console.c + src/journal/journald-kmsg.c + src/journal/journald-server.c + src/journal/journald-stream.c + src/libsystemd-dhcp/dhcp-network.c + src/libsystemd-dhcp/sd-dhcp-client.c + src/libsystemd/sd-bus/bus-container.c + src/libsystemd/sd-bus/bus-kernel.c + src/libsystemd/sd-bus/bus-message.c + src/libsystemd/sd-bus/sd-bus.c + src/libsystemd/sd-bus/sd-memfd.c + src/libsystemd/sd-event/sd-event.c + src/libsystemd/sd-resolve/sd-resolve.c + src/libsystemd/sd-rtnl/sd-rtnl.c + src/login/logind-inhibit.c + src/login/logind-session.c + src/login/pam-module.c + src/machine/machinectl.c + src/nspawn/nspawn.c + src/shared/logs-show.c + src/shared/util.c + src/socket-proxy/socket-proxyd.c + src/udev/net/link-config.c +--- + src/core/audit-fd.c | 2 +- + src/core/automount.c | 40 ++++------- + src/core/cgroup.c | 8 +-- + src/core/dbus.c | 10 ++- + src/core/execute.c | 48 +++++-------- + src/core/ima-setup.c | 6 +- + src/core/job.c | 7 +- + src/core/load-fragment.c | 2 +- + src/core/machine-id-setup.c | 7 +- + src/core/main.c | 2 +- + src/core/manager.c | 32 ++++----- + src/core/path.c | 4 +- + src/core/service.c | 6 +- + src/core/smack-setup.c | 2 +- + src/core/socket.c | 41 ++++------- + src/core/switch-root.c | 35 +++------ + src/core/umount.c | 8 +-- + src/core/unit.c | 4 +- + src/fsck/fsck.c | 9 +-- + src/initctl/initctl.c | 5 +- + src/journal/cat.c | 9 +-- + src/journal/catalog.c | 8 +-- + src/journal/coredumpctl.c | 3 +- + src/journal/journal-authenticate.c | 5 +- + src/journal/journal-file.c | 4 +- + src/journal/journal-send.c | 16 ++--- + src/journal/journal-verify.c | 12 ++-- + src/journal/journalctl.c | 5 +- + src/journal/journald-console.c | 2 +- + src/journal/journald-kmsg.c | 5 +- + src/journal/journald-server.c | 27 ++----- + src/journal/journald-stream.c | 6 +- + src/journal/sd-journal.c | 3 +- + src/journal/test-journal-verify.c | 2 +- + src/journal/test-mmap-cache.c | 6 +- + src/libsystemd-bus/bus-kernel.c | 6 +- + src/libsystemd-bus/bus-message.c | 5 +- + src/libsystemd-bus/bus-socket.c | 4 +- + src/libsystemd-bus/sd-bus.c | 4 +- + src/libsystemd-bus/sd-memfd.c | 2 +- + src/libsystemd-bus/test-bus-chat.c | 2 +- + src/libsystemd-bus/test-bus-kernel-benchmark.c | 2 +- + src/libsystemd-bus/test-bus-kernel.c | 6 +- + src/login/inhibit.c | 2 +- + src/login/logind-button.c | 2 +- + src/login/logind-core.c | 2 +- + src/login/logind-dbus.c | 5 +- + src/login/logind-inhibit.c | 6 +- + src/login/logind-seat.c | 3 +- + src/login/logind-session.c | 7 +- + src/login/logind.c | 23 ++---- + src/login/pam-module.c | 3 +- + src/login/sd-login.c | 8 +-- + src/login/test-inhibit.c | 4 +- + src/machine/machined.c | 7 +- + src/nspawn/nspawn.c | 27 ++++--- + src/readahead/readahead-collect.c | 22 ++---- + src/readahead/readahead-common.c | 2 +- + src/readahead/readahead-replay.c | 18 ++--- + src/reply-password/reply-password.c | 6 +- + src/shared/ask-password-api.c | 17 ++--- + src/shared/dbus-loop.c | 12 ++-- + src/shared/fdset.c | 2 +- + src/shared/hwclock.c | 4 +- + src/shared/install.c | 12 ++-- + src/shared/log.c | 25 ++----- + src/shared/socket-label.c | 2 +- + src/shared/spawn-polkit-agent.c | 4 +- + src/shared/util.c | 82 +++++++++++----------- + src/shared/util.h | 6 +- + src/shared/watchdog.c | 3 +- + src/shutdownd/shutdownd.c | 3 +- + src/test/test-util.c | 2 +- + src/tmpfiles/tmpfiles.c | 6 +- + .../tty-ask-password-agent.c | 25 +++---- + src/vconsole/vconsole-setup.c | 3 +- + 76 files changed, 296 insertions(+), 481 deletions(-) + +diff --git a/src/core/audit-fd.c b/src/core/audit-fd.c +index 5955bd8..4326d17 100644 +--- a/src/core/audit-fd.c ++++ b/src/core/audit-fd.c +@@ -55,7 +55,7 @@ int get_audit_fd(void) { + void close_audit_fd(void) { + + if (initialized && audit_fd >= 0) +- close_nointr_nofail(audit_fd); ++ safe_close(audit_fd); + + initialized = true; + audit_fd = -ECONNRESET; +diff --git a/src/core/automount.c b/src/core/automount.c +index 203104e..4c753de 100644 +--- a/src/core/automount.c ++++ b/src/core/automount.c +@@ -92,8 +92,7 @@ static void unmount_autofs(Automount *a) { + automount_send_ready(a, -EHOSTDOWN); + + unit_unwatch_fd(UNIT(a), &a->pipe_watch); +- close_nointr_nofail(a->pipe_fd); +- a->pipe_fd = -1; ++ a->pipe_fd = safe_close(a->pipe_fd); + + /* If we reload/reexecute things we keep the mount point + * around */ +@@ -311,8 +310,7 @@ static int open_dev_autofs(Manager *m) { + + init_autofs_dev_ioctl(¶m); + if (ioctl(m->dev_autofs_fd, AUTOFS_DEV_IOCTL_VERSION, ¶m) < 0) { +- close_nointr_nofail(m->dev_autofs_fd); +- m->dev_autofs_fd = -1; ++ m->dev_autofs_fd = safe_close(m->dev_autofs_fd); + return -errno; + } + +@@ -412,8 +410,9 @@ static int autofs_send_ready(int dev_autofs_fd, int ioctl_fd, uint32_t token, in + } + + int automount_send_ready(Automount *a, int status) { +- int ioctl_fd, r; ++ _cleanup_close_ int ioctl_fd = -1; + unsigned token; ++ int r; + + assert(a); + assert(status <= 0); +@@ -422,10 +421,8 @@ int automount_send_ready(Automount *a, int status) { + return 0; + + ioctl_fd = open_ioctl_fd(UNIT(a)->manager->dev_autofs_fd, a->where, a->dev_id); +- if (ioctl_fd < 0) { +- r = ioctl_fd; +- goto fail; +- } ++ if (ioctl_fd < 0) ++ return ioctl_fd; + + if (status) + log_debug_unit(UNIT(a)->id, "Sending failure: %s", strerror(-status)); +@@ -451,18 +448,15 @@ int automount_send_ready(Automount *a, int status) { + r = k; + } + +-fail: +- if (ioctl_fd >= 0) +- close_nointr_nofail(ioctl_fd); +- + return r; + } + + static void automount_enter_waiting(Automount *a) { ++ _cleanup_close_ int ioctl_fd = -1; + int p[2] = { -1, -1 }; + char name[32], options[128]; + bool mounted = false; +- int r, ioctl_fd = -1, dev_autofs_fd; ++ int r, dev_autofs_fd; + struct stat st; + + assert(a); +@@ -501,8 +495,7 @@ static void automount_enter_waiting(Automount *a) { + + mounted = true; + +- close_nointr_nofail(p[1]); +- p[1] = -1; ++ p[1] = safe_close(p[1]); + + if (stat(a->where, &st) < 0) { + r = -errno; +@@ -529,8 +522,7 @@ static void automount_enter_waiting(Automount *a) { + * the direct mount will not receive events from the + * kernel. */ + +- close_nointr_nofail(ioctl_fd); +- ioctl_fd = -1; ++ ioctl_fd = safe_close(ioctl_fd); + + r = unit_watch_fd(UNIT(a), p[0], EPOLLIN, &a->pipe_watch); + if (r < 0) +@@ -544,10 +536,7 @@ static void automount_enter_waiting(Automount *a) { + return; + + fail: +- assert_se(close_pipe(p) == 0); +- +- if (ioctl_fd >= 0) +- close_nointr_nofail(ioctl_fd); ++ close_pipe(p); + + if (mounted) + repeat_unmount(a->where); +@@ -716,9 +705,7 @@ static int automount_deserialize_item(Unit *u, const char *key, const char *valu + if (safe_atoi(value, &fd) < 0 || fd < 0 || !fdset_contains(fds, fd)) + log_debug_unit(u->id, "Failed to parse pipe-fd value %s", value); + else { +- if (a->pipe_fd >= 0) +- close_nointr_nofail(a->pipe_fd); +- ++ safe_close(a->pipe_fd); + a->pipe_fd = fdset_remove(fds, fd); + } + } else +@@ -811,8 +798,7 @@ fail: + static void automount_shutdown(Manager *m) { + assert(m); + +- if (m->dev_autofs_fd >= 0) +- close_nointr_nofail(m->dev_autofs_fd); ++ m->dev_autofs_fd = safe_close(m->dev_autofs_fd); + } + + static void automount_reset_failed(Unit *u) { +diff --git a/src/core/cgroup.c b/src/core/cgroup.c +index c215a86..9e46304 100644 +--- a/src/core/cgroup.c ++++ b/src/core/cgroup.c +@@ -657,8 +657,7 @@ int manager_setup_cgroup(Manager *m) { + } + + /* 5. And pin it, so that it cannot be unmounted */ +- if (m->pin_cgroupfs_fd >= 0) +- close_nointr_nofail(m->pin_cgroupfs_fd); ++ safe_close(m->pin_cgroupfs_fd); + + m->pin_cgroupfs_fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY|O_NONBLOCK); + if (m->pin_cgroupfs_fd < 0) { +@@ -683,10 +682,7 @@ void manager_shutdown_cgroup(Manager *m, bool delete) { + if (delete && m->cgroup_root) + cg_trim(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, false); + +- if (m->pin_cgroupfs_fd >= 0) { +- close_nointr_nofail(m->pin_cgroupfs_fd); +- m->pin_cgroupfs_fd = -1; +- } ++ m->pin_cgroupfs_fd = safe_close(m->pin_cgroupfs_fd); + + free(m->cgroup_root); + m->cgroup_root = NULL; +diff --git a/src/core/dbus.c b/src/core/dbus.c +index aa3d93b..b616a24 100644 +--- a/src/core/dbus.c ++++ b/src/core/dbus.c +@@ -147,7 +147,7 @@ static dbus_bool_t bus_add_watch(DBusWatch *bus_watch, void *data) { + } + + if (epoll_ctl(m->epoll_fd, EPOLL_CTL_ADD, w->fd, &ev) < 0) { +- close_nointr_nofail(w->fd); ++ safe_close(w->fd); + free(w); + return FALSE; + } +@@ -174,8 +174,7 @@ static void bus_remove_watch(DBusWatch *bus_watch, void *data) { + assert(w->type == WATCH_DBUS_WATCH); + assert_se(epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, w->fd, NULL) >= 0); + +- if (w->fd_is_dupped) +- close_nointr_nofail(w->fd); ++ safe_close(w->fd); + + free(w); + } +@@ -263,8 +262,7 @@ static dbus_bool_t bus_add_timeout(DBusTimeout *timeout, void *data) { + return TRUE; + + fail: +- if (w->fd >= 0) +- close_nointr_nofail(w->fd); ++ safe_close(w->fd); + + free(w); + return FALSE; +@@ -284,7 +282,7 @@ static void bus_remove_timeout(DBusTimeout *timeout, void *data) { + assert(w->type == WATCH_DBUS_TIMEOUT); + + assert_se(epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, w->fd, NULL) >= 0); +- close_nointr_nofail(w->fd); ++ safe_close(w->fd); + free(w); + } + +diff --git a/src/core/execute.c b/src/core/execute.c +index ee445d7..3d3e8e6 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -103,7 +103,7 @@ static int shift_fds(int fds[], unsigned n_fds) { + if ((nfd = fcntl(fds[i], F_DUPFD, i+3)) < 0) + return -errno; + +- close_nointr_nofail(fds[i]); ++ safe_close(fds[i]); + fds[i] = nfd; + + /* Hmm, the fd we wanted isn't free? Then +@@ -200,7 +200,7 @@ static int open_null_as(int flags, int nfd) { + + if (fd != nfd) { + r = dup2(fd, nfd) < 0 ? -errno : nfd; +- close_nointr_nofail(fd); ++ safe_close(fd); + } else + r = nfd; + +@@ -225,12 +225,12 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons + + r = connect(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + + if (shutdown(fd, SHUT_RD) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -254,7 +254,7 @@ static int connect_logger_as(const ExecContext *context, ExecOutput output, cons + + if (fd != nfd) { + r = dup2(fd, nfd) < 0 ? -errno : nfd; +- close_nointr_nofail(fd); ++ safe_close(fd); + } else + r = nfd; + +@@ -271,7 +271,7 @@ static int open_terminal_as(const char *path, mode_t mode, int nfd) { + + if (fd != nfd) { + r = dup2(fd, nfd) < 0 ? -errno : nfd; +- close_nointr_nofail(fd); ++ safe_close(fd); + } else + r = nfd; + +@@ -331,7 +331,7 @@ static int setup_input(const ExecContext *context, int socket_fd, bool apply_tty + + if (fd != STDIN_FILENO) { + r = dup2(fd, STDIN_FILENO) < 0 ? -errno : STDIN_FILENO; +- close_nointr_nofail(fd); ++ safe_close(fd); + } else + r = STDIN_FILENO; + +@@ -495,7 +495,7 @@ static int setup_confirm_stdio(int *_saved_stdin, + } + + if (fd >= 2) +- close_nointr_nofail(fd); ++ safe_close(fd); + + *_saved_stdin = saved_stdin; + *_saved_stdout = saved_stdout; +@@ -503,14 +503,9 @@ static int setup_confirm_stdio(int *_saved_stdin, + return 0; + + fail: +- if (saved_stdout >= 0) +- close_nointr_nofail(saved_stdout); +- +- if (saved_stdin >= 0) +- close_nointr_nofail(saved_stdin); +- +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(saved_stdout); ++ safe_close(saved_stdin); ++ safe_close(fd); + + return r; + } +@@ -529,8 +524,6 @@ _printf_attr_(1, 2) static int write_confirm_message(const char *format, ...) { + vdprintf(fd, format, ap); + va_end(ap); + +- close_nointr_nofail(fd); +- + return 0; + } + +@@ -552,11 +545,8 @@ static int restore_confirm_stdio(int *saved_stdin, + if (dup2(*saved_stdout, STDOUT_FILENO) < 0) + r = -errno; + +- if (*saved_stdin >= 0) +- close_nointr_nofail(*saved_stdin); +- +- if (*saved_stdout >= 0) +- close_nointr_nofail(*saved_stdout); ++ safe_close(*saved_stdin); ++ safe_close(*saved_stdout); + + return r; + } +@@ -1002,10 +992,9 @@ static int apply_seccomp(uint32_t *syscall_filter) { + static void do_idle_pipe_dance(int idle_pipe[4]) { + assert(idle_pipe); + +- if (idle_pipe[1] >= 0) +- close_nointr_nofail(idle_pipe[1]); +- if (idle_pipe[2] >= 0) +- close_nointr_nofail(idle_pipe[2]); ++ ++ safe_close(idle_pipe[1]); ++ safe_close(idle_pipe[2]); + + if (idle_pipe[0] >= 0) { + int r; +@@ -1020,12 +1009,11 @@ static void do_idle_pipe_dance(int idle_pipe[4]) { + fd_wait_for_event(idle_pipe[0], POLLHUP, IDLE_TIMEOUT2_USEC); + } + +- close_nointr_nofail(idle_pipe[0]); ++ safe_close(idle_pipe[0]); + + } + +- if (idle_pipe[3] >= 0) +- close_nointr_nofail(idle_pipe[3]); ++ safe_close(idle_pipe[3]); + } + + int exec_spawn(ExecCommand *command, +diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c +index 7f8ec23..ed65096 100644 +--- a/src/core/ima-setup.c ++++ b/src/core/ima-setup.c +@@ -47,7 +47,7 @@ int ima_setup(void) { + struct stat st; + ssize_t policy_size = 0, written = 0; + char *policy; +- int policyfd = -1, imafd = -1; ++ _cleanup_close_ int policyfd = -1, imafd = -1; + int result = 0; + + if (stat(IMA_POLICY_PATH, &st) < 0) +@@ -98,10 +98,6 @@ int ima_setup(void) { + out_mmap: + munmap(policy, policy_size); + out: +- if (policyfd >= 0) +- close_nointr_nofail(policyfd); +- if (imafd >= 0) +- close_nointr_nofail(imafd); + if (result) + return result; + #endif /* HAVE_IMA */ +diff --git a/src/core/job.c b/src/core/job.c +index c6bf08f..916e191 100644 +--- a/src/core/job.c ++++ b/src/core/job.c +@@ -110,7 +110,7 @@ void job_free(Job *j) { + assert(j->timer_watch.fd >= 0); + + assert_se(epoll_ctl(j->manager->epoll_fd, EPOLL_CTL_DEL, j->timer_watch.fd, NULL) >= 0); +- close_nointr_nofail(j->timer_watch.fd); ++ safe_close(j->timer_watch.fd); + } + + while ((cl = j->bus_client_list)) { +@@ -899,8 +899,7 @@ int job_start_timer(Job *j) { + return 0; + + fail: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -1054,7 +1053,7 @@ int job_deserialize(Job *j, FILE *f, FDSet *fds) { + log_debug("Failed to parse job-timer-watch-fd value %s", v); + else { + if (j->timer_watch.type == WATCH_JOB_TIMER) +- close_nointr_nofail(j->timer_watch.fd); ++ safe_close(j->timer_watch.fd); + + j->timer_watch.type = WATCH_JOB_TIMER; + j->timer_watch.fd = fdset_remove(fds, fd); +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index d6ac4f6..45b36b9 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -2373,7 +2373,7 @@ static int open_follow(char **filename, FILE **_f, Set *names, char **_final) { + f = fdopen(fd, "re"); + if (!f) { + r = -errno; +- close_nointr_nofail(fd); ++ safe_close(fd); + return r; + } + +diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c +index dcd1630..86fa0b4 100644 +--- a/src/core/machine-id-setup.c ++++ b/src/core/machine-id-setup.c +@@ -73,7 +73,7 @@ static int generate(char id[34]) { + fd = open("/var/lib/dbus/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); + if (fd >= 0) { + k = loop_read(fd, id, 33, false); +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (k == 33 && id[32] == '\n') { + +@@ -118,7 +118,7 @@ static int generate(char id[34]) { + fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW); + if (fd >= 0) { + k = loop_read(fd, uuid, 36, false); +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (k >= 36) { + r = shorten_uuid(id, uuid); +@@ -205,8 +205,7 @@ int machine_id_setup(void) { + return 0; + } + +- close_nointr_nofail(fd); +- fd = -1; ++ fd = safe_close(fd); + + /* Hmm, we couldn't write it? So let's write it to + * /run/machine-id as a replacement */ +diff --git a/src/core/main.c b/src/core/main.c +index 1ac1ba7..2a294c6 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -235,7 +235,7 @@ static int console_setup(bool do_reset) { + if (r < 0) + log_error("Failed to reset /dev/console: %s", strerror(-r)); + +- close_nointr_nofail(tty_fd); ++ safe_close(tty_fd); + return r; + } + +diff --git a/src/core/manager.c b/src/core/manager.c +index 1baa863..1e7dc38 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -192,8 +192,7 @@ static int manager_watch_jobs_in_progress(Manager *m) { + return 0; + + err: +- if (m->jobs_in_progress_watch.fd >= 0) +- close_nointr_nofail(m->jobs_in_progress_watch.fd); ++ safe_close(m->jobs_in_progress_watch.fd); + watch_init(&m->jobs_in_progress_watch); + return r; + } +@@ -203,7 +202,7 @@ static void manager_unwatch_jobs_in_progress(Manager *m) { + return; + + assert_se(epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, m->jobs_in_progress_watch.fd, NULL) >= 0); +- close_nointr_nofail(m->jobs_in_progress_watch.fd); ++ safe_close(m->jobs_in_progress_watch.fd); + watch_init(&m->jobs_in_progress_watch); + m->jobs_in_progress_iteration = 0; + +@@ -306,8 +305,7 @@ static int manager_watch_idle_pipe(Manager *m) { + return 0; + + err: +- if (m->idle_pipe_watch.fd >= 0) +- close_nointr_nofail(m->idle_pipe_watch.fd); ++ safe_close(m->idle_pipe_watch.fd); + watch_init(&m->idle_pipe_watch); + return r; + } +@@ -349,7 +347,7 @@ static int manager_setup_time_change(Manager *m) { + + if (timerfd_settime(m->time_change_watch.fd, TFD_TIMER_ABSTIME|TFD_TIMER_CANCEL_ON_SET, &its, NULL) < 0) { + log_debug("Failed to set up TFD_TIMER_CANCEL_ON_SET, ignoring: %m"); +- close_nointr_nofail(m->time_change_watch.fd); ++ m->time_change_watch.fd = safe_close(m->time_change_watch.fd); + watch_init(&m->time_change_watch); + return 0; + } +@@ -385,7 +383,7 @@ static int enable_special_signals(Manager *m) { + if (ioctl(fd, KDSIGACCEPT, SIGWINCH) < 0) + log_warning("Failed to enable kbrequest handling: %s", strerror(errno)); + +- close_nointr_nofail(fd); ++ safe_close(fd); + } + + return 0; +@@ -747,16 +745,11 @@ void manager_free(Manager *m) { + hashmap_free(m->watch_pids2); + hashmap_free(m->watch_bus); + +- if (m->epoll_fd >= 0) +- close_nointr_nofail(m->epoll_fd); +- if (m->signal_watch.fd >= 0) +- close_nointr_nofail(m->signal_watch.fd); +- if (m->notify_watch.fd >= 0) +- close_nointr_nofail(m->notify_watch.fd); +- if (m->time_change_watch.fd >= 0) +- close_nointr_nofail(m->time_change_watch.fd); +- if (m->jobs_in_progress_watch.fd >= 0) +- close_nointr_nofail(m->jobs_in_progress_watch.fd); ++ safe_close(m->epoll_fd); ++ safe_close(m->signal_watch.fd); ++ safe_close(m->notify_watch.fd); ++ safe_close(m->time_change_watch.fd); ++ safe_close(m->jobs_in_progress_watch.fd); + + free(m->notify_socket); + +@@ -1770,7 +1763,7 @@ static int process_event(Manager *m, struct epoll_event *ev) { + /* Restart the watch */ + epoll_ctl(m->epoll_fd, EPOLL_CTL_DEL, m->time_change_watch.fd, + NULL); +- close_nointr_nofail(m->time_change_watch.fd); ++ safe_close(m->time_change_watch.fd); + watch_init(&m->time_change_watch); + manager_setup_time_change(m); + +@@ -2050,8 +2043,7 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) { + } + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + free(message); + } +diff --git a/src/core/path.c b/src/core/path.c +index 99e2fed..5e4f6d5 100644 +--- a/src/core/path.c ++++ b/src/core/path.c +@@ -150,9 +150,7 @@ void path_spec_unwatch(PathSpec *s, Unit *u) { + return; + + unit_unwatch_fd(u, &s->watch); +- +- close_nointr_nofail(s->inotify_fd); +- s->inotify_fd = -1; ++ s->inotify_fd = safe_close(s->inotify_fd); + } + + int path_spec_fd_event(PathSpec *s, uint32_t events) { +diff --git a/src/core/service.c b/src/core/service.c +index 3bda9a3..f0df5fe 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -222,8 +222,7 @@ static void service_close_socket_fd(Service *s) { + if (s->socket_fd < 0) + return; + +- close_nointr_nofail(s->socket_fd); +- s->socket_fd = -1; ++ s->socket_fd = safe_close(s->socket_fd); + } + + static void service_connection_unref(Service *s) { +@@ -2794,8 +2793,7 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, + log_debug_unit(u->id, "Failed to parse socket-fd value %s", value); + else { + +- if (s->socket_fd >= 0) +- close_nointr_nofail(s->socket_fd); ++ safe_close(s->socket_fd); + s->socket_fd = fdset_remove(fds, fd); + } + } else if (streq(key, "main-exec-status-pid")) { +diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c +index 1434dea..8838d31 100644 +--- a/src/core/smack-setup.c ++++ b/src/core/smack-setup.c +@@ -86,7 +86,7 @@ static int write_rules(const char* dstpath, const char* srcdir) { + if (!policy) { + if (r == 0) + r = -errno; +- close_nointr_nofail(fd); ++ safe_close(fd); + log_error("Failed to open %s: %m", entry->d_name); + continue; + } +diff --git a/src/core/socket.c b/src/core/socket.c +index e673f38..842850f 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -113,7 +113,7 @@ void socket_free_ports(Socket *s) { + + if (p->fd >= 0) { + unit_unwatch_fd(UNIT(s), &p->fd_watch); +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + } + + free(p->path); +@@ -676,7 +676,7 @@ static void socket_close_fds(Socket *s) { + continue; + + unit_unwatch_fd(UNIT(s), &p->fd_watch); +- close_nointr_nofail(p->fd); ++ p->fd = safe_close(p->fd); + + /* One little note: we should never delete any sockets + * in the file system here! After all some other +@@ -685,8 +685,6 @@ static void socket_close_fds(Socket *s) { + * we delete sockets in the file system before we + * create a new one, not after we stopped using + * one! */ +- +- p->fd = -1; + } + } + +@@ -863,9 +861,7 @@ static int fifo_address_create( + + fail: + label_context_clear(); +- +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -900,8 +896,7 @@ static int special_address_create( + return 0; + + fail: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -960,9 +955,7 @@ static int mq_address_create( + return 0; + + fail: +- if (fd >= 0) +- close_nointr_nofail(fd); +- ++ safe_close(fd); + return r; + } + +@@ -1438,7 +1431,7 @@ static void socket_enter_running(Socket *s, int cfd) { + UNIT(s)->id); + + if (cfd >= 0) +- close_nointr_nofail(cfd); ++ safe_close(cfd); + else { + /* Flush all sockets by closing and reopening them */ + socket_close_fds(s); +@@ -1483,7 +1476,7 @@ static void socket_enter_running(Socket *s, int cfd) { + log_warning_unit(UNIT(s)->id, + "%s: Too many incoming connections (%u)", + UNIT(s)->id, s->n_connections); +- close_nointr_nofail(cfd); ++ safe_close(cfd); + return; + } + +@@ -1498,7 +1491,7 @@ static void socket_enter_running(Socket *s, int cfd) { + + /* ENOTCONN is legitimate if TCP RST was received. + * This connection is over, but the socket unit lives on. */ +- close_nointr_nofail(cfd); ++ safe_close(cfd); + return; + } + +@@ -1558,8 +1551,7 @@ fail: + bus_error(&error, r)); + socket_enter_stop_pre(s, SOCKET_FAILURE_RESOURCES); + +- if (cfd >= 0) +- close_nointr_nofail(cfd); ++ safe_close(cfd); + + dbus_error_free(&error); + } +@@ -1804,8 +1796,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + break; + + if (p) { +- if (p->fd >= 0) +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + p->fd = fdset_remove(fds, fd); + } + } +@@ -1825,8 +1816,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + break; + + if (p) { +- if (p->fd >= 0) +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + p->fd = fdset_remove(fds, fd); + } + } +@@ -1846,8 +1836,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + break; + + if (p) { +- if (p->fd >= 0) +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + p->fd = fdset_remove(fds, fd); + } + } +@@ -1866,8 +1855,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + break; + + if (p) { +- if (p->fd >= 0) +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + p->fd = fdset_remove(fds, fd); + } + } +@@ -1886,8 +1874,7 @@ static int socket_deserialize_item(Unit *u, const char *key, const char *value, + break; + + if (p) { +- if (p->fd >= 0) +- close_nointr_nofail(p->fd); ++ safe_close(p->fd); + p->fd = fdset_remove(fds, fd); + } + } +diff --git a/src/core/switch-root.c b/src/core/switch-root.c +index ce0e41d..518ec1f 100644 +--- a/src/core/switch-root.c ++++ b/src/core/switch-root.c +@@ -41,11 +41,10 @@ int switch_root(const char *new_root) { + "/sys\0" + "/run\0"; + +- int r, old_root_fd = -1; ++ _cleanup_close_ int old_root_fd = -1; + struct stat new_root_stat; + bool old_root_remove; +- const char *i; +- _cleanup_free_ char *temporary_old_root = NULL; ++ const char *i, *temporary_old_root; + + if (path_equal(new_root, "/")) + return 0; +@@ -56,16 +55,13 @@ int switch_root(const char *new_root) { + * directory we choose for this, but it should be more likely + * than not that /mnt exists and is suitable as mount point + * and is on the same fs as the old root dir */ +- temporary_old_root = strappend(new_root, "/mnt"); +- if (!temporary_old_root) +- return -ENOMEM; ++ temporary_old_root = strappenda(new_root, "/mnt"); + + old_root_remove = in_initrd(); + + if (stat(new_root, &new_root_stat) < 0) { +- r = -errno; + log_error("Failed to stat directory %s: %m", new_root); +- goto fail; ++ return -errno; + } + + /* Work-around for a kernel bug: for some reason the kernel +@@ -104,9 +100,8 @@ int switch_root(const char *new_root) { + } + + if (chdir(new_root) < 0) { +- r = -errno; + log_error("Failed to change directory to %s: %m", new_root); +- goto fail; ++ return -errno; + } + + if (old_root_remove) { +@@ -123,27 +118,23 @@ int switch_root(const char *new_root) { + /* Immediately get rid of the old root. Since we are + * running off it we need to do this lazily. */ + if (umount2(temporary_old_root, MNT_DETACH) < 0) { +- r = -errno; + log_error("Failed to umount old root dir %s: %m", temporary_old_root); +- goto fail; ++ return -errno; + } + + } else if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) { +- r = -errno; + log_error("Failed to mount moving %s to /: %m", new_root); +- goto fail; ++ return -errno; + } + + if (chroot(".") < 0) { +- r = -errno; + log_error("Failed to change root: %m"); +- goto fail; ++ return -errno; + } + + if (chdir("/") < 0) { +- r = -errno; + log_error("Failed to change directory: %m"); +- goto fail; ++ return -errno; + } + + if (old_root_fd >= 0) { +@@ -157,11 +148,5 @@ int switch_root(const char *new_root) { + } + } + +- r = 0; +- +-fail: +- if (old_root_fd >= 0) +- close_nointr_nofail(old_root_fd); +- +- return r; ++ return 0; + } +diff --git a/src/core/umount.c b/src/core/umount.c +index fbd7e1c..57a97e1 100644 +--- a/src/core/umount.c ++++ b/src/core/umount.c +@@ -315,14 +315,14 @@ static int dm_list_get(MountPoint **head) { + } + + static int delete_loopback(const char *device) { +- int fd, r; ++ _cleanup_close_ int fd = -1; ++ int r; + +- if ((fd = open(device, O_RDONLY|O_CLOEXEC)) < 0) ++ fd = open(device, O_RDONLY|O_CLOEXEC); ++ if (fd < 0) + return errno == ENOENT ? 0 : -errno; + + r = ioctl(fd, LOOP_CLR_FD, 0); +- close_nointr_nofail(fd); +- + if (r >= 0) + return 1; + +diff --git a/src/core/unit.c b/src/core/unit.c +index 9a7720d..c05926a 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -1851,7 +1851,7 @@ int unit_watch_timer(Unit *u, clockid_t clock_id, bool relative, usec_t usec, Wa + + fail: + if (ours) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return -errno; + } +@@ -1868,7 +1868,7 @@ void unit_unwatch_timer(Unit *u, Watch *w) { + assert(w->fd >= 0); + + assert_se(epoll_ctl(u->manager->epoll_fd, EPOLL_CTL_DEL, w->fd, NULL) >= 0); +- close_nointr_nofail(w->fd); ++ safe_close(w->fd); + + w->fd = -1; + w->type = WATCH_INVALID; +diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c +index 1189fe7..1ae104a 100644 +--- a/src/fsck/fsck.c ++++ b/src/fsck/fsck.c +@@ -183,7 +183,7 @@ static int process_progress(int fd) { + + f = fdopen(fd, "r"); + if (!f) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -370,15 +370,12 @@ int main(int argc, char *argv[]) { + } else if (pid == 0) { + /* Child */ + if (progress_pipe[0] >= 0) +- close_nointr_nofail(progress_pipe[0]); ++ safe_close(progress_pipe[0]); + execv(cmdline[0], (char**) cmdline); + _exit(8); /* Operational error */ + } + +- if (progress_pipe[1] >= 0) { +- close_nointr_nofail(progress_pipe[1]); +- progress_pipe[1] = -1; +- } ++ progress_pipe[1] = safe_close(progress_pipe[1]); + + if (progress_pipe[0] >= 0) { + process_progress(progress_pipe[0]); +diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c +index ec33040..03a379a 100644 +--- a/src/initctl/initctl.c ++++ b/src/initctl/initctl.c +@@ -258,7 +258,7 @@ static void fifo_free(Fifo *f) { + if (f->server) + epoll_ctl(f->server->epoll_fd, EPOLL_CTL_DEL, f->fd, NULL); + +- close_nointr_nofail(f->fd); ++ safe_close(f->fd); + } + + free(f); +@@ -270,8 +270,7 @@ static void server_done(Server *s) { + while (s->fifos) + fifo_free(s->fifos); + +- if (s->epoll_fd >= 0) +- close_nointr_nofail(s->epoll_fd); ++ safe_close(s->epoll_fd); + + if (s->bus) { + dbus_connection_flush(s->bus); +diff --git a/src/journal/cat.c b/src/journal/cat.c +index ea61578..b4b1332 100644 +--- a/src/journal/cat.c ++++ b/src/journal/cat.c +@@ -151,7 +151,7 @@ int main(int argc, char *argv[]) { + } + + if (fd >= 3) +- close_nointr_nofail(fd); ++ safe_close(fd); + + fd = -1; + +@@ -169,11 +169,8 @@ int main(int argc, char *argv[]) { + log_error("Failed to execute process: %s", strerror(-r)); + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); +- +- if (saved_stderr >= 0) +- close_nointr_nofail(saved_stderr); ++ safe_close(fd); ++ safe_close(saved_stderr); + + return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS; + } +diff --git a/src/journal/catalog.c b/src/journal/catalog.c +index e5342be..7f748b3 100644 +--- a/src/journal/catalog.c ++++ b/src/journal/catalog.c +@@ -435,18 +435,18 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p + return -errno; + + if (fstat(fd, &st) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + + if (st.st_size < (off_t) sizeof(CatalogHeader)) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -EINVAL; + } + + p = mmap(NULL, PAGE_ALIGN(st.st_size), PROT_READ, MAP_SHARED, fd, 0); + if (p == MAP_FAILED) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -457,7 +457,7 @@ static int open_mmap(const char *database, int *_fd, struct stat *_st, void **_p + h->incompatible_flags != 0 || + le64toh(h->n_items) <= 0 || + st.st_size < (off_t) (le64toh(h->header_size) + le64toh(h->catalog_item_size) * le64toh(h->n_items))) { +- close_nointr_nofail(fd); ++ safe_close(fd); + munmap(p, st.st_size); + return -EBADMSG; + } +diff --git a/src/journal/coredumpctl.c b/src/journal/coredumpctl.c +index a5997e2..f384286 100644 +--- a/src/journal/coredumpctl.c ++++ b/src/journal/coredumpctl.c +@@ -491,8 +491,7 @@ static int run_gdb(sd_journal *j) { + goto finish; + } + +- close_nointr_nofail(fd); +- fd = -1; ++ fd = safe_close(fd); + + pid = fork(); + if (pid < 0) { +diff --git a/src/journal/journal-authenticate.c b/src/journal/journal-authenticate.c +index f416b79..5ab1982 100644 +--- a/src/journal/journal-authenticate.c ++++ b/src/journal/journal-authenticate.c +@@ -418,10 +418,9 @@ finish: + if (m) + munmap(m, PAGE_ALIGN(sizeof(FSSHeader))); + +- if (fd >= 0) +- close_nointr_nofail(fd); +- ++ safe_close(fd); + free(p); ++ + return r; + } + +diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c +index 57ded0a..2d2d289 100644 +--- a/src/journal/journal-file.c ++++ b/src/journal/journal-file.c +@@ -133,9 +133,7 @@ void journal_file_close(JournalFile *f) { + if (f->header) + munmap(f->header, PAGE_ALIGN(sizeof(Header))); + +- if (f->fd >= 0) +- close_nointr_nofail(f->fd); +- ++ safe_close(f->fd); + free(f->path); + + if (f->mmap) +diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c +index d99ff0c..d40eaba 100644 +--- a/src/journal/journal-send.c ++++ b/src/journal/journal-send.c +@@ -66,7 +66,7 @@ retry: + fd_inc_sndbuf(fd, SNDBUF_SIZE); + + if (!__sync_bool_compare_and_swap(&fd_plus_one, 0, fd+1)) { +- close_nointr_nofail(fd); ++ safe_close(fd); + goto retry; + } + +@@ -321,13 +321,13 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) { + return -errno; + + if (unlink(path) < 0) { +- close_nointr_nofail(buffer_fd); ++ safe_close(buffer_fd); + return -errno; + } + + n = writev(buffer_fd, w, j); + if (n < 0) { +- close_nointr_nofail(buffer_fd); ++ safe_close(buffer_fd); + return -errno; + } + +@@ -347,7 +347,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) { + mh.msg_controllen = cmsg->cmsg_len; + + k = sendmsg(fd, &mh, MSG_NOSIGNAL); +- close_nointr_nofail(buffer_fd); ++ safe_close(buffer_fd); + + if (k < 0) + return -errno; +@@ -423,12 +423,12 @@ _public_ int sd_journal_stream_fd(const char *identifier, int priority, int leve + + r = connect(fd, &sa.sa, offsetof(union sockaddr_union, un.sun_path) + strlen(sa.un.sun_path)); + if (r < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + + if (shutdown(fd, SHUT_RD) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -456,12 +456,12 @@ _public_ int sd_journal_stream_fd(const char *identifier, int priority, int leve + + r = loop_write(fd, header, l, false); + if (r < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return (int) r; + } + + if ((size_t) r != l) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c +index f2422ff..55ec6fd 100644 +--- a/src/journal/journal-verify.c ++++ b/src/journal/journal-verify.c +@@ -1228,9 +1228,9 @@ int journal_file_verify( + mmap_cache_close_fd(f->mmap, entry_fd); + mmap_cache_close_fd(f->mmap, entry_array_fd); + +- close_nointr_nofail(data_fd); +- close_nointr_nofail(entry_fd); +- close_nointr_nofail(entry_array_fd); ++ safe_close(data_fd); ++ safe_close(entry_fd); ++ safe_close(entry_array_fd); + + if (first_contained) + *first_contained = le64toh(f->header->head_entry_realtime); +@@ -1253,17 +1253,17 @@ fail: + + if (data_fd >= 0) { + mmap_cache_close_fd(f->mmap, data_fd); +- close_nointr_nofail(data_fd); ++ safe_close(data_fd); + } + + if (entry_fd >= 0) { + mmap_cache_close_fd(f->mmap, entry_fd); +- close_nointr_nofail(entry_fd); ++ safe_close(entry_fd); + } + + if (entry_array_fd >= 0) { + mmap_cache_close_fd(f->mmap, entry_array_fd); +- close_nointr_nofail(entry_array_fd); ++ safe_close(entry_array_fd); + } + + return r; +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index b991ae3..9886a2f 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -1141,7 +1141,7 @@ static int setup_keys(void) { + n = now(CLOCK_REALTIME); + n /= arg_interval; + +- close_nointr_nofail(fd); ++ safe_close(fd); + fd = mkostemp(k, O_WRONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) { + log_error("Failed to open %s: %m", k); +@@ -1240,8 +1240,7 @@ static int setup_keys(void) { + r = 0; + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (k) { + unlink(k); +diff --git a/src/journal/journald-console.c b/src/journal/journald-console.c +index 1ee3afe..7a566ae 100644 +--- a/src/journal/journald-console.c ++++ b/src/journal/journald-console.c +@@ -107,7 +107,7 @@ void server_forward_console( + if (writev(fd, iovec, n) < 0) + log_debug("Failed to write to %s for logging: %s", tty, strerror(errno)); + +- close_nointr_nofail(fd); ++ safe_close(fd); + + finish: + free(ident_buf); +diff --git a/src/journal/journald-kmsg.c b/src/journal/journald-kmsg.c +index 9895808..4c2f6e7 100644 +--- a/src/journal/journald-kmsg.c ++++ b/src/journal/journald-kmsg.c +@@ -407,7 +407,7 @@ int server_open_dev_kmsg(Server *s) { + } + + int server_open_kernel_seqnum(Server *s) { +- int fd; ++ _cleanup_close_ int fd; + uint64_t *p; + + assert(s); +@@ -424,18 +424,15 @@ int server_open_kernel_seqnum(Server *s) { + + if (posix_fallocate(fd, 0, sizeof(uint64_t)) < 0) { + log_error("Failed to allocate sequential number file, ignoring: %m"); +- close_nointr_nofail(fd); + return 0; + } + + p = mmap(NULL, sizeof(uint64_t), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if (p == MAP_FAILED) { + log_error("Failed to map sequential number file, ignoring: %m"); +- close_nointr_nofail(fd); + return 0; + } + +- close_nointr_nofail(fd); + s->kernel_seqnum = p; + + return 0; +diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c +index cd2cfe9..0b31d10 100644 +--- a/src/journal/journald-server.c ++++ b/src/journal/journald-server.c +@@ -1638,26 +1638,13 @@ void server_done(Server *s) { + + hashmap_free(s->user_journals); + +- if (s->epoll_fd >= 0) +- close_nointr_nofail(s->epoll_fd); +- +- if (s->signal_fd >= 0) +- close_nointr_nofail(s->signal_fd); +- +- if (s->syslog_fd >= 0) +- close_nointr_nofail(s->syslog_fd); +- +- if (s->native_fd >= 0) +- close_nointr_nofail(s->native_fd); +- +- if (s->stdout_fd >= 0) +- close_nointr_nofail(s->stdout_fd); +- +- if (s->dev_kmsg_fd >= 0) +- close_nointr_nofail(s->dev_kmsg_fd); +- +- if (s->sync_timer_fd >= 0) +- close_nointr_nofail(s->sync_timer_fd); ++ safe_close(s->epoll_fd); ++ safe_close(s->signal_fd); ++ safe_close(s->syslog_fd); ++ safe_close(s->native_fd); ++ safe_close(s->stdout_fd); ++ safe_close(s->dev_kmsg_fd); ++ safe_close(s->sync_timer_fd); + + if (s->rate_limit) + journal_rate_limit_free(s->rate_limit); +diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c +index aae381b..816e351 100644 +--- a/src/journal/journald-stream.c ++++ b/src/journal/journald-stream.c +@@ -327,7 +327,7 @@ void stdout_stream_free(StdoutStream *s) { + if (s->server) + epoll_ctl(s->server->epoll_fd, EPOLL_CTL_DEL, s->fd, NULL); + +- close_nointr_nofail(s->fd); ++ safe_close(s->fd); + } + + #ifdef HAVE_SELINUX +@@ -359,13 +359,13 @@ int stdout_stream_new(Server *s) { + + if (s->n_stdout_streams >= STDOUT_STREAMS_MAX) { + log_warning("Too many stdout streams, refusing connection."); +- close_nointr_nofail(fd); ++ safe_close(fd); + return 0; + } + + stream = new0(StdoutStream, 1); + if (!stream) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return log_oom(); + } + +diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c +index 661257b..3840ee4 100644 +--- a/src/journal/sd-journal.c ++++ b/src/journal/sd-journal.c +@@ -1836,8 +1836,7 @@ _public_ void sd_journal_close(sd_journal *j) { + hashmap_free(j->directories_by_path); + hashmap_free(j->directories_by_wd); + +- if (j->inotify_fd >= 0) +- close_nointr_nofail(j->inotify_fd); ++ safe_close(j->inotify_fd); + + if (j->mmap) { + log_debug("mmap cache statistics: %u hit, %u miss", mmap_cache_get_hit(j->mmap), mmap_cache_get_missed(j->mmap)); +diff --git a/src/journal/test-journal-verify.c b/src/journal/test-journal-verify.c +index 0540074..3b181c6 100644 +--- a/src/journal/test-journal-verify.c ++++ b/src/journal/test-journal-verify.c +@@ -48,7 +48,7 @@ static void bit_toggle(const char *fn, uint64_t p) { + r = pwrite(fd, &b, 1, p/8); + assert(r == 1); + +- close_nointr_nofail(fd); ++ safe_close(fd); + } + + static int raw_verify(const char *fn, const char *verification_key) { +diff --git a/src/journal/test-mmap-cache.c b/src/journal/test-mmap-cache.c +index e2ffaf4..868ba00 100644 +--- a/src/journal/test-mmap-cache.c ++++ b/src/journal/test-mmap-cache.c +@@ -71,9 +71,9 @@ int main(int argc, char *argv[]) { + + mmap_cache_unref(m); + +- close_nointr_nofail(x); +- close_nointr_nofail(y); +- close_nointr_nofail(z); ++ safe_close(x); ++ safe_close(y); ++ safe_close(z); + + return 0; + } +diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c +index bf8de04..4efc65f 100644 +--- a/src/libsystemd-bus/bus-kernel.c ++++ b/src/libsystemd-bus/bus-kernel.c +@@ -414,7 +414,7 @@ static void close_kdbus_msg(sd_bus *bus, struct kdbus_msg *k) { + if (d->type == KDBUS_MSG_FDS) + close_many(d->fds, (d->size - offsetof(struct kdbus_item, fds)) / sizeof(int)); + else if (d->type == KDBUS_MSG_PAYLOAD_MEMFD) +- close_nointr_nofail(d->memfd.fd); ++ safe_close(d->memfd.fd); + } + } + +@@ -687,7 +687,7 @@ int bus_kernel_create(const char *name, char **s) { + return -ENOMEM; + + if (ioctl(fd, KDBUS_CMD_BUS_MAKE, make) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + free(p); + return -errno; + } +@@ -742,7 +742,7 @@ static void close_and_munmap(int fd, void *address, size_t size) { + if (size > 0) + assert_se(munmap(address, PAGE_ALIGN(size)) >= 0); + +- close_nointr_nofail(fd); ++ safe_close(fd); + } + + void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t size) { +diff --git a/src/libsystemd-bus/bus-message.c b/src/libsystemd-bus/bus-message.c +index 760a148..7284d27 100644 +--- a/src/libsystemd-bus/bus-message.c ++++ b/src/libsystemd-bus/bus-message.c +@@ -68,7 +68,7 @@ static void message_free_part(sd_bus_message *m, struct bus_body_part *part) { + if (part->mapped > 0) + assert_se(munmap(part->data, part->mapped) == 0); + +- close_nointr_nofail(part->memfd); ++ safe_close(part->memfd); + } + + } else if (part->munmap_this) +@@ -1482,8 +1482,7 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void + return 0; + + fail: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +diff --git a/src/libsystemd-bus/bus-socket.c b/src/libsystemd-bus/bus-socket.c +index b60facb..32b9207 100644 +--- a/src/libsystemd-bus/bus-socket.c ++++ b/src/libsystemd-bus/bus-socket.c +@@ -745,7 +745,7 @@ int bus_socket_exec(sd_bus *b) { + assert_se(dup3(s[1], STDOUT_FILENO, 0) == STDOUT_FILENO); + + if (s[1] != STDIN_FILENO && s[1] != STDOUT_FILENO) +- close_nointr_nofail(s[1]); ++ safe_close(s[1]); + + fd_cloexec(STDIN_FILENO, false); + fd_cloexec(STDOUT_FILENO, false); +@@ -762,7 +762,7 @@ int bus_socket_exec(sd_bus *b) { + _exit(EXIT_FAILURE); + } + +- close_nointr_nofail(s[1]); ++ safe_close(s[1]); + b->output_fd = b->input_fd = s[0]; + + return bus_socket_start_auth(b); +diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c +index 8dc3f6e..6f08a00 100644 +--- a/src/libsystemd-bus/sd-bus.c ++++ b/src/libsystemd-bus/sd-bus.c +@@ -49,10 +49,10 @@ static void bus_close_fds(sd_bus *b) { + assert(b); + + if (b->input_fd >= 0) +- close_nointr_nofail(b->input_fd); ++ safe_close(b->input_fd); + + if (b->output_fd >= 0 && b->output_fd != b->input_fd) +- close_nointr_nofail(b->output_fd); ++ safe_close(b->output_fd); + + b->input_fd = b->output_fd = -1; + } +diff --git a/src/libsystemd-bus/sd-memfd.c b/src/libsystemd-bus/sd-memfd.c +index bd14da3..4ecfe61 100644 +--- a/src/libsystemd-bus/sd-memfd.c ++++ b/src/libsystemd-bus/sd-memfd.c +@@ -88,7 +88,7 @@ void sd_memfd_free(sd_memfd *m) { + if (m->f) + fclose(m->f); + else +- close_nointr_nofail(m->fd); ++ safe_close(m->fd); + + free(m); + } +diff --git a/src/libsystemd-bus/test-bus-chat.c b/src/libsystemd-bus/test-bus-chat.c +index f308edd..b2c2636 100644 +--- a/src/libsystemd-bus/test-bus-chat.c ++++ b/src/libsystemd-bus/test-bus-chat.c +@@ -229,7 +229,7 @@ static int server(sd_bus *bus) { + + if (write(fd, &x, 1) < 0) { + log_error("Failed to write to fd: %m"); +- close_nointr_nofail(fd); ++ safe_close(fd); + goto fail; + } + +diff --git a/src/libsystemd-bus/test-bus-kernel-benchmark.c b/src/libsystemd-bus/test-bus-kernel-benchmark.c +index 2e84cd9..7ee9fbb 100644 +--- a/src/libsystemd-bus/test-bus-kernel-benchmark.c ++++ b/src/libsystemd-bus/test-bus-kernel-benchmark.c +@@ -269,7 +269,7 @@ int main(int argc, char *argv[]) { + CPU_SET(0, &cpuset); + pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); + +- close_nointr_nofail(bus_ref); ++ safe_close(bus_ref); + sd_bus_unref(b); + + switch (mode) { +diff --git a/src/libsystemd-bus/test-bus-kernel.c b/src/libsystemd-bus/test-bus-kernel.c +index 680dcde..2d08bc8 100644 +--- a/src/libsystemd-bus/test-bus-kernel.c ++++ b/src/libsystemd-bus/test-bus-kernel.c +@@ -122,14 +122,12 @@ int main(int argc, char *argv[]) { + + assert_se(write(pipe_fds[1], "x", 1) == 1); + +- close_nointr_nofail(pipe_fds[1]); +- pipe_fds[1] = -1; ++ pipe_fds[1] = safe_close(pipe_fds[1]); + + r = sd_bus_message_append(m, "h", pipe_fds[0]); + assert_se(r >= 0); + +- close_nointr_nofail(pipe_fds[0]); +- pipe_fds[0] = -1; ++ pipe_fds[0] = safe_close(pipe_fds[0]); + + r = sd_bus_send(b, m, NULL); + assert_se(r >= 0); +diff --git a/src/login/inhibit.c b/src/login/inhibit.c +index 29e50c1..37edc5e 100644 +--- a/src/login/inhibit.c ++++ b/src/login/inhibit.c +@@ -285,7 +285,7 @@ int main(int argc, char *argv[]) { + if (pid == 0) { + /* Child */ + +- close_nointr_nofail(fd); ++ safe_close(fd); + close_all_fds(NULL, 0); + + execvp(argv[optind], argv + optind); +diff --git a/src/login/logind-button.c b/src/login/logind-button.c +index 4f456d2..1705a29 100644 +--- a/src/login/logind-button.c ++++ b/src/login/logind-button.c +@@ -74,7 +74,7 @@ void button_free(Button *b) { + + /* If the device has been unplugged close() returns + * ENODEV, let's ignore this, hence we don't use +- * close_nointr_nofail() */ ++ * safe_close() */ + close(b->fd); + } + +diff --git a/src/login/logind-core.c b/src/login/logind-core.c +index 36999ac..ce14a99 100644 +--- a/src/login/logind-core.c ++++ b/src/login/logind-core.c +@@ -460,7 +460,7 @@ static int vt_is_busy(int vtnr) { + else + r = !!(vt_stat.v_state & (1 << vtnr)); + +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index a5ab19c..24f6622 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -795,7 +795,7 @@ static int bus_manager_inhibit( + goto fail; + } + +- close_nointr_nofail(fifo_fd); ++ safe_close(fifo_fd); + *_reply = reply; + reply = NULL; + +@@ -807,8 +807,7 @@ fail: + if (i) + inhibitor_free(i); + +- if (fifo_fd >= 0) +- close_nointr_nofail(fifo_fd); ++ safe_close(fifo_fd); + + return r; + } +diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c +index e770883..38a6841 100644 +--- a/src/login/logind-inhibit.c ++++ b/src/login/logind-inhibit.c +@@ -258,8 +258,7 @@ int inhibitor_load(Inhibitor *i) { + int fd; + + fd = inhibitor_create_fifo(i); +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + } + + finish: +@@ -323,8 +322,7 @@ void inhibitor_remove_fifo(Inhibitor *i) { + if (i->fifo_fd >= 0) { + assert_se(hashmap_remove(i->manager->inhibitor_fds, INT_TO_PTR(i->fifo_fd + 1)) == i); + assert_se(epoll_ctl(i->manager->epoll_fd, EPOLL_CTL_DEL, i->fifo_fd, NULL) == 0); +- close_nointr_nofail(i->fifo_fd); +- i->fifo_fd = -1; ++ i->fifo_fd = safe_close(i->fifo_fd); + } + + if (i->fifo_path) { +diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c +index feebcf4..b581925 100644 +--- a/src/login/logind-seat.c ++++ b/src/login/logind-seat.c +@@ -183,8 +183,7 @@ static int vt_allocate(int vtnr) { + + r = fd < 0 ? -errno : 0; + +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +diff --git a/src/login/logind-session.c b/src/login/logind-session.c +index ece222a..9de60af 100644 +--- a/src/login/logind-session.c ++++ b/src/login/logind-session.c +@@ -375,8 +375,7 @@ int session_load(Session *s) { + trigger the EOF. */ + + fd = session_create_fifo(s); +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + } + + if (realtime) { +@@ -972,8 +971,8 @@ void session_remove_fifo(Session *s) { + if (s->fifo_fd >= 0) { + assert_se(hashmap_remove(s->manager->session_fds, INT_TO_PTR(s->fifo_fd + 1)) == s); + assert_se(epoll_ctl(s->manager->epoll_fd, EPOLL_CTL_DEL, s->fifo_fd, NULL) == 0); +- close_nointr_nofail(s->fifo_fd); +- s->fifo_fd = -1; ++ safe_close(s->fifo_fd); ++ s->fifo_fd = safe_close(s->fifo_fd); + + session_save(s); + user_save(s->user); +diff --git a/src/login/logind.c b/src/login/logind.c +index 5180be7..f147910 100644 +--- a/src/login/logind.c ++++ b/src/login/logind.c +@@ -152,8 +152,7 @@ void manager_free(Manager *m) { + hashmap_free(m->button_fds); + hashmap_free(m->timer_fds); + +- if (m->console_active_fd >= 0) +- close_nointr_nofail(m->console_active_fd); ++ safe_close(m->console_active_fd); + + if (m->udev_seat_monitor) + udev_monitor_unref(m->udev_seat_monitor); +@@ -173,17 +172,10 @@ void manager_free(Manager *m) { + dbus_connection_unref(m->bus); + } + +- if (m->bus_fd >= 0) +- close_nointr_nofail(m->bus_fd); +- +- if (m->epoll_fd >= 0) +- close_nointr_nofail(m->epoll_fd); +- +- if (m->reserve_vt_fd >= 0) +- close_nointr_nofail(m->reserve_vt_fd); +- +- if (m->idle_action_fd >= 0) +- close_nointr_nofail(m->idle_action_fd); ++ safe_close(m->bus_fd); ++ safe_close(m->epoll_fd); ++ safe_close(m->reserve_vt_fd); ++ safe_close(m->idle_action_fd); + + strv_free(m->kill_only_users); + strv_free(m->kill_exclude_users); +@@ -1041,10 +1033,7 @@ int manager_dispatch_idle_action(Manager *m) { + return 0; + + finish: +- if (m->idle_action_fd >= 0) { +- close_nointr_nofail(m->idle_action_fd); +- m->idle_action_fd = -1; +- } ++ m->idle_action_fd = safe_close(m->idle_action_fd); + + return r; + } +diff --git a/src/login/pam-module.c b/src/login/pam-module.c +index 6259450..fe3ddd4 100644 +--- a/src/login/pam-module.c ++++ b/src/login/pam-module.c +@@ -478,8 +478,7 @@ finish: + if (reply) + dbus_message_unref(reply); + +- if (session_fd >= 0) +- close_nointr_nofail(session_fd); ++ safe_close(session_fd); + + return r; + } +diff --git a/src/login/sd-login.c b/src/login/sd-login.c +index 7e25041..2e7768e 100644 +--- a/src/login/sd-login.c ++++ b/src/login/sd-login.c +@@ -646,7 +646,7 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) { + if (!category || streq(category, "seat")) { + k = inotify_add_watch(fd, "/run/systemd/seats/", IN_MOVED_TO|IN_DELETE); + if (k < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -656,7 +656,7 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) { + if (!category || streq(category, "session")) { + k = inotify_add_watch(fd, "/run/systemd/sessions/", IN_MOVED_TO|IN_DELETE); + if (k < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -666,7 +666,7 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) { + if (!category || streq(category, "uid")) { + k = inotify_add_watch(fd, "/run/systemd/users/", IN_MOVED_TO|IN_DELETE); + if (k < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -676,7 +676,7 @@ _public_ int sd_login_monitor_new(const char *category, sd_login_monitor **m) { + if (!category || streq(category, "machine")) { + k = inotify_add_watch(fd, "/run/systemd/machines/", IN_MOVED_TO|IN_DELETE); + if (k < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +diff --git a/src/login/test-inhibit.c b/src/login/test-inhibit.c +index 7b6deff..68d91da 100644 +--- a/src/login/test-inhibit.c ++++ b/src/login/test-inhibit.c +@@ -127,11 +127,11 @@ int main(int argc, char*argv[]) { + assert(fd2 >= 0); + print_inhibitors(bus); + +- close_nointr_nofail(fd1); ++ safe_close(fd1); + sleep(1); + print_inhibitors(bus); + +- close_nointr_nofail(fd2); ++ safe_close(fd2); + sleep(1); + print_inhibitors(bus); + +diff --git a/src/machine/machined.c b/src/machine/machined.c +index ad804a1..f427383 100644 +--- a/src/machine/machined.c ++++ b/src/machine/machined.c +@@ -73,11 +73,8 @@ void manager_free(Manager *m) { + dbus_connection_unref(m->bus); + } + +- if (m->bus_fd >= 0) +- close_nointr_nofail(m->bus_fd); +- +- if (m->epoll_fd >= 0) +- close_nointr_nofail(m->epoll_fd); ++ safe_close(m->bus_fd); ++ safe_close(m->epoll_fd); + + free(m); + } +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 8718e94..adc682d 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -785,7 +785,7 @@ static int setup_kmsg(const char *dest, int kmsg_socket) { + /* Store away the fd in the socket, so that it stays open as + * long as we run the child */ + k = sendmsg(kmsg_socket, &mh, MSG_DONTWAIT|MSG_NOSIGNAL); +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (k < 0) { + log_error("Failed to send FIFO fd: %m"); +@@ -1050,7 +1050,7 @@ static bool audit_enabled(void) { + + fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_AUDIT); + if (fd >= 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return true; + } + return false; +@@ -1239,12 +1239,11 @@ int main(int argc, char *argv[]) { + n_env ++; + + /* Wait for the parent process to log our PID */ +- close_nointr_nofail(pipefd[1]); ++ safe_close(pipefd[1]); + fd_wait_for_event(pipefd[0], POLLHUP, -1); +- close_nointr_nofail(pipefd[0]); ++ safe_close(pipefd[0]); + +- close_nointr_nofail(master); +- master = -1; ++ master = safe_close(master); + + if (saved_attr_valid) { + if (tcsetattr(STDIN_FILENO, TCSANOW, &raw_attr) < 0) { +@@ -1257,8 +1256,7 @@ int main(int argc, char *argv[]) { + close_nointr(STDOUT_FILENO); + close_nointr(STDERR_FILENO); + +- close_nointr_nofail(kmsg_socket_pair[0]); +- kmsg_socket_pair[0] = -1; ++ kmsg_socket_pair[0] = safe_close(kmsg_socket_pair[0]); + + reset_all_signal_handlers(); + +@@ -1268,7 +1266,7 @@ int main(int argc, char *argv[]) { + k = open_terminal(console, O_RDWR); + if (k != STDIN_FILENO) { + if (k >= 0) { +- close_nointr_nofail(k); ++ safe_close(k); + k = -EINVAL; + } + +@@ -1335,8 +1333,7 @@ int main(int argc, char *argv[]) { + if (setup_kmsg(arg_directory, kmsg_socket_pair[1]) < 0) + goto child_fail; + +- close_nointr_nofail(kmsg_socket_pair[1]); +- kmsg_socket_pair[1] = -1; ++ kmsg_socket_pair[1] = safe_close(kmsg_socket_pair[1]); + + if (setup_boot_id(arg_directory) < 0) + goto child_fail; +@@ -1504,13 +1501,13 @@ int main(int argc, char *argv[]) { + } + + log_info("Init process in the container running as PID %lu.", (unsigned long) pid); +- close_nointr_nofail(pipefd[0]); +- close_nointr_nofail(pipefd[1]); ++ safe_close(pipefd[0]); ++ safe_close(pipefd[1]); + + /* Wait for the child process to establish cgroup hierarchy */ +- close_nointr_nofail(pipefd2[1]); ++ safe_close(pipefd2[1]); + fd_wait_for_event(pipefd2[0], POLLHUP, -1); +- close_nointr_nofail(pipefd2[0]); ++ safe_close(pipefd2[0]); + + fdset_free(fds); + fds = NULL; +diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c +index 6b74866..112f59c 100644 +--- a/src/readahead/readahead-collect.c ++++ b/src/readahead/readahead-collect.c +@@ -177,8 +177,7 @@ finish: + if (start != MAP_FAILED) + munmap(start, l); + +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -494,16 +493,12 @@ static int collect(const char *root) { + log_warning("readlink(%s) failed: %s", fn, strerror(-k)); + + next_iteration: +- if (m->fd >= 0) +- close_nointr_nofail(m->fd); ++ safe_close(m->fd); + } + } + + done: +- if (fanotify_fd >= 0) { +- close_nointr_nofail(fanotify_fd); +- fanotify_fd = -1; +- } ++ fanotify_fd = safe_close(fanotify_fd); + + log_debug("Writing Pack File..."); + +@@ -593,14 +588,9 @@ done: + log_debug("Done."); + + finish: +- if (fanotify_fd >= 0) +- close_nointr_nofail(fanotify_fd); +- +- if (signal_fd >= 0) +- close_nointr_nofail(signal_fd); +- +- if (inotify_fd >= 0) +- close_nointr_nofail(inotify_fd); ++ safe_close(fanotify_fd); ++ safe_close(signal_fd); ++ safe_close(inotify_fd); + + if (pack) { + fclose(pack); +diff --git a/src/readahead/readahead-common.c b/src/readahead/readahead-common.c +index 1edf9cc..49679fc 100644 +--- a/src/readahead/readahead-common.c ++++ b/src/readahead/readahead-common.c +@@ -218,7 +218,7 @@ int open_inotify(void) { + + if (inotify_add_watch(fd, "/run/systemd/readahead", IN_CREATE) < 0) { + log_error("Failed to watch /run/systemd/readahead: %m"); +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +diff --git a/src/readahead/readahead-replay.c b/src/readahead/readahead-replay.c +index cb04e5f..8dc1942 100644 +--- a/src/readahead/readahead-replay.c ++++ b/src/readahead/readahead-replay.c +@@ -67,10 +67,8 @@ static int unpack_file(FILE *pack) { + if (errno != ENOENT && errno != EPERM && errno != EACCES && errno != ELOOP) + log_warning("open(%s) failed: %m", fn); + +- } else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) { +- close_nointr_nofail(fd); +- fd = -1; +- } ++ } else if (file_verify(fd, fn, arg_file_size_max, &st) <= 0) ++ fd = safe_close(fd); + + if (fread(&inode, sizeof(inode), 1, pack) != 1) { + log_error("Premature end of pack file."); +@@ -81,10 +79,8 @@ static int unpack_file(FILE *pack) { + if (fd >= 0) { + /* If the inode changed the file got deleted, so just + * ignore this entry */ +- if (st.st_ino != (uint64_t) inode) { +- close_nointr_nofail(fd); +- fd = -1; +- } ++ if (st.st_ino != (uint64_t) inode) ++ fd = safe_close(fd); + } + + for (;;) { +@@ -129,8 +125,7 @@ static int unpack_file(FILE *pack) { + } + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -279,8 +274,7 @@ finish: + if (pack) + fclose(pack); + +- if (inotify_fd >= 0) +- close_nointr_nofail(inotify_fd); ++ safe_close(inotify_fd); + + free(pack_fn); + +diff --git a/src/reply-password/reply-password.c b/src/reply-password/reply-password.c +index 2f16898..c730216 100644 +--- a/src/reply-password/reply-password.c ++++ b/src/reply-password/reply-password.c +@@ -91,7 +91,8 @@ int main(int argc, char *argv[]) { + goto finish; + } + +- if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0)) < 0) { ++ fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0); ++ if (fd < 0) { + log_error("socket() failed: %m"); + goto finish; + } +@@ -102,8 +103,7 @@ int main(int argc, char *argv[]) { + r = EXIT_SUCCESS; + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c +index 25367d0..200876d 100644 +--- a/src/shared/ask-password-api.c ++++ b/src/shared/ask-password-api.c +@@ -231,8 +231,7 @@ int ask_password_tty( + r = 0; + + finish: +- if (notify >= 0) +- close_nointr_nofail(notify); ++ safe_close(notify); + + if (ttyfd >= 0) { + +@@ -241,7 +240,7 @@ finish: + tcsetattr(ttyfd, TCSADRAIN, &old_termios); + } + +- close_nointr_nofail(ttyfd); ++ safe_close(ttyfd); + } + + return r; +@@ -294,7 +293,7 @@ static int create_socket(char **name) { + return fd; + + fail: +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -528,19 +527,15 @@ int ask_password_agent( + r = 0; + + finish: +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (socket_name) { + unlink(socket_name); + free(socket_name); + } + +- if (socket_fd >= 0) +- close_nointr_nofail(socket_fd); +- +- if (signal_fd >= 0) +- close_nointr_nofail(signal_fd); ++ safe_close(socket_fd); ++ safe_close(signal_fd); + + if (f) + fclose(f); +diff --git a/src/shared/dbus-loop.c b/src/shared/dbus-loop.c +index c533242..aadb641 100644 +--- a/src/shared/dbus-loop.c ++++ b/src/shared/dbus-loop.c +@@ -75,7 +75,7 @@ static dbus_bool_t add_watch(DBusWatch *watch, void *data) { + return FALSE; + + if (epoll_ctl(PTR_TO_INT(data), EPOLL_CTL_ADD, e->fd, &ev) < 0) { +- close_nointr_nofail(e->fd); ++ safe_close(e->fd); + return FALSE; + } + +@@ -99,8 +99,7 @@ static void remove_watch(DBusWatch *watch, void *data) { + + assert_se(epoll_ctl(PTR_TO_INT(data), EPOLL_CTL_DEL, e->fd, NULL) >= 0); + +- if (e->fd_is_dupped) +- close_nointr_nofail(e->fd); ++ safe_close(e->fd); + } + + static void toggle_watch(DBusWatch *watch, void *data) { +@@ -167,8 +166,7 @@ static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data) { + return TRUE; + + fail: +- if (e->fd >= 0) +- close_nointr_nofail(e->fd); ++ safe_close(e->fd); + + free(e); + return FALSE; +@@ -184,7 +182,7 @@ static void remove_timeout(DBusTimeout *timeout, void *data) { + return; + + assert_se(epoll_ctl(PTR_TO_INT(data), EPOLL_CTL_DEL, e->fd, NULL) >= 0); +- close_nointr_nofail(e->fd); ++ safe_close(e->fd); + } + + static void toggle_timeout(DBusTimeout *timeout, void *data) { +@@ -213,7 +211,7 @@ int bus_loop_open(DBusConnection *c) { + + if (!dbus_connection_set_watch_functions(c, add_watch, remove_watch, toggle_watch, INT_TO_PTR(fd), NULL) || + !dbus_connection_set_timeout_functions(c, add_timeout, remove_timeout, toggle_timeout, INT_TO_PTR(fd), NULL)) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -ENOMEM; + } + +diff --git a/src/shared/fdset.c b/src/shared/fdset.c +index fd27398..a2c861d 100644 +--- a/src/shared/fdset.c ++++ b/src/shared/fdset.c +@@ -82,7 +82,7 @@ int fdset_put_dup(FDSet *s, int fd) { + + r = fdset_put(s, copy); + if (r < 0) { +- close_nointr_nofail(copy); ++ safe_close(copy); + return r; + } + +diff --git a/src/shared/hwclock.c b/src/shared/hwclock.c +index 17f12de..10c6537 100644 +--- a/src/shared/hwclock.c ++++ b/src/shared/hwclock.c +@@ -62,7 +62,7 @@ int hwclock_get_time(struct tm *tm) { + * to confused mktime(). */ + tm->tm_isdst = -1; + +- close_nointr_nofail(fd); ++ safe_close(fd); + + return err; + } +@@ -80,7 +80,7 @@ int hwclock_set_time(const struct tm *tm) { + if (ioctl(fd, RTC_SET_TIME, tm) < 0) + err = -errno; + +- close_nointr_nofail(fd); ++ safe_close(fd); + + return err; + } +diff --git a/src/shared/install.c b/src/shared/install.c +index cb07947..241e000 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -207,7 +207,7 @@ static int remove_marked_symlinks_fd( + + d = fdopendir(fd); + if (!d) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -248,7 +248,7 @@ static int remove_marked_symlinks_fd( + + p = path_make_absolute(de->d_name, path); + if (!p) { +- close_nointr_nofail(nfd); ++ safe_close(nfd); + return -ENOMEM; + } + +@@ -348,7 +348,7 @@ static int remove_marked_symlinks( + r = q; + } while (deleted); + +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } +@@ -371,7 +371,7 @@ static int find_symlinks_fd( + + d = fdopendir(fd); + if (!d) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -408,7 +408,7 @@ static int find_symlinks_fd( + + p = path_make_absolute(de->d_name, path); + if (!p) { +- close_nointr_nofail(nfd); ++ safe_close(nfd); + return -ENOMEM; + } + +@@ -1013,7 +1013,7 @@ static int unit_file_load( + + f = fdopen(fd, "re"); + if (!f) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -ENOMEM; + } + +diff --git a/src/shared/log.c b/src/shared/log.c +index 2267764..039cbbe 100644 +--- a/src/shared/log.c ++++ b/src/shared/log.c +@@ -62,7 +62,7 @@ void log_close_console(void) { + + if (getpid() == 1) { + if (console_fd >= 3) +- close_nointr_nofail(console_fd); ++ safe_close(console_fd); + + console_fd = -1; + } +@@ -84,12 +84,7 @@ static int log_open_console(void) { + } + + void log_close_kmsg(void) { +- +- if (kmsg_fd < 0) +- return; +- +- close_nointr_nofail(kmsg_fd); +- kmsg_fd = -1; ++ kmsg_fd = safe_close(kmsg_fd); + } + + static int log_open_kmsg(void) { +@@ -105,12 +100,7 @@ static int log_open_kmsg(void) { + } + + void log_close_syslog(void) { +- +- if (syslog_fd < 0) +- return; +- +- close_nointr_nofail(syslog_fd); +- syslog_fd = -1; ++ syslog_fd = safe_close(syslog_fd); + } + + static int create_log_socket(int type) { +@@ -152,7 +142,7 @@ static int log_open_syslog(void) { + } + + if (connect(syslog_fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path)) < 0) { +- close_nointr_nofail(syslog_fd); ++ safe_close(syslog_fd); + + /* Some legacy syslog systems still use stream + * sockets. They really shouldn't. But what can we +@@ -180,12 +170,7 @@ fail: + } + + void log_close_journal(void) { +- +- if (journal_fd < 0) +- return; +- +- close_nointr_nofail(journal_fd); +- journal_fd = -1; ++ journal_fd = safe_close(journal_fd); + } + + static int log_open_journal(void) { +diff --git a/src/shared/socket-label.c b/src/shared/socket-label.c +index ff212de..e4382d5 100644 +--- a/src/shared/socket-label.c ++++ b/src/shared/socket-label.c +@@ -138,6 +138,6 @@ int socket_address_listen( + + fail: + r = -errno; +- close_nointr_nofail(fd); ++ safe_close(fd); + return r; + } +diff --git a/src/shared/spawn-polkit-agent.c b/src/shared/spawn-polkit-agent.c +index f9e52cd..fccf1e9 100644 +--- a/src/shared/spawn-polkit-agent.c ++++ b/src/shared/spawn-polkit-agent.c +@@ -61,7 +61,7 @@ int polkit_agent_open(void) { + POLKIT_AGENT_BINARY_PATH, "--notify-fd", notify_fd, "--fallback", NULL); + + /* Close the writing side, because that's the one for the agent */ +- close_nointr_nofail(pipe_fd[1]); ++ safe_close(pipe_fd[1]); + + if (r < 0) + log_error("Failed to fork TTY ask password agent: %s", strerror(-r)); +@@ -69,7 +69,7 @@ int polkit_agent_open(void) { + /* Wait until the agent closes the fd */ + fd_wait_for_event(pipe_fd[0], POLLHUP, (usec_t) -1); + +- close_nointr_nofail(pipe_fd[0]); ++ safe_close(pipe_fd[0]); + + return r; + } +diff --git a/src/shared/util.c b/src/shared/util.c +index 533db92..9f5ee53 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -173,13 +173,22 @@ int close_nointr(int fd) { + return -errno; + } + +-void close_nointr_nofail(int fd) { +- PROTECT_ERRNO; ++int safe_close(int fd) { + +- /* like close_nointr() but cannot fail, and guarantees errno +- * is unchanged */ ++ /* ++ * Like close_nointr() but cannot fail. Guarantees errno is ++ * unchanged. Is a NOP with negative fds passed, and returns ++ * -1, so that it can be used in this syntax: ++ * ++ * fd = safe_close(fd); ++ */ + +- assert_se(close_nointr(fd) == 0); ++ if (fd >= 0) { ++ PROTECT_ERRNO; ++ assert_se(close_nointr(fd) == 0); ++ } ++ ++ return -1; + } + + void close_many(const int fds[], unsigned n_fd) { +@@ -188,7 +197,7 @@ void close_many(const int fds[], unsigned n_fd) { + assert(fds || n_fd <= 0); + + for (i = 0; i < n_fd; i++) +- close_nointr_nofail(fds[i]); ++ safe_close(fds[i]); + } + + int unlink_noerrno(const char *path) { +@@ -1834,16 +1843,13 @@ finish: + } + + int reset_terminal(const char *name) { +- int fd, r; ++ _cleanup_close_ int fd = -1; + + fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC); + if (fd < 0) + return fd; + +- r = reset_terminal_fd(fd, true); +- close_nointr_nofail(fd); +- +- return r; ++ return reset_terminal_fd(fd, true); + } + + int open_terminal(const char *name, int mode) { +@@ -1882,12 +1888,12 @@ int open_terminal(const char *name, int mode) { + + r = isatty(fd); + if (r < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + + if (!r) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -ENOTTY; + } + +@@ -2076,11 +2082,10 @@ int acquire_terminal( + * ended our handle will be dead. It's important that + * we do this after sleeping, so that we don't enter + * an endless loop. */ +- close_nointr_nofail(fd); ++ safe_close(fd); + } + +- if (notify >= 0) +- close_nointr_nofail(notify); ++ safe_close(notify); + + r = reset_terminal_fd(fd, true); + if (r < 0) +@@ -2089,11 +2094,8 @@ int acquire_terminal( + return fd; + + fail: +- if (fd >= 0) +- close_nointr_nofail(fd); +- +- if (notify >= 0) +- close_nointr_nofail(notify); ++ safe_close(fd); ++ safe_close(notify); + + return r; + } +@@ -2391,7 +2393,7 @@ int make_stdio(int fd) { + t = dup3(fd, STDERR_FILENO, 0); + + if (fd >= 3) +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (r < 0 || s < 0 || t < 0) + return -errno; +@@ -2772,7 +2774,7 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct + + d = fdopendir(fd); + if (!d) { +- close_nointr_nofail(fd); ++ safe_close(fd); + + return errno == ENOENT ? 0 : -errno; + } +@@ -2867,7 +2869,7 @@ int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root + assert(fd >= 0); + + if (fstatfs(fd, &s) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + +@@ -2876,7 +2878,7 @@ int rm_rf_children(int fd, bool only_dirs, bool honour_sticky, struct stat *root + * non-state data */ + if (!is_temporary_fs(&s)) { + log_error("Attempted to remove disk file system, and we can't allow that."); +- close_nointr_nofail(fd); ++ safe_close(fd); + return -EPERM; + } + +@@ -2922,13 +2924,13 @@ static int rm_rf_internal(const char *path, bool only_dirs, bool delete_root, bo + + if (!dangerous) { + if (fstatfs(fd, &s) < 0) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return -errno; + } + + if (!is_temporary_fs(&s)) { + log_error("Attempted to remove disk file system, and we can't allow that."); +- close_nointr_nofail(fd); ++ safe_close(fd); + return -EPERM; + } + } +@@ -3394,7 +3396,6 @@ int touch(const char *path) { + if (fd < 0) + return -errno; + +- close_nointr_nofail(fd); + return 0; + } + +@@ -3557,7 +3558,7 @@ DIR *xopendirat(int fd, const char *name, int flags) { + + d = fdopendir(nfd); + if (!d) { +- close_nointr_nofail(nfd); ++ safe_close(nfd); + return NULL; + } + +@@ -4055,16 +4056,13 @@ int terminal_vhangup_fd(int fd) { + } + + int terminal_vhangup(const char *name) { +- int fd, r; ++ _cleanup_close_ int fd; + + fd = open_terminal(name, O_RDWR|O_NOCTTY|O_CLOEXEC); + if (fd < 0) + return fd; + +- r = terminal_vhangup_fd(fd); +- close_nointr_nofail(fd); +- +- return r; ++ return terminal_vhangup_fd(fd); + } + + int vt_disallocate(const char *name) { +@@ -4091,7 +4089,7 @@ int vt_disallocate(const char *name) { + "\033[H" /* move home */ + "\033[2J", /* clear screen */ + 10, false); +- close_nointr_nofail(fd); ++ safe_close(fd); + + return 0; + } +@@ -4112,7 +4110,7 @@ int vt_disallocate(const char *name) { + return fd; + + r = ioctl(fd, VT_DISALLOCATE, u); +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (r >= 0) + return 0; +@@ -4131,7 +4129,7 @@ int vt_disallocate(const char *name) { + "\033[H" /* move home */ + "\033[3J", /* clear screen including scrollback, requires Linux 2.6.40 */ + 10, false); +- close_nointr_nofail(fd); ++ safe_close(fd); + + return 0; + } +@@ -4148,7 +4146,7 @@ int copy_file(const char *from, const char *to) { + + fdt = open(to, O_WRONLY|O_CREAT|O_EXCL|O_CLOEXEC|O_NOCTTY, 0644); + if (fdt < 0) { +- close_nointr_nofail(fdf); ++ safe_close(fdf); + return -errno; + } + +@@ -4160,7 +4158,7 @@ int copy_file(const char *from, const char *to) { + if (n < 0) { + r = -errno; + +- close_nointr_nofail(fdf); ++ safe_close(fdf); + close_nointr(fdt); + unlink(to); + +@@ -4175,7 +4173,7 @@ int copy_file(const char *from, const char *to) { + if (n != k) { + r = k < 0 ? k : (errno ? -errno : -EIO); + +- close_nointr_nofail(fdf); ++ safe_close(fdf); + close_nointr(fdt); + + unlink(to); +@@ -4183,7 +4181,7 @@ int copy_file(const char *from, const char *to) { + } + } + +- close_nointr_nofail(fdf); ++ safe_close(fdf); + r = close_nointr(fdt); + + if (r < 0) { +@@ -5669,7 +5667,7 @@ int on_ac_power(void) { + if (n != 6 || memcmp(contents, "Mains\n", 6)) + continue; + +- close_nointr_nofail(fd); ++ safe_close(fd); + fd = openat(device, "online", O_RDONLY|O_CLOEXEC|O_NOCTTY); + if (fd < 0) { + if (errno == ENOENT) +diff --git a/src/shared/util.h b/src/shared/util.h +index a173885..e83d2ab 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -125,7 +125,8 @@ char *endswith(const char *s, const char *postfix) _pure_; + bool first_word(const char *s, const char *word) _pure_; + + int close_nointr(int fd); +-void close_nointr_nofail(int fd); ++int safe_close(int fd); ++ + void close_many(const int fds[], unsigned n_fd); + + int parse_boolean(const char *v) _pure_; +@@ -565,8 +566,7 @@ static inline void freep(void *p) { + struct __useless_struct_to_allow_trailing_semicolon__ + + static inline void closep(int *fd) { +- if (*fd >= 0) +- close_nointr_nofail(*fd); ++ safe_close(*fd); + } + + static inline void umaskp(mode_t *u) { +diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c +index ddbe7af..ba9ad9b 100644 +--- a/src/shared/watchdog.c ++++ b/src/shared/watchdog.c +@@ -164,6 +164,5 @@ void watchdog_close(bool disarm) { + } + } + +- close_nointr_nofail(watchdog_fd); +- watchdog_fd = -1; ++ watchdog_fd = safe_close(watchdog_fd); + } +diff --git a/src/shutdownd/shutdownd.c b/src/shutdownd/shutdownd.c +index 461a726..886380d 100644 +--- a/src/shutdownd/shutdownd.c ++++ b/src/shutdownd/shutdownd.c +@@ -438,8 +438,7 @@ int main(int argc, char *argv[]) { + finish: + + for (i = 0; i < _FD_MAX; i++) +- if (pollfd[i].fd >= 0) +- close_nointr_nofail(pollfd[i].fd); ++ safe_close(pollfd[i].fd); + + if (unlink_nologin) + unlink("/run/nologin"); +diff --git a/src/test/test-util.c b/src/test/test-util.c +index 7566adc..34b7db8 100644 +--- a/src/test/test-util.c ++++ b/src/test/test-util.c +@@ -64,7 +64,7 @@ static void test_close_many(void) { + assert_se(fcntl(fds[1], F_GETFD) == -1); + assert_se(fcntl(fds[2], F_GETFD) >= 0); + +- close_nointr_nofail(fds[2]); ++ safe_close(fds[2]); + + unlink(name0); + unlink(name1); +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 98d01a1..4244656 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -489,7 +489,7 @@ static int write_one_file(Item *i, const char *path) { + + unescaped = cunescape(i->argument); + if (unescaped == NULL) { +- close_nointr_nofail(fd); ++ safe_close(fd); + return log_oom(); + } + +@@ -498,12 +498,12 @@ static int write_one_file(Item *i, const char *path) { + + if (n < 0 || (size_t) n < l) { + log_error("Failed to write file %s: %s", path, n < 0 ? strerror(-n) : "Short write"); +- close_nointr_nofail(fd); ++ safe_close(fd); + return n < 0 ? n : -EIO; + } + } + +- close_nointr_nofail(fd); ++ safe_close(fd); + + if (stat(path, &st) < 0) { + log_error("stat(%s) failed: %m", path); +diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c +index 256c21d..cb74c72 100644 +--- a/src/tty-ask-password-agent/tty-ask-password-agent.c ++++ b/src/tty-ask-password-agent/tty-ask-password-agent.c +@@ -234,11 +234,8 @@ static int ask_password_plymouth( + r = 0; + + finish: +- if (notify >= 0) +- close_nointr_nofail(notify); +- +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(notify); ++ safe_close(fd); + + free(packet); + +@@ -374,7 +371,7 @@ static int parse_password(const char *filename, char **wall) { + r = ask_password_tty(message, not_after, filename, &password); + + if (arg_console) { +- close_nointr_nofail(tty_fd); ++ safe_close(tty_fd); + release_terminal(); + } + +@@ -421,8 +418,7 @@ static int parse_password(const char *filename, char **wall) { + finish: + fclose(f); + +- if (socket_fd >= 0) +- close_nointr_nofail(socket_fd); ++ safe_close(socket_fd); + + free(packet); + free(socket_name); +@@ -494,7 +490,7 @@ static bool wall_tty_match(const char *path) { + return true; + + /* What, we managed to open the pipe? Then this tty is filtered. */ +- close_nointr_nofail(fd); ++ safe_close(fd); + return false; + } + +@@ -616,14 +612,9 @@ static int watch_passwords(void) { + r = 0; + + finish: +- if (notify >= 0) +- close_nointr_nofail(notify); +- +- if (signal_fd >= 0) +- close_nointr_nofail(signal_fd); +- +- if (tty_block_fd >= 0) +- close_nointr_nofail(tty_block_fd); ++ safe_close(notify); ++ safe_close(signal_fd); ++ safe_close(tty_block_fd); + + return r; + } +diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c +index 1bbf737..0f2b706 100644 +--- a/src/vconsole/vconsole-setup.c ++++ b/src/vconsole/vconsole-setup.c +@@ -301,8 +301,7 @@ finish: + free(vc_font_map); + free(vc_font_unimap); + +- if (fd >= 0) +- close_nointr_nofail(fd); ++ safe_close(fd); + + return r; + } diff --git a/0408-async-add-asynchronous-close-call.patch b/0408-async-add-asynchronous-close-call.patch new file mode 100644 index 0000000..1d18673 --- /dev/null +++ b/0408-async-add-asynchronous-close-call.patch @@ -0,0 +1,60 @@ +From d4a04f2dc731b9109b560f53e37a6ad54581227c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 2 May 2014 17:56:05 +0200 +Subject: [PATCH] async: add asynchronous close() call + +(cherry picked from commit 8a474b0c04a5a3608dda53edc1ddaa932ba177bf) +(cherry picked from commit 43f1b28bc457c92f85332dda752d5426cde466ae) +--- + src/core/async.c | 22 ++++++++++++++++++++++ + src/core/async.h | 2 ++ + 2 files changed, 24 insertions(+) + +diff --git a/src/core/async.c b/src/core/async.c +index af527be..3876ded 100644 +--- a/src/core/async.c ++++ b/src/core/async.c +@@ -24,6 +24,7 @@ + + #include "async.h" + #include "log.h" ++#include "util.h" + + int asynchronous_job(void* (*func)(void *p), void *arg) { + pthread_attr_t a; +@@ -70,3 +71,24 @@ int asynchronous_sync(void) { + + return asynchronous_job(sync_thread, NULL); + } ++ ++static void *close_thread(void *p) { ++ safe_close(PTR_TO_INT(p)); ++ return NULL; ++} ++ ++int asynchronous_close(int fd) { ++ int r; ++ ++ /* This is supposed to behave similar to safe_close(), but ++ * actually invoke close() asynchronously, so that it will ++ * never block. Ideally the kernel would have an API for this, ++ * but it doesn't, so we work around it, and hide this as a ++ * far away as we can. */ ++ ++ r = asynchronous_job(close_thread, INT_TO_PTR(fd)); ++ if (r < 0) ++ safe_close(fd); ++ ++ return -1; ++} +diff --git a/src/core/async.h b/src/core/async.h +index 6601b4d..7f1ef79 100644 +--- a/src/core/async.h ++++ b/src/core/async.h +@@ -22,4 +22,6 @@ + ***/ + + int asynchronous_job(void* (*func)(void *p), void *arg); ++ + int asynchronous_sync(void); ++int asynchronous_close(int fd); diff --git a/0409-core-close-socket-fds-asynchronously.patch b/0409-core-close-socket-fds-asynchronously.patch new file mode 100644 index 0000000..d9e20b7 --- /dev/null +++ b/0409-core-close-socket-fds-asynchronously.patch @@ -0,0 +1,42 @@ +From fc8f646e68209896c316b98af9f69c497052bc57 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 13 May 2014 23:22:13 +0200 +Subject: [PATCH] core: close socket fds asynchronously + +http://lists.freedesktop.org/archives/systemd-devel/2014-April/018928.html +(cherry picked from commit 574634bcacb01efe15ca2742effd461a5b7afb5f) +(cherry picked from commit ea74f003b0cbc37e76a2ad72460bfb317b880147) +--- + src/core/service.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/core/service.c b/src/core/service.c +index f0df5fe..9fd58fa 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -25,6 +25,7 @@ + #include + #include + ++#include "async.h" + #include "manager.h" + #include "unit.h" + #include "service.h" +@@ -222,7 +223,7 @@ static void service_close_socket_fd(Service *s) { + if (s->socket_fd < 0) + return; + +- s->socket_fd = safe_close(s->socket_fd); ++ s->socket_fd = asynchronous_close(s->socket_fd); + } + + static void service_connection_unref(Service *s) { +@@ -2793,7 +2794,7 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value, + log_debug_unit(u->id, "Failed to parse socket-fd value %s", value); + else { + +- safe_close(s->socket_fd); ++ asynchronous_close(s->socket_fd); + s->socket_fd = fdset_remove(fds, fd); + } + } else if (streq(key, "main-exec-status-pid")) { diff --git a/0410-logind-bring-polkit-policy-for-hibernate-in-line-wit.patch b/0410-logind-bring-polkit-policy-for-hibernate-in-line-wit.patch new file mode 100644 index 0000000..0ea49b1 --- /dev/null +++ b/0410-logind-bring-polkit-policy-for-hibernate-in-line-wit.patch @@ -0,0 +1,28 @@ +From 225adb95284a04f7cbacbb44eedf63097ae73484 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 15 May 2014 18:30:07 +0200 +Subject: [PATCH] logind: bring polkit policy for hibernate in line with + suspend/poweroff/reboot + +THere's no reason why hibernate should be better protected then +suspendor poweroff, so sync the policies. + +(cherry picked from commit 301f9684e6465df5d0590f6c571fe3229ded966d) +(cherry picked from commit 219b39885311455d16fd03922e043f93d8c35595) +--- + src/login/org.freedesktop.login1.policy.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/login/org.freedesktop.login1.policy.in b/src/login/org.freedesktop.login1.policy.in +index b96d32d..b8e90f1 100644 +--- a/src/login/org.freedesktop.login1.policy.in ++++ b/src/login/org.freedesktop.login1.policy.in +@@ -254,7 +254,7 @@ + + auth_admin_keep + auth_admin_keep +- auth_admin_keep ++ yes + + org.freedesktop.login1.hibernate + diff --git a/0411-unit.c-Move-code-around-to-easy-cherrypicking.patch b/0411-unit.c-Move-code-around-to-easy-cherrypicking.patch new file mode 100644 index 0000000..ac12ea3 --- /dev/null +++ b/0411-unit.c-Move-code-around-to-easy-cherrypicking.patch @@ -0,0 +1,52 @@ +From 6b96332ddae5adff2e73002ccea1c1a32f8fd679 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 17 Jun 2014 15:04:08 -0400 +Subject: [PATCH] unit.c: Move code around to easy cherrypicking + +--- + src/core/unit.c | 25 ++++++++++++------------- + 1 file changed, 12 insertions(+), 13 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index c05926a..29782aa 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2300,19 +2300,6 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { + if (r < 0) + return r; + +- +- if (serialize_jobs) { +- if (u->job) { +- fprintf(f, "job\n"); +- job_serialize(u->job, f, fds); +- } +- +- if (u->nop_job) { +- fprintf(f, "job\n"); +- job_serialize(u->nop_job, f, fds); +- } +- } +- + dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->inactive_exit_timestamp); + dual_timestamp_serialize(f, "active-enter-timestamp", &u->active_enter_timestamp); + dual_timestamp_serialize(f, "active-exit-timestamp", &u->active_exit_timestamp); +@@ -2327,6 +2314,18 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { + if (u->cgroup_path) + unit_serialize_item(u, f, "cgroup", u->cgroup_path); + ++ if (serialize_jobs) { ++ if (u->job) { ++ fprintf(f, "job\n"); ++ job_serialize(u->job, f, fds); ++ } ++ ++ if (u->nop_job) { ++ fprintf(f, "job\n"); ++ job_serialize(u->nop_job, f, fds); ++ } ++ } ++ + /* End marker */ + fputc('\n', f); + return 0; diff --git a/0412-core-make-sure-to-serialize-jobs-for-all-units.patch b/0412-core-make-sure-to-serialize-jobs-for-all-units.patch new file mode 100644 index 0000000..137eb2e --- /dev/null +++ b/0412-core-make-sure-to-serialize-jobs-for-all-units.patch @@ -0,0 +1,80 @@ +From d7b501f46d80de21cb1c0f1bd87a71b7978de5e4 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 16 May 2014 01:15:03 +0200 +Subject: [PATCH] core: make sure to serialize jobs for all units + +Previously we wouldn't serialize jobs for units that themselves have +nothing to serialize. + +http://lists.freedesktop.org/archives/systemd-devel/2014-May/019051.html +(cherry picked from commit 9bdb98c59451ed090f8d35d470a54710f389ce71) +(cherry picked from commit 75ee3c9da1441e0f67d502e56e9167f0ef23201b) + +Conflicts: + src/core/unit.c +--- + src/core/manager.c | 3 --- + src/core/unit.c | 22 ++++++++++------------ + 2 files changed, 10 insertions(+), 15 deletions(-) + +diff --git a/src/core/manager.c b/src/core/manager.c +index 1e7dc38..e75550b 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -2166,9 +2166,6 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) { + if (u->id != t) + continue; + +- if (!unit_can_serialize(u)) +- continue; +- + /* Start marker */ + fputs(u->id, f); + fputc('\n', f); +diff --git a/src/core/unit.c b/src/core/unit.c +index 29782aa..5226963 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -2293,12 +2293,11 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds, bool serialize_jobs) { + assert(f); + assert(fds); + +- if (!unit_can_serialize(u)) +- return 0; +- +- r = UNIT_VTABLE(u)->serialize(u, f, fds); +- if (r < 0) +- return r; ++ if (unit_can_serialize(u)) { ++ r = UNIT_VTABLE(u)->serialize(u, f, fds); ++ if (r < 0) ++ return r; ++ } + + dual_timestamp_serialize(f, "inactive-exit-timestamp", &u->inactive_exit_timestamp); + dual_timestamp_serialize(f, "active-enter-timestamp", &u->active_enter_timestamp); +@@ -2365,9 +2364,6 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { + assert(f); + assert(fds); + +- if (!unit_can_serialize(u)) +- return 0; +- + for (;;) { + char line[LINE_MAX], *l, *v; + size_t k; +@@ -2480,9 +2476,11 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) { + continue; + } + +- r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); +- if (r < 0) +- return r; ++ if (unit_can_serialize(u)) { ++ r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds); ++ if (r < 0) ++ return r; ++ } + } + } + diff --git a/0413-man-clarify-that-the-ExecReload-command-should-be-sy.patch b/0413-man-clarify-that-the-ExecReload-command-should-be-sy.patch new file mode 100644 index 0000000..5f87d7e --- /dev/null +++ b/0413-man-clarify-that-the-ExecReload-command-should-be-sy.patch @@ -0,0 +1,38 @@ +From 4fbf365ae4de8f1654ec41d852b3ca7aea2387ab Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 16 May 2014 01:33:22 +0200 +Subject: [PATCH] man: clarify that the ExecReload= command should be + synchronous + +http://lists.freedesktop.org/archives/systemd-devel/2014-May/019054.html +(cherry picked from commit 33169701b0640d3629d4c36cf8c71dc26d2cb7e1) +(cherry picked from commit e3f71240733a153605a68e521ef5892e3cdf88f7) +--- + man/systemd.service.xml | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/man/systemd.service.xml b/man/systemd.service.xml +index 50b19a8..f549e89 100644 +--- a/man/systemd.service.xml ++++ b/man/systemd.service.xml +@@ -519,6 +519,20 @@ ExecStart=/bin/echo $ONE $TWO ${TWO} + following: + + /bin/kill -HUP $MAINPID ++ ++ Note however that reloading a ++ daemon by sending a signal (as with ++ the example line above) is usually not ++ a good choice, because this is an ++ asynchronous operation and hence not ++ suitable to order reloads of multiple ++ services against each other. It is ++ strongly recommended to set ++ ExecReload= to a ++ command that no only triggers a ++ configuration reload of the daemon, ++ but also synchronously waits for it ++ complete. + + + diff --git a/0414-man-readahead-fix-cmdline-switch-inconsistency-betwe.patch b/0414-man-readahead-fix-cmdline-switch-inconsistency-betwe.patch new file mode 100644 index 0000000..aa07c74 --- /dev/null +++ b/0414-man-readahead-fix-cmdline-switch-inconsistency-betwe.patch @@ -0,0 +1,45 @@ +From 28bebf333d85c5c8e66d81bae2912ddb93115159 Mon Sep 17 00:00:00 2001 +From: Alison Chaiken +Date: Fri, 16 May 2014 09:25:53 +0200 +Subject: [PATCH] man: readahead: fix cmdline switch inconsistency between + readahead.c and docs + +Source code has "files-max" and XML has --max-files. + +(cherry picked from commit 332bc31992acffc6f32e194c0122e01607bd0e27) +(cherry picked from commit 78db70d9c7da6ad48291047bad1ab2f4e80795e7) + +Conflicts: + man/systemd-readahead-replay.service.xml + src/readahead/readahead.c +--- + man/systemd-readahead-replay.service.xml | 2 +- + src/readahead/readahead.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/systemd-readahead-replay.service.xml b/man/systemd-readahead-replay.service.xml +index 806d460..8a1f47a 100644 +--- a/man/systemd-readahead-replay.service.xml ++++ b/man/systemd-readahead-replay.service.xml +@@ -124,7 +124,7 @@ + + + +- ++ + + Maximum number of + files to read ahead. Only valid +diff --git a/src/readahead/readahead.c b/src/readahead/readahead.c +index 29255c9..78bf837 100644 +--- a/src/readahead/readahead.c ++++ b/src/readahead/readahead.c +@@ -40,7 +40,7 @@ static int help(void) { + printf("%s [OPTIONS...] collect [DIRECTORY]\n\n" + "Collect read-ahead data on early boot.\n\n" + " -h --help Show this help\n" +- " --max-files=INT Maximum number of files to read ahead\n" ++ " --files-max=INT Maximum number of files to read ahead\n" + " --file-size-max=BYTES Maximum size of files to read ahead\n" + " --timeout=USEC Maximum time to spend collecting data\n\n\n", + program_invocation_short_name); diff --git a/0415-build-sys-at-configure-check-for-verifying-that-ln-s.patch b/0415-build-sys-at-configure-check-for-verifying-that-ln-s.patch new file mode 100644 index 0000000..4aaa690 --- /dev/null +++ b/0415-build-sys-at-configure-check-for-verifying-that-ln-s.patch @@ -0,0 +1,28 @@ +From aef39ea7f11682302fad514d57280b561c629ef7 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 16 May 2014 16:51:42 +0200 +Subject: [PATCH] build-sys: at configure check for verifying that ln supports + --relative + +(cherry picked from commit 446883528524429283626208928b51f49f28f810) +(cherry picked from commit 3d3e1a52a3636ea38dcf6c7ac3eed0b444dfb054) + +Conflicts: + configure.ac +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 9af56ab..9605b38 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -78,6 +78,8 @@ AC_PATH_PROG([KMOD], [kmod], [/usr/bin/kmod], [$PATH:/usr/sbin:/sbin]) + + AC_PATH_PROG([KEXEC], [kexec], [/usr/sbin/kexec], [$PATH:/usr/sbin:/sbin]) + ++AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't support --relative ***])]) ++ + # gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line + m4_ifdef([GTK_DOC_CHECK], [ + GTK_DOC_CHECK([1.18],[--flavour no-tmpl])], diff --git a/0416-man-update-journald-rate-limit-defaults.patch b/0416-man-update-journald-rate-limit-defaults.patch new file mode 100644 index 0000000..2f1defb --- /dev/null +++ b/0416-man-update-journald-rate-limit-defaults.patch @@ -0,0 +1,28 @@ +From c8f2171222a497a47b9f024e3c87bb0199eeb218 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= +Date: Wed, 30 Apr 2014 19:53:13 +0300 +Subject: [PATCH] man: update journald rate limit defaults + +This brings the man page back into sync with the actual code. + +(cherry picked from commit 8f18f550e7023948f199616fdfbb0f09711fd615) +(cherry picked from commit 430015550fe479455aeba7b4362bfa578cf75e2b) +--- + man/journald.conf.xml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/man/journald.conf.xml b/man/journald.conf.xml +index 27c326e..77ecd5d 100644 +--- a/man/journald.conf.xml ++++ b/man/journald.conf.xml +@@ -190,8 +190,8 @@ + limiting is applied per-service, so + that two services which log do not + interfere with each other's +- limits. Defaults to 200 messages in +- 10s. The time specification for ++ limits. Defaults to 1000 messages in ++ 30s. The time specification for + RateLimitInterval= + may be specified in the following + units: s, diff --git a/0417-nspawn-properly-format-container_uuid-in-UUID-format.patch b/0417-nspawn-properly-format-container_uuid-in-UUID-format.patch new file mode 100644 index 0000000..ae79af4 --- /dev/null +++ b/0417-nspawn-properly-format-container_uuid-in-UUID-format.patch @@ -0,0 +1,55 @@ +From 32983c9617894c203ef4a604d407444f76195b67 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 16 May 2014 19:37:19 +0200 +Subject: [PATCH] nspawn: properly format container_uuid in UUID format + +http://lists.freedesktop.org/archives/systemd-devel/2014-April/018971.html +(cherry picked from commit 9f24adc288de142d6606fde3c5a5971613f3b6b9) +(cherry picked from commit e0036127752b25d87405e3ee508d4dbe41a23b7d) +--- + src/nspawn/nspawn.c | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index adc682d..028dbe3 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -561,6 +561,15 @@ static int setup_resolv_conf(const char *dest) { + return 0; + } + ++static char* id128_format_as_uuid(sd_id128_t id, char s[37]) { ++ ++ snprintf(s, 37, ++ "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", ++ SD_ID128_FORMAT_VAL(id)); ++ ++ return s; ++} ++ + static int setup_boot_id(const char *dest) { + _cleanup_free_ char *from = NULL, *to = NULL; + sd_id128_t rnd; +@@ -583,10 +592,7 @@ static int setup_boot_id(const char *dest) { + return r; + } + +- snprintf(as_uuid, sizeof(as_uuid), +- "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", +- SD_ID128_FORMAT_VAL(rnd)); +- char_array_0(as_uuid); ++ id128_format_as_uuid(rnd, as_uuid); + + r = write_string_file(from, as_uuid); + if (r < 0) { +@@ -1446,7 +1452,9 @@ int main(int argc, char *argv[]) { + } + + if (!sd_id128_equal(arg_uuid, SD_ID128_NULL)) { +- if (asprintf((char**)(envp + n_env++), "container_uuid=" SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(arg_uuid)) < 0) { ++ char as_uuid[37]; ++ ++ if (asprintf((char**)(envp + n_env++), "container_uuid=%s", id128_format_as_uuid(arg_uuid, as_uuid)) < 0) { + log_oom(); + goto child_fail; + } diff --git a/0418-core-reindent-selinux-ima-smack-setup.c.patch b/0418-core-reindent-selinux-ima-smack-setup.c.patch new file mode 100644 index 0000000..4d3b8c7 --- /dev/null +++ b/0418-core-reindent-selinux-ima-smack-setup.c.patch @@ -0,0 +1,183 @@ +From 414550a53586b95e2a220f630f320a5908ee6d26 Mon Sep 17 00:00:00 2001 +From: Will Woods +Date: Fri, 25 Apr 2014 18:26:33 -0400 +Subject: [PATCH] core: reindent {selinux, ima, smack}-setup.c + +7-space indentation is just too weird to leave alone. +Make it 8 spaces, as per CODING_STYLE. No other changes. + +(cherry picked from commit 4ab72d6fb499c2b4d8baced9fa94a8bbfa5a4b3d) + +Conflicts: + src/core/ima-setup.c + +[zj: just selinux-setup.c, as needed for futher commits.] + +(cherry picked from commit 31b1d7a4f7358cdbc632e4cd2b61bef8fa34d281) +--- + src/core/selinux-setup.c | 152 +++++++++++++++++++++++------------------------ + 1 file changed, 76 insertions(+), 76 deletions(-) + +diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c +index 9a5d6b2..6d8bc89 100644 +--- a/src/core/selinux-setup.c ++++ b/src/core/selinux-setup.c +@@ -46,82 +46,82 @@ static int null_log(int type, const char *fmt, ...) { + int selinux_setup(bool *loaded_policy) { + + #ifdef HAVE_SELINUX +- int enforce = 0; +- usec_t before_load, after_load; +- security_context_t con; +- int r; +- union selinux_callback cb; +- +- assert(loaded_policy); +- +- /* Turn off all of SELinux' own logging, we want to do that */ +- cb.func_log = null_log; +- selinux_set_callback(SELINUX_CB_LOG, cb); +- +- /* Don't load policy in the initrd if we don't appear to have +- * it. For the real root, we check below if we've already +- * loaded policy, and return gracefully. +- */ +- if (in_initrd() && access(selinux_path(), F_OK) < 0) +- return 0; +- +- /* Already initialized by somebody else? */ +- r = getcon_raw(&con); +- if (r == 0) { +- bool initialized; +- +- initialized = !streq(con, "kernel"); +- freecon(con); +- +- if (initialized) +- return 0; +- } +- +- /* Make sure we have no fds open while loading the policy and +- * transitioning */ +- log_close(); +- +- /* Now load the policy */ +- before_load = now(CLOCK_MONOTONIC); +- r = selinux_init_load_policy(&enforce); +- if (r == 0) { +- char timespan[FORMAT_TIMESPAN_MAX]; +- char *label; +- +- retest_selinux(); +- +- /* Transition to the new context */ +- r = label_get_create_label_from_exe(SYSTEMD_BINARY_PATH, &label); +- if (r < 0 || label == NULL) { +- log_open(); +- log_error("Failed to compute init label, ignoring."); +- } else { +- r = setcon(label); +- +- log_open(); +- if (r < 0) +- log_error("Failed to transition into init label '%s', ignoring.", label); +- +- label_free(label); +- } +- +- after_load = now(CLOCK_MONOTONIC); +- +- log_info("Successfully loaded SELinux policy in %s.", +- format_timespan(timespan, sizeof(timespan), after_load - before_load, 0)); +- +- *loaded_policy = true; +- +- } else { +- log_open(); +- +- if (enforce > 0) { +- log_error("Failed to load SELinux policy. Freezing."); +- return -EIO; +- } else +- log_debug("Unable to load SELinux policy. Ignoring."); +- } ++ int enforce = 0; ++ usec_t before_load, after_load; ++ security_context_t con; ++ int r; ++ union selinux_callback cb; ++ ++ assert(loaded_policy); ++ ++ /* Turn off all of SELinux' own logging, we want to do that */ ++ cb.func_log = null_log; ++ selinux_set_callback(SELINUX_CB_LOG, cb); ++ ++ /* Don't load policy in the initrd if we don't appear to have ++ * it. For the real root, we check below if we've already ++ * loaded policy, and return gracefully. ++ */ ++ if (in_initrd() && access(selinux_path(), F_OK) < 0) ++ return 0; ++ ++ /* Already initialized by somebody else? */ ++ r = getcon_raw(&con); ++ if (r == 0) { ++ bool initialized; ++ ++ initialized = !streq(con, "kernel"); ++ freecon(con); ++ ++ if (initialized) ++ return 0; ++ } ++ ++ /* Make sure we have no fds open while loading the policy and ++ * transitioning */ ++ log_close(); ++ ++ /* Now load the policy */ ++ before_load = now(CLOCK_MONOTONIC); ++ r = selinux_init_load_policy(&enforce); ++ if (r == 0) { ++ char timespan[FORMAT_TIMESPAN_MAX]; ++ char *label; ++ ++ retest_selinux(); ++ ++ /* Transition to the new context */ ++ r = label_get_create_label_from_exe(SYSTEMD_BINARY_PATH, &label); ++ if (r < 0 || label == NULL) { ++ log_open(); ++ log_error("Failed to compute init label, ignoring."); ++ } else { ++ r = setcon(label); ++ ++ log_open(); ++ if (r < 0) ++ log_error("Failed to transition into init label '%s', ignoring.", label); ++ ++ label_free(label); ++ } ++ ++ after_load = now(CLOCK_MONOTONIC); ++ ++ log_info("Successfully loaded SELinux policy in %s.", ++ format_timespan(timespan, sizeof(timespan), after_load - before_load, 0)); ++ ++ *loaded_policy = true; ++ ++ } else { ++ log_open(); ++ ++ if (enforce > 0) { ++ log_error("Failed to load SELinux policy. Freezing."); ++ return -EIO; ++ } else ++ log_debug("Unable to load SELinux policy. Ignoring."); ++ } + #endif + +- return 0; ++ return 0; + } diff --git a/0419-core-let-selinux_setup-load-policy-more-than-once.patch b/0419-core-let-selinux_setup-load-policy-more-than-once.patch new file mode 100644 index 0000000..f41faa1 --- /dev/null +++ b/0419-core-let-selinux_setup-load-policy-more-than-once.patch @@ -0,0 +1,82 @@ +From 0763f53c5228539328868ea0e2e186b633efaa6c Mon Sep 17 00:00:00 2001 +From: Will Woods +Date: Fri, 25 Apr 2014 18:26:34 -0400 +Subject: [PATCH] core: let selinux_setup() load policy more than once + +When you switch-root into a new root that has SELinux policy, you're +supposed to to run selinux_init_load_policy() to set up SELinux and load +policy. Normally this gets handled by selinux_setup(). + +But if SELinux was already initialized, selinux_setup() skips loading +policy and returns 0. So if you load policy normally, and then you +switch-root to a new root that has new policy, selinux_setup() never +loads the new policy. What gives? + +As far as I can tell, this check is an artifact of how selinux_setup() +worked when it was first written (see commit c4dcdb9 / systemd v12): + + * when systemd starts, run selinux_setup() + * if selinux_setup() loads policy OK, restart systemd + +So the "if policy already loaded, skip load and return 0" check was +there to prevent an infinite re-exec loop. + +Modern systemd only calls selinux_setup() on initial load and after +switch-root, and selinux_setup() no longer restarts systemd, so we don't +need that check to guard against the infinite loop anymore. + +So: this patch removes the "return 0", thus allowing selinux_setup() to +actually perform SELinux setup after switch-root. + +We still want to check to see if SELinux is initialized, because if +selinux_init_load_policy() fails *but* SELinux is initialized that means +we still have (old) policy active. So we don't need to halt if +enforce=1. + +(cherry picked from commit 68d3acaccbd26ecfbc5881fea75968fa4abcc565) +(cherry picked from commit f5ad306cb9ea1dea38a934b6b07901de1257a3fa) +--- + src/core/selinux-setup.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/core/selinux-setup.c b/src/core/selinux-setup.c +index 6d8bc89..b419a27 100644 +--- a/src/core/selinux-setup.c ++++ b/src/core/selinux-setup.c +@@ -51,6 +51,7 @@ int selinux_setup(bool *loaded_policy) { + security_context_t con; + int r; + union selinux_callback cb; ++ bool initialized = false; + + assert(loaded_policy); + +@@ -68,13 +69,8 @@ int selinux_setup(bool *loaded_policy) { + /* Already initialized by somebody else? */ + r = getcon_raw(&con); + if (r == 0) { +- bool initialized; +- + initialized = !streq(con, "kernel"); + freecon(con); +- +- if (initialized) +- return 0; + } + + /* Make sure we have no fds open while loading the policy and +@@ -116,8 +112,12 @@ int selinux_setup(bool *loaded_policy) { + log_open(); + + if (enforce > 0) { +- log_error("Failed to load SELinux policy. Freezing."); +- return -EIO; ++ if (!initialized) { ++ log_error("Failed to load SELinux policy. Freezing."); ++ return -EIO; ++ } ++ ++ log_warning("Failed to load new SELinux policy. Continuing with old policy."); + } else + log_debug("Unable to load SELinux policy. Ignoring."); + } diff --git a/0420-hwdb-Update-database-of-Bluetooth-company-identifier.patch b/0420-hwdb-Update-database-of-Bluetooth-company-identifier.patch new file mode 100644 index 0000000..1f11bb6 --- /dev/null +++ b/0420-hwdb-Update-database-of-Bluetooth-company-identifier.patch @@ -0,0 +1,72 @@ +From a26ac4bebe4784aa27cd80e5689e131ad2ced25c Mon Sep 17 00:00:00 2001 +From: Marcel Holtmann +Date: Fri, 16 May 2014 15:57:35 -0700 +Subject: [PATCH] hwdb: Update database of Bluetooth company identifiers + +(cherry picked from commit 24e29480bd800d3acdb3087e5863440bd0dd1d80) +(cherry picked from commit 1edfeba28e2c63f0c69eeade570c0aae4af41f42) +--- + hwdb/20-bluetooth-vendor-product.hwdb | 53 ++++++++++++++++++++++++++++++++++- + 1 file changed, 52 insertions(+), 1 deletion(-) + +diff --git a/hwdb/20-bluetooth-vendor-product.hwdb b/hwdb/20-bluetooth-vendor-product.hwdb +index 28aa2a7..a65c7db 100644 +--- a/hwdb/20-bluetooth-vendor-product.hwdb ++++ b/hwdb/20-bluetooth-vendor-product.hwdb +@@ -961,4 +961,55 @@ bluetooth:v013D* + ID_VENDOR_FROM_DATABASE=WirelessWERX + + bluetooth:v013E* +- ID_VENDOR_FROM_DATABASE=nimai ++ ID_VENDOR_FROM_DATABASE=Nod, Inc. ++ ++bluetooth:v013F* ++ ID_VENDOR_FROM_DATABASE=B&B Manufacturing Company ++ ++bluetooth:v0140* ++ ID_VENDOR_FROM_DATABASE=Alpine Electronics (China) Co., Ltd ++ ++bluetooth:v0141* ++ ID_VENDOR_FROM_DATABASE=FedEx Services ++ ++bluetooth:v0142* ++ ID_VENDOR_FROM_DATABASE=Grape Systems Inc. ++ ++bluetooth:v0143* ++ ID_VENDOR_FROM_DATABASE=Bkon Connect ++ ++bluetooth:v0144* ++ ID_VENDOR_FROM_DATABASE=Lintech GmbH ++ ++bluetooth:v0145* ++ ID_VENDOR_FROM_DATABASE=Novatel Wireless ++ ++bluetooth:v0146* ++ ID_VENDOR_FROM_DATABASE=Ciright ++ ++bluetooth:v0147* ++ ID_VENDOR_FROM_DATABASE=Mighty Cast, Inc. ++ ++bluetooth:v0148* ++ ID_VENDOR_FROM_DATABASE=Ambimat Electronics ++ ++bluetooth:v0149* ++ ID_VENDOR_FROM_DATABASE=Perytons Ltd. ++ ++bluetooth:v014A* ++ ID_VENDOR_FROM_DATABASE=Tivoli Audio, LLC ++ ++bluetooth:v014B* ++ ID_VENDOR_FROM_DATABASE=Master Lock ++ ++bluetooth:v014C* ++ ID_VENDOR_FROM_DATABASE=Mesh-Net Ltd ++ ++bluetooth:v014D* ++ ID_VENDOR_FROM_DATABASE=HUIZHOU DESAY SV AUTOMOTIVE CO., LTD. ++ ++bluetooth:v014E* ++ ID_VENDOR_FROM_DATABASE=Tangerine, Inc. ++ ++bluetooth:v014F* ++ ID_VENDOR_FROM_DATABASE=B&W Group Ltd. diff --git a/0421-hwdb-update.patch b/0421-hwdb-update.patch new file mode 100644 index 0000000..505f8da --- /dev/null +++ b/0421-hwdb-update.patch @@ -0,0 +1,1559 @@ +From d82d0c5ea851ebad2d4704340918e3955dc884e6 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 21 May 2014 18:19:24 +0900 +Subject: [PATCH] hwdb: update + +(cherry picked from commit 7ba52a1283a0864b56947fa091048e8fe31a5899) +(cherry picked from commit 5e608afd723b1d0d7d2b15bf661a7628994e4e18) +--- + hwdb/20-OUI.hwdb | 155 +++++++++++++++++++++- + hwdb/20-pci-vendor-model.hwdb | 141 +++++++++++++++++--- + hwdb/20-usb-vendor-model.hwdb | 302 +++++++++++++++++++++++++++++++++++++++++- + 3 files changed, 572 insertions(+), 26 deletions(-) + +diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb +index afc0d90..6188bfc 100644 +--- a/hwdb/20-OUI.hwdb ++++ b/hwdb/20-OUI.hwdb +@@ -52915,6 +52915,9 @@ OUI:0CA42A* + OUI:0CA694* + ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd + ++OUI:0CAC05* ++ ID_OUI_FROM_DATABASE=Unitend Technologies Inc. ++ + OUI:0CAF5A* + ID_OUI_FROM_DATABASE=GENUS POWER INFRASTRUCTURES LIMITED + +@@ -53164,6 +53167,9 @@ OUI:1048B1* + OUI:104D77* + ID_OUI_FROM_DATABASE=Innovative Computer Engineering + ++OUI:105172* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:1056CA* + ID_OUI_FROM_DATABASE=Peplink International Ltd. + +@@ -53488,6 +53494,9 @@ OUI:147373* + OUI:147411* + ID_OUI_FROM_DATABASE=RIM + ++OUI:147590* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:147DB3* + ID_OUI_FROM_DATABASE=JOA TELECOM.CO.,LTD + +@@ -53899,6 +53908,9 @@ OUI:18C8E7* + OUI:18CC23* + ID_OUI_FROM_DATABASE=Philio Technology Corporation + ++OUI:18CF5E* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:18D071* + ID_OUI_FROM_DATABASE=DASAN SMC, Inc. + +@@ -54517,6 +54529,9 @@ OUI:20E791* + OUI:20EAC7* + ID_OUI_FROM_DATABASE=SHENZHEN RIOPINE ELECTRONICS CO., LTD + ++OUI:20ED74* ++ ID_OUI_FROM_DATABASE=Ability enterprise co.,Ltd. ++ + OUI:20EEC6* + ID_OUI_FROM_DATABASE=Elefirst Science & Tech Co ., ltd + +@@ -54742,6 +54757,9 @@ OUI:24CBE7* + OUI:24CF21* + ID_OUI_FROM_DATABASE=Shenzhen State Micro Technology Co., Ltd + ++OUI:24D13F* ++ ID_OUI_FROM_DATABASE=MEXUS CO.,LTD ++ + OUI:24D2CC* + ID_OUI_FROM_DATABASE=SmartDrive Systems Inc. + +@@ -55438,6 +55456,9 @@ OUI:2CF203* + OUI:2CF4C5* + ID_OUI_FROM_DATABASE=Avaya, Inc + ++OUI:2CFAA2* ++ ID_OUI_FROM_DATABASE=Alcatel-Lucent ++ + OUI:30055C* + ID_OUI_FROM_DATABASE=Brother industries, LTD. + +@@ -55708,6 +55729,9 @@ OUI:30F9ED* + OUI:30FD11* + ID_OUI_FROM_DATABASE=MACROTECH (USA) INC. + ++OUI:3400A3* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:340286* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -56077,6 +56101,9 @@ OUI:38229D* + OUI:3822D6* + ID_OUI_FROM_DATABASE=H3C Technologies Co., Limited + ++OUI:38262B* ++ ID_OUI_FROM_DATABASE=UTran Technology ++ + OUI:3826CD* + ID_OUI_FROM_DATABASE=ANDTEK + +@@ -56395,6 +56422,9 @@ OUI:3C404F* + OUI:3C438E* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:3C46D8* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:3C4A92* + ID_OUI_FROM_DATABASE=Hewlett-Packard Company + +@@ -56710,6 +56740,9 @@ OUI:404A18* + OUI:404D8E* + ID_OUI_FROM_DATABASE=Shenzhen Huawei Communication Technologies Co., Ltd + ++OUI:404EEB* ++ ID_OUI_FROM_DATABASE=Higher Way Electronic Co., Ltd. ++ + OUI:4050E0* + ID_OUI_FROM_DATABASE=Milton Security Group LLC + +@@ -57709,6 +57742,9 @@ OUI:4CB9C8* + OUI:4CBAA3* + ID_OUI_FROM_DATABASE=Bison Electronics Inc. + ++OUI:4CBB58* ++ ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd. ++ + OUI:4CBCA5* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -57757,6 +57793,9 @@ OUI:4CEDDE* + OUI:4CF02E* + ID_OUI_FROM_DATABASE=Vifa Denmark A/S + ++OUI:4CF2BF* ++ ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd. ++ + OUI:4CF45B* + ID_OUI_FROM_DATABASE=Blue Clover Devices + +@@ -57994,6 +58033,9 @@ OUI:50B888* + OUI:50B8A2* + ID_OUI_FROM_DATABASE=ImTech Technologies LLC, + ++OUI:50BD5F* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:50C006* + ID_OUI_FROM_DATABASE=Carmanah Signs + +@@ -58285,6 +58327,9 @@ OUI:54D1B0* + OUI:54D46F* + ID_OUI_FROM_DATABASE=Cisco SPVTG + ++OUI:54DF00* ++ ID_OUI_FROM_DATABASE=Ulterius Technologies, LLC ++ + OUI:54DF63* + ID_OUI_FROM_DATABASE=Intrakey technologies GmbH + +@@ -58597,6 +58642,9 @@ OUI:58F6BF* + OUI:58F98E* + ID_OUI_FROM_DATABASE=SECUDOS GmbH + ++OUI:58FCDB* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information. ++ + OUI:58FD20* + ID_OUI_FROM_DATABASE=Bravida Sakerhet AB + +@@ -58621,6 +58669,9 @@ OUI:5C1193* + OUI:5C1437* + ID_OUI_FROM_DATABASE=Thyssenkrupp Aufzugswerke GmbH + ++OUI:5C1515* ++ ID_OUI_FROM_DATABASE=ADVAN ++ + OUI:5C15E1* + ID_OUI_FROM_DATABASE=AIDC TECHNOLOGY (S) PTE LTD + +@@ -58891,12 +58942,18 @@ OUI:5CF96A* + OUI:5CF9DD* + ID_OUI_FROM_DATABASE=Dell Inc + ++OUI:5CF9F0* ++ ID_OUI_FROM_DATABASE=Atomos Engineering P/L ++ + OUI:5CFF35* + ID_OUI_FROM_DATABASE=Wistron Corporation + + OUI:5CFFFF* + ID_OUI_FROM_DATABASE=Shenzhen Kezhonglong Optoelectronic Technology Co., Ltd + ++OUI:600292* ++ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION ++ + OUI:6002B4* + ID_OUI_FROM_DATABASE=Wistron NeWeb Corp. + +@@ -59323,6 +59380,9 @@ OUI:644F74* + OUI:644FB0* + ID_OUI_FROM_DATABASE=Hyunjin.com + ++OUI:645106* ++ ID_OUI_FROM_DATABASE=Hewlett Packard ++ + OUI:64517E* + ID_OUI_FROM_DATABASE=LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD. + +@@ -59902,6 +59962,9 @@ OUI:68FB95* + OUI:68FCB3* + ID_OUI_FROM_DATABASE=Next Level Security Systems, Inc. + ++OUI:6C0273* ++ ID_OUI_FROM_DATABASE=Shenzhen Jin Yun Video Equipment Co., Ltd. ++ + OUI:6C0460* + ID_OUI_FROM_DATABASE=RBH Access Technologies Inc. + +@@ -60874,6 +60937,9 @@ OUI:781FDB* + OUI:78223D* + ID_OUI_FROM_DATABASE=Affirmed Networks + ++OUI:7824AF* ++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. ++ + OUI:782544* + ID_OUI_FROM_DATABASE=Omnima Limited + +@@ -60919,6 +60985,9 @@ OUI:784405* + OUI:784476* + ID_OUI_FROM_DATABASE=Zioncom technology co.,ltd + ++OUI:784561* ++ ID_OUI_FROM_DATABASE=CyberTAN Technology Inc. ++ + OUI:7845C4* + ID_OUI_FROM_DATABASE=Dell Inc + +@@ -61024,6 +61093,9 @@ OUI:789966* + OUI:78998F* + ID_OUI_FROM_DATABASE=MEDILINE ITALIA SRL + ++OUI:789CE7* ++ ID_OUI_FROM_DATABASE=Shenzhen Aikede Technology Co., Ltd ++ + OUI:789ED0* + ID_OUI_FROM_DATABASE=Samsung Electronics + +@@ -61480,6 +61552,9 @@ OUI:7CC8D7* + OUI:7CCB0D* + ID_OUI_FROM_DATABASE=Antaira Technologies, LLC + ++OUI:7CCCB8* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:7CCD11* + ID_OUI_FROM_DATABASE=MS-Magnet + +@@ -61945,6 +62020,9 @@ OUI:842F75* + OUI:8430E5* + ID_OUI_FROM_DATABASE=SkyHawke Technologies, LLC + ++OUI:8432EA* ++ ID_OUI_FROM_DATABASE=ANHUI WANZTEN P&T CO., LTD ++ + OUI:843497* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -63295,6 +63373,9 @@ OUI:94CDAC* + OUI:94CE2C* + ID_OUI_FROM_DATABASE=Sony Mobile Communications AB + ++OUI:94CE31* ++ ID_OUI_FROM_DATABASE=CTS Limited ++ + OUI:94D019* + ID_OUI_FROM_DATABASE=Cydle Corp. + +@@ -63409,6 +63490,9 @@ OUI:982CBE* + OUI:982D56* + ID_OUI_FROM_DATABASE=Resolution Audio + ++OUI:982F3C* ++ ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd. ++ + OUI:983000* + ID_OUI_FROM_DATABASE=Beijing KEMACOM Technologies Co., Ltd. + +@@ -63508,6 +63592,9 @@ OUI:9876B6* + OUI:987770* + ID_OUI_FROM_DATABASE=Pep Digital Technology (Guangzhou) Co., Ltd + ++OUI:987E46* ++ ID_OUI_FROM_DATABASE=Emizon Networks Limited ++ + OUI:988217* + ID_OUI_FROM_DATABASE=Disruptive Ltd + +@@ -64303,6 +64390,9 @@ OUI:A40BED* + OUI:A40CC3* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:A41242* ++ ID_OUI_FROM_DATABASE=NEC AccessTechnica, Ltd. ++ + OUI:A4134E* + ID_OUI_FROM_DATABASE=Luxul + +@@ -65740,6 +65830,9 @@ OUI:B4B5AF* + OUI:B4B676* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:B4B859* ++ ID_OUI_FROM_DATABASE=Texa Spa ++ + OUI:B4B88D* + ID_OUI_FROM_DATABASE=Thuh Company + +@@ -65815,6 +65908,9 @@ OUI:B80305* + OUI:B80415* + ID_OUI_FROM_DATABASE=Bayan Audio + ++OUI:B808CF* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:B80B9D* + ID_OUI_FROM_DATABASE=ROPEX Industrie-Elektronik GmbH + +@@ -66277,6 +66373,9 @@ OUI:BC5FF4* + OUI:BC629F* + ID_OUI_FROM_DATABASE=Telenet Systems P. Ltd. + ++OUI:BC671C* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:BC6778* + ID_OUI_FROM_DATABASE=Apple + +@@ -66412,6 +66511,9 @@ OUI:BCCFCC* + OUI:BCD177* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:BCD1D3* ++ ID_OUI_FROM_DATABASE=Tinno Mobile Technology Corp ++ + OUI:BCD5B6* + ID_OUI_FROM_DATABASE=d2d technologies + +@@ -66706,6 +66808,9 @@ OUI:C0E54E* + OUI:C0EAE4* + ID_OUI_FROM_DATABASE=Sonicwall + ++OUI:C0EEFB* ++ ID_OUI_FROM_DATABASE=OnePlus Tech (Shenzhen) Ltd ++ + OUI:C0F1C4* + ID_OUI_FROM_DATABASE=Pacidal Corporation Ltd. + +@@ -66721,6 +66826,9 @@ OUI:C0F8DA* + OUI:C0F991* + ID_OUI_FROM_DATABASE=GME Standard Communications P/L + ++OUI:C40006* ++ ID_OUI_FROM_DATABASE=Lipi Data Systems Ltd. ++ + OUI:C40142* + ID_OUI_FROM_DATABASE=MaxMedia Technology Limited + +@@ -67885,6 +67993,9 @@ OUI:D09C30* + OUI:D09D0A* + ID_OUI_FROM_DATABASE=LINKCOM + ++OUI:D0A0D6* ++ ID_OUI_FROM_DATABASE=Chengdu TD Tech Ltd. ++ + OUI:D0A311* + ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH + +@@ -68126,7 +68237,7 @@ OUI:D45AB2* + ID_OUI_FROM_DATABASE=Galleon Systems + + OUI:D45C70* +- ID_OUI_FROM_DATABASE=Wireless Gigabit Alliance ++ ID_OUI_FROM_DATABASE=Wi-Fi Alliance + + OUI:D45D42* + ID_OUI_FROM_DATABASE=Nokia Corporation +@@ -68359,6 +68470,9 @@ OUI:D808F5* + OUI:D809C3* + ID_OUI_FROM_DATABASE=Cercacor Labs + ++OUI:D80CCF* ++ ID_OUI_FROM_DATABASE=C.G.V. S.A.S. ++ + OUI:D80DE3* + ID_OUI_FROM_DATABASE=FXI TECHNOLOGIES AS + +@@ -68386,6 +68500,9 @@ OUI:D81EDE* + OUI:D824BD* + ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC. + ++OUI:D82522* ++ ID_OUI_FROM_DATABASE=Pace plc ++ + OUI:D826B9* + ID_OUI_FROM_DATABASE=Guangdong Coagent Electronics S &T Co., Ltd. + +@@ -68521,6 +68638,9 @@ OUI:D89685* + OUI:D89695* + ID_OUI_FROM_DATABASE=Apple + ++OUI:D896E0* ++ ID_OUI_FROM_DATABASE=Alibaba Cloud Computing Ltd. ++ + OUI:D8973B* + ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies + +@@ -68941,6 +69061,9 @@ OUI:E01C41* + OUI:E01CEE* + ID_OUI_FROM_DATABASE=Bravo Tech, Inc. + ++OUI:E01D38* ++ ID_OUI_FROM_DATABASE=Beijing HuaqinWorld Technology Co.,Ltd ++ + OUI:E01D3B* + ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd + +@@ -69373,6 +69496,9 @@ OUI:E47CF9* + OUI:E47D5A* + ID_OUI_FROM_DATABASE=Beijing Hanbang Technology Corp. + ++OUI:E47FB2* ++ ID_OUI_FROM_DATABASE=Fujitsu Limited ++ + OUI:E48184* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + +@@ -69829,6 +69955,9 @@ OUI:EC219F* + OUI:EC2257* + ID_OUI_FROM_DATABASE=JiangSu NanJing University Electronic Information Technology Co.,Ltd + ++OUI:EC2280* ++ ID_OUI_FROM_DATABASE=D-Link International ++ + OUI:EC233D* + ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd + +@@ -69970,6 +70099,9 @@ OUI:ECB106* + OUI:ECB541* + ID_OUI_FROM_DATABASE=SHINANO E and E Co.Ltd. + ++OUI:ECB907* ++ ID_OUI_FROM_DATABASE=CloudGenix Inc ++ + OUI:ECBBAE* + ID_OUI_FROM_DATABASE=Digivoice Tecnologia em Eletronica Ltda + +@@ -70189,6 +70321,9 @@ OUI:F0728C* + OUI:F073AE* + ID_OUI_FROM_DATABASE=PEAK-System Technik + ++OUI:F0761C* ++ ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD. ++ + OUI:F07765* + ID_OUI_FROM_DATABASE=Sourcefire, Inc + +@@ -70378,6 +70513,9 @@ OUI:F40321* + OUI:F4044C* + ID_OUI_FROM_DATABASE=ValenceTech Limited + ++OUI:F40669* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:F4068D* + ID_OUI_FROM_DATABASE=devolo AG + +@@ -70642,6 +70780,9 @@ OUI:F4EC38* + OUI:F4F15A* + ID_OUI_FROM_DATABASE=Apple + ++OUI:F4F26D* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:F4F5A5* + ID_OUI_FROM_DATABASE=Nokia corporation + +@@ -70825,6 +70966,9 @@ OUI:F871FE* + OUI:F872EA* + ID_OUI_FROM_DATABASE=Cisco + ++OUI:F87394* ++ ID_OUI_FROM_DATABASE=NETGEAR INC., ++ + OUI:F8769B* + ID_OUI_FROM_DATABASE=Neopis Co., Ltd. + +@@ -70915,6 +71059,9 @@ OUI:F8C001* + OUI:F8C091* + ID_OUI_FROM_DATABASE=Highgates Technology + ++OUI:F8C288* ++ ID_OUI_FROM_DATABASE=Cisco ++ + OUI:F8C678* + ID_OUI_FROM_DATABASE=Carefusion + +@@ -71167,6 +71314,9 @@ OUI:FC683E* + OUI:FC6C31* + ID_OUI_FROM_DATABASE=LXinstruments GmbH + ++OUI:FC6DC0* ++ ID_OUI_FROM_DATABASE=BME CORPORATION ++ + OUI:FC7516* + ID_OUI_FROM_DATABASE=D-Link International + +@@ -71319,3 +71469,6 @@ OUI:FCFBFB* + + OUI:FCFE77* + ID_OUI_FROM_DATABASE=Hitachi Reftechno, Inc. ++ ++OUI:FCFFAA* ++ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAL public listing for more information. +diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb +index 2957774..62941b9 100644 +--- a/hwdb/20-pci-vendor-model.hwdb ++++ b/hwdb/20-pci-vendor-model.hwdb +@@ -4205,6 +4205,9 @@ pci:v00001002d00005F57* + pci:v00001002d00006600* + ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8670M/8750M] + ++pci:v00001002d00006600sv0000103Csd00001952* ++ ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8670A/8670M/8750M] (ProBook 455 G1) ++ + pci:v00001002d00006601* + ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M] + +@@ -4292,6 +4295,12 @@ pci:v00001002d00006640* + pci:v00001002d00006641* + ID_MODEL_FROM_DATABASE=Saturn PRO [Radeon HD 8930M] + ++pci:v00001002d00006646* ++ ID_MODEL_FROM_DATABASE=Bonaire XT [Radeon R9 M280X] ++ ++pci:v00001002d00006647* ++ ID_MODEL_FROM_DATABASE=Bonaire PRO [Radeon R9 M270X] ++ + pci:v00001002d00006649* + ID_MODEL_FROM_DATABASE=Bonaire [FirePro W5100] + +@@ -6137,6 +6146,9 @@ pci:v00001002d0000683Dsv0000103Csd00006890* + pci:v00001002d0000683Dsv00001043sd00008760* + ID_MODEL_FROM_DATABASE=Cape Verde XT [Radeon HD 7770/8760 / R7 250X] (Radeon HD 8760 OEM) + ++pci:v00001002d0000683Dsv00001462sd00002710* ++ ID_MODEL_FROM_DATABASE=Cape Verde XT [Radeon HD 7770/8760 / R7 250X] (R7770-PMD1GD5) ++ + pci:v00001002d0000683Dsv0000174Bsd00008304* + ID_MODEL_FROM_DATABASE=Cape Verde XT [Radeon HD 7770/8760 / R7 250X] (Radeon HD 8760 OEM) + +@@ -7856,6 +7868,15 @@ pci:v00001002d00006901* + pci:v00001002d00006920* + ID_MODEL_FROM_DATABASE=Tonga + ++pci:v00001002d00006921* ++ ID_MODEL_FROM_DATABASE=Amethyst XT [Radeon R9 M295X] ++ ++pci:v00001002d0000692B* ++ ID_MODEL_FROM_DATABASE=Tonga XT GL [FirePro W8100] ++ ++pci:v00001002d0000692F* ++ ID_MODEL_FROM_DATABASE=Tonga XT GL [FirePro W8100] ++ + pci:v00001002d0000700F* + ID_MODEL_FROM_DATABASE=RS100 AGP Bridge + +@@ -24470,6 +24491,9 @@ pci:v000010DEd00000640* + pci:v000010DEd00000641* + ID_MODEL_FROM_DATABASE=G96 [GeForce 9400 GT] + ++pci:v000010DEd00000641sv00001682sd00004009* ++ ID_MODEL_FROM_DATABASE=G96 [GeForce 9400 GT] (PV-T94G-ZAFG) ++ + pci:v000010DEd00000643* + ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GT] + +@@ -26306,6 +26330,9 @@ pci:v000010DEd00000FD8* + pci:v000010DEd00000FD9* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 645M] + ++pci:v000010DEd00000FDB* ++ ID_MODEL_FROM_DATABASE=GK107M ++ + pci:v000010DEd00000FDF* + ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 740M] + +@@ -26861,6 +26888,12 @@ pci:v000010DEd00001140sv00001028sd000005E8* + pci:v000010DEd00001140sv00001028sd000005F4* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + ++pci:v000010DEd00001140sv00001028sd0000064E* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv00001028sd0000068D* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ + pci:v000010DEd00001140sv0000103Csd000018EF* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 630M) + +@@ -27185,6 +27218,36 @@ pci:v000010DEd00001140sv000017AAsd00003803* + pci:v000010DEd00001140sv000017AAsd00003804* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + ++pci:v000010DEd00001140sv000017AAsd00003806* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ++pci:v000010DEd00001140sv000017AAsd00003808* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) ++ ++pci:v000010DEd00001140sv000017AAsd0000380D* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd0000380E* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd0000380F* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00003811* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00003812* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00003813* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00003816* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00003818* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ + pci:v000010DEd00001140sv000017AAsd00003901* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 610M / GT 620M) + +@@ -27260,12 +27323,27 @@ pci:v000010DEd00001140sv000017AAsd0000502E* + pci:v000010DEd00001140sv000017AAsd0000502F* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce GT 720M) + ++pci:v000010DEd00001140sv000017AAsd00005030* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ++pci:v000010DEd00001140sv000017AAsd00005031* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 705M) ++ ++pci:v000010DEd00001140sv000017AAsd00005032* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ ++pci:v000010DEd00001140sv000017AAsd00005033* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ + pci:v000010DEd00001140sv000017AAsd0000503E* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + + pci:v000010DEd00001140sv000017AAsd0000503F* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) + ++pci:v000010DEd00001140sv000017AAsd00005040* ++ ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 820M) ++ + pci:v000010DEd00001140sv00001854sd00000177* + ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (GeForce 710M) + +@@ -28443,7 +28521,7 @@ pci:v000010ECd00008168sv00001043sd00008432* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8P67 and other motherboards) + + pci:v000010ECd00008168sv00001043sd00008505* +- ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8 series motherboard) + + pci:v000010ECd00008168sv0000105Bsd00000D7C* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (D270S/D250S Motherboard) +@@ -35300,6 +35378,9 @@ pci:v000011ABd00007810* + pci:v000011ABd00007820* + ID_MODEL_FROM_DATABASE=MV78200 [Discovery Innovation] ARM SoC + ++pci:v000011ABd00007823* ++ ID_MODEL_FROM_DATABASE=MV78230 [Armada XP] ARM SoC ++ + pci:v000011ABd0000F003* + ID_MODEL_FROM_DATABASE=GT-64010 Primary Image Piranha Image Generator + +@@ -36602,17 +36683,20 @@ pci:v00001217d00008120* + pci:v00001217d00008130* + ID_MODEL_FROM_DATABASE=Integrated MS/MSPRO/xD Controller + ++pci:v00001217d00008220* ++ ID_MODEL_FROM_DATABASE=OZ600FJ1/OZ900FJ1 SD/MMC Card Reader Controller ++ + pci:v00001217d00008221* +- ID_MODEL_FROM_DATABASE=SD/MMC Card Reader Controller ++ ID_MODEL_FROM_DATABASE=OZ600FJ0/OZ900FJ0/OZ600FJS SD/MMC Card Reader Controller + + pci:v00001217d00008320* +- ID_MODEL_FROM_DATABASE=OZ600 MMC/SD Controller ++ ID_MODEL_FROM_DATABASE=OZ600RJ1/OZ900RJ1 SD/MMC Card Reader Controller + + pci:v00001217d00008320sv00001028sd000004A3* +- ID_MODEL_FROM_DATABASE=OZ600 MMC/SD Controller (Precision M4600) ++ ID_MODEL_FROM_DATABASE=OZ600RJ1/OZ900RJ1 SD/MMC Card Reader Controller (Precision M4600) + + pci:v00001217d00008321* +- ID_MODEL_FROM_DATABASE=Integrated MMC/SD controller ++ ID_MODEL_FROM_DATABASE=OZ600RJ0/OZ900RJ0/OZ600RJS SD/MMC Card Reader Controller + + pci:v00001217d00008330* + ID_MODEL_FROM_DATABASE=OZ600 MS/xD Controller +@@ -46403,6 +46487,9 @@ pci:v000014F1d00008800sv00000070sd00009802* + pci:v000014F1d00008800sv00001002sd000000F8* + ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (ATI TV Wonder Pro) + ++pci:v000014F1d00008800sv00001002sd000000F9* ++ ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (ATI TV Wonder) ++ + pci:v000014F1d00008800sv00001002sd0000A101* + ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (HDTV Wonder) + +@@ -50978,6 +51065,12 @@ pci:v000018F4d00000125* + pci:v000018F4d00000135* + ID_MODEL_FROM_DATABASE=NT20E2-PTP Network Adapter 2x10Gb + ++pci:v000018F4d00000145* ++ ID_MODEL_FROM_DATABASE=NT40E3-4-PTP Network Adapter 4x10Gb ++ ++pci:v000018F4d00000155* ++ ID_MODEL_FROM_DATABASE=NT100E3-1-PTP Network Adapter 1x100Gb ++ + pci:v000018F6* + ID_VENDOR_FROM_DATABASE=NextIO + +@@ -55143,7 +55236,7 @@ pci:v00008086d00000150* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller + + pci:v00008086d00000150sv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (P8 series motherboard) + + pci:v00008086d00000150sv00001849sd00000150* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (Motherboard) +@@ -55229,6 +55322,9 @@ pci:v00008086d0000015E* + pci:v00008086d00000162* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller + ++pci:v00008086d00000162sv00001043sd000084CA* ++ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (P8 series motherboard) ++ + pci:v00008086d00000162sv00001849sd00000162* + ID_MODEL_FROM_DATABASE=Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (Motherboard) + +@@ -59061,10 +59157,10 @@ pci:v00008086d00001521sv00001028sd00000602* + ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Gigabit 2P I350-t LOM) + + pci:v00008086d00001521sv00001028sd00001F60* +- ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Intel GbE 4P I350crNDC) ++ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Gigabit 4P I350-t rNDC) + + pci:v00008086d00001521sv00001028sd00001F62* +- ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Intel GbE 2P I350crNDC) ++ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Gigabit 4P X540/I350 rNDC) + + pci:v00008086d00001521sv00001028sd0000FF9A* + ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Gigabit 4P X710/I350 rNDC) +@@ -59250,7 +59346,10 @@ pci:v00008086d00001533* + ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection + + pci:v00008086d00001533sv0000103Csd00000003* +- ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (Ethernet Server Adapter I210-T1) ++ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (Ethernet I210-T1 GbE NIC) ++ ++pci:v00008086d00001533sv000010A9sd0000802C* ++ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (UV300 BaseIO single-port GbE) + + pci:v00008086d00001533sv000017AAsd00001100* + ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (ThinkServer Ethernet Server Adapter) +@@ -59261,15 +59360,15 @@ pci:v00008086d00001533sv00008086sd00000001* + pci:v00008086d00001533sv00008086sd00000002* + ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (Ethernet Server Adapter I210-T1) + +-pci:v00008086d00001534* +- ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection +- + pci:v00008086d00001536* + ID_MODEL_FROM_DATABASE=I210 Gigabit Fiber Network Connection + + pci:v00008086d00001537* + ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection + ++pci:v00008086d00001538* ++ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection ++ + pci:v00008086d00001539* + ID_MODEL_FROM_DATABASE=I211 Gigabit Network Connection + +@@ -60267,7 +60366,7 @@ pci:v00008086d00001E02* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] + + pci:v00008086d00001E02sv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] (P8 series motherboard) + + pci:v00008086d00001E02sv00001849sd00001E02* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] (Motherboard) +@@ -60374,6 +60473,9 @@ pci:v00008086d00001E20sv00001043sd00001517* + pci:v00008086d00001E20sv00001043sd00008415* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family High Definition Audio Controller (P8H77-I Motherboard) + ++pci:v00008086d00001E20sv00001043sd00008445* ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family High Definition Audio Controller (ASUS P8Z77-V LX Motherboard) ++ + pci:v00008086d00001E20sv00001849sd00001898* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family High Definition Audio Controller (Z77 Extreme4 motherboard) + +@@ -60387,7 +60489,7 @@ pci:v00008086d00001E22sv00001043sd00001517* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller (Zenbook Prime UX31A) + + pci:v00008086d00001E22sv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller (P8 series motherboard) + + pci:v00008086d00001E22sv00001849sd00001E22* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family SMBus Controller (Motherboard) +@@ -60411,7 +60513,7 @@ pci:v00008086d00001E26sv00001043sd00001517* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (Zenbook Prime UX31A) + + pci:v00008086d00001E26sv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (P8 series motherboard) + + pci:v00008086d00001E26sv00001849sd00001E26* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (Motherboard) +@@ -60426,7 +60528,7 @@ pci:v00008086d00001E2Dsv00001043sd00001517* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (Zenbook Prime UX31A) + + pci:v00008086d00001E2Dsv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (P8 series motherboard) + + pci:v00008086d00001E2Dsv00001849sd00001E2D* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (Motherboard) +@@ -60444,7 +60546,7 @@ pci:v00008086d00001E31sv00001043sd00001517* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller (Zenbook Prime UX31A) + + pci:v00008086d00001E31sv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller (P8 series motherboard) + + pci:v00008086d00001E31sv00001849sd00001E31* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family USB xHCI Host Controller (Motherboard) +@@ -60462,7 +60564,7 @@ pci:v00008086d00001E3Asv00001043sd00001517* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #1 (Zenbook Prime UX31A) + + pci:v00008086d00001E3Asv00001043sd000084CA* +- ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #1 (P8H77-I Motherboard) ++ ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #1 (P8 series motherboard) + + pci:v00008086d00001E3Asv00001849sd00001E3A* + ID_MODEL_FROM_DATABASE=7 Series/C210 Series Chipset Family MEI Controller #1 (Motherboard) +@@ -60488,6 +60590,9 @@ pci:v00008086d00001E43* + pci:v00008086d00001E44* + ID_MODEL_FROM_DATABASE=Z77 Express Chipset LPC Controller + ++pci:v00008086d00001E44sv00001043sd000084CA* ++ ID_MODEL_FROM_DATABASE=Z77 Express Chipset LPC Controller (P8 series motherboard) ++ + pci:v00008086d00001E44sv00001849sd00001E44* + ID_MODEL_FROM_DATABASE=Z77 Express Chipset LPC Controller (Motherboard) + +diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb +index 52586bc..05f267d 100644 +--- a/hwdb/20-usb-vendor-model.hwdb ++++ b/hwdb/20-usb-vendor-model.hwdb +@@ -41163,7 +41163,7 @@ usb:v1234pED02* + ID_MODEL_FROM_DATABASE=Emotiv EPOC Developer Headset Wireless Dongle + + usb:v1235* +- ID_VENDOR_FROM_DATABASE=Novation EMS ++ ID_VENDOR_FROM_DATABASE=Focusrite-Novation + + usb:v1235p0001* + ID_MODEL_FROM_DATABASE=ReMOTE Audio/XStation First Edition +@@ -41729,6 +41729,9 @@ usb:v12D1p155A* + usb:v12D1p1575* + ID_MODEL_FROM_DATABASE=K5150 LTE modem + ++usb:v12D1p15CA* ++ ID_MODEL_FROM_DATABASE=E3131 3G/UMTS/HSPA+ Modem (Mass Storage Mode) ++ + usb:v12D1p1805* + ID_MODEL_FROM_DATABASE=AT&T Go Phone U2800A phone + +@@ -41744,6 +41747,12 @@ usb:v12D1p1C20* + usb:v12D1p1D50* + ID_MODEL_FROM_DATABASE=ET302s TD-SCDMA/TD-HSDPA Mobile Broadband + ++usb:v12D1p1F01* ++ ID_MODEL_FROM_DATABASE=E353/E3131 (Mass storage mode) ++ ++usb:v12D1p1F16* ++ ID_MODEL_FROM_DATABASE=K5150 LTE modem (Mass Storage Mode) ++ + usb:v12D1p380B* + ID_MODEL_FROM_DATABASE=WiMAX USB modem(s) + +@@ -41762,6 +41771,12 @@ usb:v12D6p0888* + usb:v12D7* + ID_VENDOR_FROM_DATABASE=BETTER WIRE FACTORY CO., LTD. + ++usb:v12D8* ++ ID_VENDOR_FROM_DATABASE=Araneus Information Systems Oy ++ ++usb:v12D8p0001* ++ ID_MODEL_FROM_DATABASE=Alea I True Random Number Generator ++ + usb:v12E6* + ID_VENDOR_FROM_DATABASE=Waldorf Music GmbH + +@@ -41805,7 +41820,7 @@ usb:v1307p0163* + ID_MODEL_FROM_DATABASE=256MB/512MB/1GB Flash Drive + + usb:v1307p0165* +- ID_MODEL_FROM_DATABASE=2GB/4GB Flash Drive ++ ID_MODEL_FROM_DATABASE=2GB/4GB/8GB Flash Drive + + usb:v1307p0190* + ID_MODEL_FROM_DATABASE=Ut190 8 GB Flash Drive with MicroSD reader +@@ -41846,6 +41861,51 @@ usb:v1312* + usb:v1313* + ID_VENDOR_FROM_DATABASE=ThorLabs + ++usb:v1313p0010* ++ ID_MODEL_FROM_DATABASE=LC1 Linear Camera (Jungo) ++ ++usb:v1313p0011* ++ ID_MODEL_FROM_DATABASE=SP1 Spectrometer (Jungo) ++ ++usb:v1313p0012* ++ ID_MODEL_FROM_DATABASE=SP2 Spectrometer (Jungo) ++ ++usb:v1313p0110* ++ ID_MODEL_FROM_DATABASE=LC1 Linear Camera (VISA) ++ ++usb:v1313p0111* ++ ID_MODEL_FROM_DATABASE=SP1 Spectrometer (VISA) ++ ++usb:v1313p0112* ++ ID_MODEL_FROM_DATABASE=SP2 Spectrometer (VISA) ++ ++usb:v1313p8001* ++ ID_MODEL_FROM_DATABASE=TXP-Series Slot (TXP5001, TXP5004) ++ ++usb:v1313p8012* ++ ID_MODEL_FROM_DATABASE=BC106 Camera Beam Profiler ++ ++usb:v1313p8013* ++ ID_MODEL_FROM_DATABASE=WFS10 Wavefront Sensor ++ ++usb:v1313p8017* ++ ID_MODEL_FROM_DATABASE=BC206 Camera Beam Profiler ++ ++usb:v1313p8019* ++ ID_MODEL_FROM_DATABASE=BP2 Multi Slit Beam Profiler ++ ++usb:v1313p8020* ++ ID_MODEL_FROM_DATABASE=PM300 Optical Power Meter ++ ++usb:v1313p8021* ++ ID_MODEL_FROM_DATABASE=PM300E Optical Power and Energy Meter ++ ++usb:v1313p8022* ++ ID_MODEL_FROM_DATABASE=PM320E Optical Power and Energy Meter ++ ++usb:v1313p8030* ++ ID_MODEL_FROM_DATABASE=ER100 Extinction Ratio Meter ++ + usb:v1313p8070* + ID_MODEL_FROM_DATABASE=PM100D + +@@ -41975,6 +42035,18 @@ usb:v1342p0204* + usb:v1342p0304* + ID_MODEL_FROM_DATABASE=EasiDock Ethernet + ++usb:v1343* ++ ID_VENDOR_FROM_DATABASE=Citizen Systems ++ ++usb:v1343p0003* ++ ID_MODEL_FROM_DATABASE=CX / DNP DS40 ++ ++usb:v1343p0004* ++ ID_MODEL_FROM_DATABASE=CX-W / DNP DS80 ++ ++usb:v1343p0005* ++ ID_MODEL_FROM_DATABASE=CY / DNP DSRX ++ + usb:v1345* + ID_VENDOR_FROM_DATABASE=Sino Lite Technology Corp. + +@@ -42002,6 +42074,12 @@ usb:v1347p0403* + usb:v1347p0404* + ID_MODEL_FROM_DATABASE=G2/G3/G4 CCD-F KAF CCD + ++usb:v1347p0405* ++ ID_MODEL_FROM_DATABASE=Gx CCD-I CCD ++ ++usb:v1347p0406* ++ ID_MODEL_FROM_DATABASE=Gx CCD-F CCD ++ + usb:v1347p0410* + ID_MODEL_FROM_DATABASE=G1-0400 CCD + +@@ -42149,6 +42227,9 @@ usb:v138Ap003C* + usb:v138Ap003D* + ID_MODEL_FROM_DATABASE=VFS491 + ++usb:v138Ap0050* ++ ID_MODEL_FROM_DATABASE=Swipe Fingerprint Sensor ++ + usb:v138E* + ID_VENDOR_FROM_DATABASE=Jungo LTD + +@@ -42161,6 +42242,9 @@ usb:v1390* + usb:v1390p0001* + ID_MODEL_FROM_DATABASE=GO 520 T/GO 630/ONE XL (v9) + ++usb:v1390p5454* ++ ID_MODEL_FROM_DATABASE=Blue & Me 2 ++ + usb:v1391* + ID_VENDOR_FROM_DATABASE=IdealTEK, Inc. + +@@ -42263,6 +42347,15 @@ usb:v13B1p0039* + usb:v13B1p003A* + ID_MODEL_FROM_DATABASE=AE2500 802.11abgn Wireless Adapter [Broadcom BCM43236] + ++usb:v13B1p003B* ++ ID_MODEL_FROM_DATABASE=AE3000 802.11abgn (3x3) Wireless Adapter [Ralink RT3573] ++ ++usb:v13B1p003E* ++ ID_MODEL_FROM_DATABASE=AE6000 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7610U] ++ ++usb:v13B1p003F* ++ ID_MODEL_FROM_DATABASE=WUSB6300 802.11a/b/g/n/ac Wireless Adapter [Realtek RTL8812AU] ++ + usb:v13B1p13B1* + ID_MODEL_FROM_DATABASE=WUSB200: Wireless-G Business Network Adapter with Rangebooster + +@@ -42446,6 +42539,12 @@ usb:v13D3p3315* + usb:v13D3p3375* + ID_MODEL_FROM_DATABASE=Atheros AR3012 Bluetooth 4.0 Adapter + ++usb:v13D3p3392* ++ ID_MODEL_FROM_DATABASE=Azurewave 43228+20702 ++ ++usb:v13D3p3394* ++ ID_MODEL_FROM_DATABASE=Bluetooth ++ + usb:v13D3p5070* + ID_MODEL_FROM_DATABASE=Webcam + +@@ -42458,6 +42557,9 @@ usb:v13D3p5115* + usb:v13D3p5116* + ID_MODEL_FROM_DATABASE=Integrated Webcam + ++usb:v13D3p5122* ++ ID_MODEL_FROM_DATABASE=2M Integrated Webcam ++ + usb:v13D3p5126* + ID_MODEL_FROM_DATABASE=PC Cam + +@@ -42524,6 +42626,9 @@ usb:v13FDp0840* + usb:v13FDp0841* + ID_MODEL_FROM_DATABASE=Samsung SE-T084M DVD-RW + ++usb:v13FDp1040* ++ ID_MODEL_FROM_DATABASE=INIC-1511L PATA Bridge ++ + usb:v13FDp1340* + ID_MODEL_FROM_DATABASE=Hi-Speed USB to SATA Bridge + +@@ -42533,9 +42638,15 @@ usb:v13FDp160F* + usb:v13FDp1640* + ID_MODEL_FROM_DATABASE=INIC-1610L SATA Bridge + ++usb:v13FDp1669* ++ ID_MODEL_FROM_DATABASE=INIC-1609PN ++ + usb:v13FDp1840* + ID_MODEL_FROM_DATABASE=INIC-1608 SATA bridge + ++usb:v13FDp1E40* ++ ID_MODEL_FROM_DATABASE=INIC-1610P SATA bridge ++ + usb:v13FE* + ID_VENDOR_FROM_DATABASE=Kingston Technology Company Inc. + +@@ -42555,10 +42666,10 @@ usb:v13FEp1E50* + ID_MODEL_FROM_DATABASE=U3 Smart Drive + + usb:v13FEp1F00* +- ID_MODEL_FROM_DATABASE=DataTraveler 2.0 4GB Flash Drive / Patriot Xporter 32GB (PEF32GUSB) Flash Drive ++ ID_MODEL_FROM_DATABASE=Kingston DataTraveler / Patriot Xporter + + usb:v13FEp1F23* +- ID_MODEL_FROM_DATABASE=2Gb ++ ID_MODEL_FROM_DATABASE=PS2232 flash drive controller + + usb:v13FEp2240* + ID_MODEL_FROM_DATABASE=microSD card reader +@@ -42569,12 +42680,18 @@ usb:v13FEp3100* + usb:v13FEp3123* + ID_MODEL_FROM_DATABASE=Verbatim STORE N GO 4GB + ++usb:v13FEp3600* ++ ID_MODEL_FROM_DATABASE=flash drive (4GB, EMTEC) ++ + usb:v13FEp3800* + ID_MODEL_FROM_DATABASE=Rage XT Flash Drive + + usb:v13FEp3E00* + ID_MODEL_FROM_DATABASE=Flash Drive + ++usb:v13FEp5000* ++ ID_MODEL_FROM_DATABASE=USB flash drive (32 GB SHARKOON Accelerate) ++ + usb:v13FEp5100* + ID_MODEL_FROM_DATABASE=Flash Drive + +@@ -42674,6 +42791,12 @@ usb:v1415p2000* + usb:v1419* + ID_VENDOR_FROM_DATABASE=ABILITY ENTERPRISE CO., LTD. + ++usb:v1421* ++ ID_VENDOR_FROM_DATABASE=Sensor Technology ++ ++usb:v1421p0605* ++ ID_MODEL_FROM_DATABASE=Sentech Camera ++ + usb:v1429* + ID_VENDOR_FROM_DATABASE=Vega Technologies Industrial (Austria) Co. + +@@ -42776,6 +42899,18 @@ usb:v1457p5118* + usb:v1457p5119* + ID_MODEL_FROM_DATABASE=OpenMoko Neo1973 u-boot cdc_acm serial port + ++usb:v1457p511A* ++ ID_MODEL_FROM_DATABASE=HXD8 u-boot usbtty CDC ACM Mode ++ ++usb:v1457p511B* ++ ID_MODEL_FROM_DATABASE=SMDK2440 u-boot usbtty CDC ACM mode ++ ++usb:v1457p511C* ++ ID_MODEL_FROM_DATABASE=SMDK2443 u-boot usbtty CDC ACM mode ++ ++usb:v1457p511D* ++ ID_MODEL_FROM_DATABASE=QT2410 u-boot usbtty CDC ACM mode ++ + usb:v1457p5120* + ID_MODEL_FROM_DATABASE=OpenMoko Neo1973 u-boot usbtty generic serial + +@@ -42935,6 +43070,9 @@ usb:v148E* + usb:v148F* + ID_VENDOR_FROM_DATABASE=Ralink Technology, Corp. + ++usb:v148Fp1000* ++ ID_MODEL_FROM_DATABASE=Motorola BC4 Bluetooth 3.0+HS Adapter ++ + usb:v148Fp1706* + ID_MODEL_FROM_DATABASE=RT2500USB Wireless Adapter + +@@ -42983,6 +43121,9 @@ usb:v148Fp5372* + usb:v148Fp5572* + ID_MODEL_FROM_DATABASE=RT5572 Wireless Adapter + ++usb:v148Fp7601* ++ ID_MODEL_FROM_DATABASE=MT7601U Wireless Adapter ++ + usb:v148Fp9020* + ID_MODEL_FROM_DATABASE=RT2500USB Wireless Adapter + +@@ -42998,6 +43139,15 @@ usb:v1491p0020* + usb:v1493* + ID_VENDOR_FROM_DATABASE=Suunto + ++usb:v1493p0010* ++ ID_MODEL_FROM_DATABASE=Bluebird [Ambit] ++ ++usb:v1493p0019* ++ ID_MODEL_FROM_DATABASE=Duck [Ambit2] ++ ++usb:v1493p001A* ++ ID_MODEL_FROM_DATABASE=Colibri [Ambit2 S] ++ + usb:v1497* + ID_VENDOR_FROM_DATABASE=Panstrong Company Ltd. + +@@ -43118,6 +43268,9 @@ usb:v14CD* + usb:v14CDp121C* + ID_MODEL_FROM_DATABASE=microSD card reader + ++usb:v14CDp121F* ++ ID_MODEL_FROM_DATABASE=microSD CardReader SY-T18 ++ + usb:v14CDp123A* + ID_MODEL_FROM_DATABASE=SD/MMC/RS-MMC Card Reader + +@@ -43131,7 +43284,7 @@ usb:v14CDp6116* + ID_MODEL_FROM_DATABASE=M6116 SATA Bridge + + usb:v14CDp6600* +- ID_MODEL_FROM_DATABASE=USB 2.0 IDE DEVICE ++ ID_MODEL_FROM_DATABASE=M110E PATA bridge + + usb:v14CDp6700* + ID_MODEL_FROM_DATABASE=Card Reader +@@ -43166,6 +43319,9 @@ usb:v14E1* + usb:v14E1p5000* + ID_MODEL_FROM_DATABASE=PenMount 5000 Touch Controller + ++usb:v14E4* ++ ID_VENDOR_FROM_DATABASE=Broadcom Corp. ++ + usb:v14E5* + ID_VENDOR_FROM_DATABASE=SAIN Information & Communications Co., Ltd. + +@@ -43214,6 +43370,15 @@ usb:v1501* + usb:v1509* + ID_VENDOR_FROM_DATABASE=First International Computer, Inc. + ++usb:v1509p0A01* ++ ID_MODEL_FROM_DATABASE=LI-3100 Area Meter ++ ++usb:v1509p0A02* ++ ID_MODEL_FROM_DATABASE=LI-7000 CO2/H2O Gas Analyzer ++ ++usb:v1509p0A03* ++ ID_MODEL_FROM_DATABASE=C-DiGit Blot Scanner ++ + usb:v1509p9242* + ID_MODEL_FROM_DATABASE=eHome Infrared Transceiver + +@@ -43253,6 +43418,12 @@ usb:v1518p0001* + usb:v1518p0002* + ID_MODEL_FROM_DATABASE=HDReye (before firmware loads) + ++usb:v1519* ++ ID_VENDOR_FROM_DATABASE=Comneon ++ ++usb:v1519p0020* ++ ID_MODEL_FROM_DATABASE=HSIC Device ++ + usb:v1520* + ID_VENDOR_FROM_DATABASE=Bitwire Corp. + +@@ -43280,6 +43451,15 @@ usb:v1529p3100* + usb:v152A* + ID_VENDOR_FROM_DATABASE=Thesycon Systemsoftware & Consulting GmbH + ++usb:v152Ap8400* ++ ID_MODEL_FROM_DATABASE=INI DVS128 ++ ++usb:v152Ap840D* ++ ID_MODEL_FROM_DATABASE=INI DAViS ++ ++usb:v152Ap841A* ++ ID_MODEL_FROM_DATABASE=INI DAViS FX3 ++ + usb:v152D* + ID_VENDOR_FROM_DATABASE=JMicron Technology Corp. / JMicron USA Technology Corp. + +@@ -43337,6 +43517,9 @@ usb:v1532p0007* + usb:v1532p0013* + ID_MODEL_FROM_DATABASE=Orochi mouse + ++usb:v1532p0015* ++ ID_MODEL_FROM_DATABASE=Naga Mouse ++ + usb:v1532p0016* + ID_MODEL_FROM_DATABASE=DeathAdder Mouse + +@@ -43364,9 +43547,21 @@ usb:v1532p0102* + usb:v1532p0109* + ID_MODEL_FROM_DATABASE=Lycosa Keyboard + ++usb:v1532p0113* ++ ID_MODEL_FROM_DATABASE=RZ07-0074 Gaming Keypad [Orbweaver] ++ + usb:v1532p0300* + ID_MODEL_FROM_DATABASE=RZ06-0063 Motion Sensing Controllers [Hydra] + ++usb:v153B* ++ ID_VENDOR_FROM_DATABASE=TerraTec Electronic GmbH ++ ++usb:v153Bp1181* ++ ID_MODEL_FROM_DATABASE=Cinergy S2 PCIe Dual Port 1 ++ ++usb:v153Bp1182* ++ ID_MODEL_FROM_DATABASE=Cinergy S2 PCIe Dual Port 2 ++ + usb:v1546* + ID_VENDOR_FROM_DATABASE=U-Blox AG + +@@ -43388,12 +43583,18 @@ usb:v154B* + usb:v154Bp0010* + ID_MODEL_FROM_DATABASE=USB 2.0 Flash Drive + ++usb:v154Bp0048* ++ ID_MODEL_FROM_DATABASE=Flash Drive ++ + usb:v154Bp004D* + ID_MODEL_FROM_DATABASE=8 GB Flash Drive + + usb:v154Bp0057* + ID_MODEL_FROM_DATABASE=32GB Micro Slide Attache Flash Drive + ++usb:v154Bp007A* ++ ID_MODEL_FROM_DATABASE=8GB Classic Attache Flash Drive ++ + usb:v154Bp6545* + ID_MODEL_FROM_DATABASE=FD Device + +@@ -43530,7 +43731,10 @@ usb:v15A2p0052* + ID_MODEL_FROM_DATABASE=i.MX50 SystemOnChip in RecoveryMode + + usb:v15A2p0054* +- ID_MODEL_FROM_DATABASE=i.MX6Q SystemOnChip in RecoveryMode ++ ID_MODEL_FROM_DATABASE=i.MX 6Dual/6Quad SystemOnChip in RecoveryMode ++ ++usb:v15A2p0061* ++ ID_MODEL_FROM_DATABASE=i.MX 6Solo/6DualLite SystemOnChip in RecoveryMode + + usb:v15A4* + ID_VENDOR_FROM_DATABASE=Afatech Technologies, Inc. +@@ -43640,6 +43844,9 @@ usb:v15C2p0036* + usb:v15C2p0038* + ID_MODEL_FROM_DATABASE=GD01 MX LCD Display/IR Receiver + ++usb:v15C2p0042* ++ ID_MODEL_FROM_DATABASE=Antec Veris Multimedia Station E-Z IR Receiver ++ + usb:v15C2pFFDA* + ID_MODEL_FROM_DATABASE=iMON PAD Remote Controller + +@@ -43724,6 +43931,9 @@ usb:v15D9p0A4C* + usb:v15D9p0A4D* + ID_MODEL_FROM_DATABASE=Optical Mouse + ++usb:v15D9p0A4F* ++ ID_MODEL_FROM_DATABASE=Optical Mouse ++ + usb:v15DC* + ID_VENDOR_FROM_DATABASE=Hynix Semiconductor Inc. + +@@ -44507,6 +44717,15 @@ usb:v1690p0740* + usb:v1690p0901* + ID_MODEL_FROM_DATABASE=Voyager 205 ADSL Router + ++usb:v1690p2000* ++ ID_MODEL_FROM_DATABASE=naturaSign Pad Standard ++ ++usb:v1690p2001* ++ ID_MODEL_FROM_DATABASE=naturaSign Pad Standard ++ ++usb:v1690pFE12* ++ ID_MODEL_FROM_DATABASE=Bootloader ++ + usb:v1696* + ID_VENDOR_FROM_DATABASE=Hitachi Video and Information System, Inc. + +@@ -44669,6 +44888,9 @@ usb:v16C0p06B4* + usb:v16C0p06B5* + ID_MODEL_FROM_DATABASE=USB2LPT with 3 interfaces (native, HID, printer) + ++usb:v16C0p0762* ++ ID_MODEL_FROM_DATABASE=Osmocom SIMtrace ++ + usb:v16C0p076B* + ID_MODEL_FROM_DATABASE=OpenPCD 13.56MHz RFID Reader + +@@ -44759,6 +44981,15 @@ usb:v16D0p075D* + usb:v16D0p080A* + ID_MODEL_FROM_DATABASE=S2E1 Interface + ++usb:v16D0p0870* ++ ID_MODEL_FROM_DATABASE=Kaufmann Automotive GmbH, RKS+CAN Interface ++ ++usb:v16D1* ++ ID_VENDOR_FROM_DATABASE=Suprema Inc. ++ ++usb:v16D1p0401* ++ ID_MODEL_FROM_DATABASE=SUP-SFR400(A) BioMini Fingerprint Reader ++ + usb:v16D3* + ID_VENDOR_FROM_DATABASE=Frontline Test Equipment, Inc. + +@@ -44774,6 +45005,9 @@ usb:v16D5p6501* + usb:v16D5p6502* + ID_MODEL_FROM_DATABASE=CDMA/UMTS/GPRS modem + ++usb:v16D5p6603* ++ ID_MODEL_FROM_DATABASE=ADU-890WH modem ++ + usb:v16D6* + ID_VENDOR_FROM_DATABASE=JABLOCOM s.r.o. + +@@ -44870,6 +45104,18 @@ usb:v170Bp0011* + usb:v170D* + ID_VENDOR_FROM_DATABASE=Avnera + ++usb:v1711* ++ ID_VENDOR_FROM_DATABASE=Leica Microsystems ++ ++usb:v1711p3020* ++ ID_MODEL_FROM_DATABASE=IC80 HD Camera ++ ++usb:v1724* ++ ID_VENDOR_FROM_DATABASE=Meyer Instruments (MIS) ++ ++usb:v1724p0115* ++ ID_MODEL_FROM_DATABASE=PAXcam5 ++ + usb:v1725* + ID_VENDOR_FROM_DATABASE=Vitesse Semiconductor + +@@ -44957,9 +45203,21 @@ usb:v1737p0078* + usb:v1737p0079* + ID_MODEL_FROM_DATABASE=WUSB600N v2 Dual-Band Wireless-N Network Adapter [Ralink RT3572] + ++usb:v173D* ++ ID_VENDOR_FROM_DATABASE=QSENN ++ ++usb:v173Dp0002* ++ ID_MODEL_FROM_DATABASE=GP-K7000 keyboard ++ + usb:v1740* + ID_VENDOR_FROM_DATABASE=Senao + ++usb:v1740p0100* ++ ID_MODEL_FROM_DATABASE=EUB1200AC AC1200 DB Wireless Adapter [Realtek RTL8812AU] ++ ++usb:v1740p0600* ++ ID_MODEL_FROM_DATABASE=EUB600v1 802.11abgn Wireless Adapter [Ralink RT3572] ++ + usb:v1740p0605* + ID_MODEL_FROM_DATABASE=LevelOne WUA-0605 N_Max Wireless USB Adapter + +@@ -45002,14 +45260,20 @@ usb:v1743* + usb:v1748* + ID_VENDOR_FROM_DATABASE=MQP Electronics + ++usb:v1748p0101* ++ ID_MODEL_FROM_DATABASE=Packet-Master USB12 ++ + usb:v174C* + ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc. + + usb:v174Cp5106* + ID_MODEL_FROM_DATABASE=Transcend StoreJet 25M3 + ++usb:v174Cp5136* ++ ID_MODEL_FROM_DATABASE=ASM1053 SATA 6Gb/s bridge ++ + usb:v174Cp55AA* +- ID_MODEL_FROM_DATABASE=ASMedia 2105 SATA bridge ++ ID_MODEL_FROM_DATABASE=ASM1051 SATA 3Gb/s bridge + + usb:v174F* + ID_VENDOR_FROM_DATABASE=Syntek +@@ -45137,6 +45401,9 @@ usb:v1781p0C31* + usb:v1781p0C9F* + ID_MODEL_FROM_DATABASE=USBtiny + ++usb:v1781p1EEF* ++ ID_MODEL_FROM_DATABASE=OpenAPC SecuKey ++ + usb:v1782* + ID_VENDOR_FROM_DATABASE=Spreadtrum Communications Inc. + +@@ -45206,6 +45473,9 @@ usb:v17A0p0100* + usb:v17A0p0101* + ID_MODEL_FROM_DATABASE=UB1 boundary microphone + ++usb:v17A0p0120* ++ ID_MODEL_FROM_DATABASE=Meteorite condenser microphone ++ + usb:v17A0p0200* + ID_MODEL_FROM_DATABASE=StudioDock monitors (internal hub) + +@@ -45221,6 +45491,9 @@ usb:v17A0p0301* + usb:v17A0p0302* + ID_MODEL_FROM_DATABASE=GoMic compact condenser microphone + ++usb:v17A0p0303* ++ ID_MODEL_FROM_DATABASE=C01U Pro condenser microphone ++ + usb:v17A0p0304* + ID_MODEL_FROM_DATABASE=Q2U handheld mic with XLR + +@@ -45371,6 +45644,9 @@ usb:v17E9p037C* + usb:v17E9p037D* + ID_MODEL_FROM_DATABASE=Plugable USB2-HDMI-165 + ++usb:v17E9p410A* ++ ID_MODEL_FROM_DATABASE=HDMI Adapter ++ + usb:v17E9p430A* + ID_MODEL_FROM_DATABASE=HP Port Replicator (Composite Device) + +@@ -45383,6 +45659,9 @@ usb:v17EB* + usb:v17EF* + ID_VENDOR_FROM_DATABASE=Lenovo + ++usb:v17EFp1000* ++ ID_MODEL_FROM_DATABASE=Hub ++ + usb:v17EFp1003* + ID_MODEL_FROM_DATABASE=Integrated Smart Card Reader + +@@ -45395,6 +45674,9 @@ usb:v17EFp1008* + usb:v17EFp100A* + ID_MODEL_FROM_DATABASE=ThinkPad Mini Dock Plus Series 3 + ++usb:v17EFp304B* ++ ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN] ++ + usb:v17EFp3815* + ID_MODEL_FROM_DATABASE=ChipsBnk 2GB USB Stick + +@@ -45455,6 +45737,12 @@ usb:v17EFp6009* + usb:v17EFp6014* + ID_MODEL_FROM_DATABASE=Mini Wireless Keyboard N5901 + ++usb:v17EFp6025* ++ ID_MODEL_FROM_DATABASE=ThinkPad Travel Mouse ++ ++usb:v17EFp7203* ++ ID_MODEL_FROM_DATABASE=Ethernet adapter [U2L 100P-Y1] ++ + usb:v17EFp7423* + ID_MODEL_FROM_DATABASE=IdeaPad A1 Tablet + diff --git a/0422-nspawn-allow-to-bind-mount-journal-on-top-of-a-non-e.patch b/0422-nspawn-allow-to-bind-mount-journal-on-top-of-a-non-e.patch new file mode 100644 index 0000000..c8080c5 --- /dev/null +++ b/0422-nspawn-allow-to-bind-mount-journal-on-top-of-a-non-e.patch @@ -0,0 +1,44 @@ +From cc662a6cadcc063bc54f1af54025e73e08aaca4d Mon Sep 17 00:00:00 2001 +From: Djalal Harouni +Date: Fri, 11 Apr 2014 01:45:52 +0100 +Subject: [PATCH] nspawn: allow to bind mount journal on top of a non empty + container journal dentry + +Currently if nspawn was called with --link-journal=host or +--link-journal=auto and the right /var/log/journal/machine-id/ exists +then the bind mount the subdirectory into the container might fail due +to the ~/mycontainer/var/log/journal/machine-id/ of the container not +being empty. + +There is no reason to check if the container journal subdir is empty +since there will be a bind mount on top of it. The user asked for a bind +mount so give it. + +Note: a next call with --link-journal=guest may fail due to the +/var/log/journal/machine-id/ on the host not being empty. + +https://bugs.freedesktop.org/show_bug.cgi?id=76193 + +Reported-by: Tobias Hunger +(cherry picked from commit e6a4a517befe559adf6d1dbbadf425c3538849c9) +(cherry picked from commit 8113d58e81f21d21cc44eda4381f56d5c4be9005) +--- + src/nspawn/nspawn.c | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 028dbe3..d645001 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -939,11 +939,6 @@ static int setup_journal(const char *directory) { + } else if (access(p, F_OK) < 0) + return 0; + +- if (dir_is_empty(q) == 0) { +- log_error("%s not empty.", q); +- return -ENOTEMPTY; +- } +- + r = mkdir_p(q, 0755); + if (r < 0) { + log_error("Failed to create %s: %m", q); diff --git a/0423-nspawn-restore-journal-directory-is-empty-check.patch b/0423-nspawn-restore-journal-directory-is-empty-check.patch new file mode 100644 index 0000000..914cdf7 --- /dev/null +++ b/0423-nspawn-restore-journal-directory-is-empty-check.patch @@ -0,0 +1,30 @@ +From 99c831425b65770f43a833d603251c654ef459d8 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 15:19:46 +0900 +Subject: [PATCH] nspawn: restore journal directory is empty check + +This undoes part of commit e6a4a517befe559adf6d1dbbadf425c3538849c9. + +Instead of removing the error message about non-empty journal bind mount +directories, simply downgrade the message to a warning and proceed. + +(cherry picked from commit cdb2b9d05a2f3d649f47bd2ba24eb3fe30b52e92) +(cherry picked from commit 2b1f027f8e194fdb52bc75d3607b01232bdbee15) +--- + src/nspawn/nspawn.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index d645001..28e50fb 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -939,6 +939,9 @@ static int setup_journal(const char *directory) { + } else if (access(p, F_OK) < 0) + return 0; + ++ if (dir_is_empty(q) == 0) ++ log_warning("%s is not empty, proceeding anyway.", q); ++ + r = mkdir_p(q, 0755); + if (r < 0) { + log_error("Failed to create %s: %m", q); diff --git a/0424-machine-escape-fields-we-store-in-run-so-that-they-c.patch b/0424-machine-escape-fields-we-store-in-run-so-that-they-c.patch new file mode 100644 index 0000000..c1dfae6 --- /dev/null +++ b/0424-machine-escape-fields-we-store-in-run-so-that-they-c.patch @@ -0,0 +1,68 @@ +From 05780644890a48d3de410dabef94159c50a8fa21 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 10:26:23 +0900 +Subject: [PATCH] machine: escape fields we store in /run, so that they can be + properly unescaped by parse_env_file() + +(cherry picked from commit ca5405bb4fb1fabd1fe43e4ee23edf58914bdfae) +(cherry picked from commit 0be4e0b695a297e4ad0a57860798a58053a2f916) + +Conflicts: + src/machine/machine.c +--- + src/machine/machine.c | 37 +++++++++++++++++++++++++++++++------ + 1 file changed, 31 insertions(+), 6 deletions(-) + +diff --git a/src/machine/machine.c b/src/machine/machine.c +index 602aa18..3df9c45 100644 +--- a/src/machine/machine.c ++++ b/src/machine/machine.c +@@ -120,17 +120,42 @@ int machine_save(Machine *m) { + "NAME=%s\n", + m->name); + +- if (m->scope) +- fprintf(f, "SCOPE=%s\n", m->scope); ++ if (m->scope) { ++ _cleanup_free_ char *escaped; ++ ++ escaped = cescape(m->scope); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ fprintf(f, "SCOPE=%s\n", escaped); ++ } + + if (m->scope_job) + fprintf(f, "SCOPE_JOB=%s\n", m->scope_job); + +- if (m->service) +- fprintf(f, "SERVICE=%s\n", m->service); ++ if (m->service) { ++ _cleanup_free_ char *escaped; + +- if (m->root_directory) +- fprintf(f, "ROOT=%s\n", m->root_directory); ++ escaped = cescape(m->service); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ fprintf(f, "SERVICE=%s\n", escaped); ++ } ++ ++ if (m->root_directory) { ++ _cleanup_free_ char *escaped; ++ ++ escaped = cescape(m->root_directory); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ fprintf(f, "ROOT=%s\n", escaped); ++ } + + if (!sd_id128_equal(m->id, SD_ID128_NULL)) + fprintf(f, "ID=" SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(m->id)); diff --git a/0425-logind-also-escape-external-data-when-saving-to-run.patch b/0425-logind-also-escape-external-data-when-saving-to-run.patch new file mode 100644 index 0000000..1ac0866 --- /dev/null +++ b/0425-logind-also-escape-external-data-when-saving-to-run.patch @@ -0,0 +1,76 @@ +From 5133a167daf7b62eb0e72f8cb51448cf8be194db Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 10:35:28 +0900 +Subject: [PATCH] logind: also escape external data when saving to /run + +Better be safe than sorry... + +(cherry picked from commit 558c6490b1df7f82a63d0a747fda7412c4d28b0c) +(cherry picked from commit 1be1ff309f703b077bf87020d520469d33546e03) + +Conflicts: + src/login/logind-session.c +--- + src/login/logind-session.c | 40 +++++++++++++++++++++++++++++++++------- + 1 file changed, 33 insertions(+), 7 deletions(-) + +diff --git a/src/login/logind-session.c b/src/login/logind-session.c +index 9de60af..77a9c66 100644 +--- a/src/login/logind-session.c ++++ b/src/login/logind-session.c +@@ -202,7 +202,6 @@ int session_save(Session *s) { + + if (s->scope) + fprintf(f, "SCOPE=%s\n", s->scope); +- + if (s->scope_job) + fprintf(f, "SCOPE_JOB=%s\n", s->scope_job); + +@@ -218,14 +217,41 @@ int session_save(Session *s) { + if (s->display) + fprintf(f, "DISPLAY=%s\n", s->display); + +- if (s->remote_host) +- fprintf(f, "REMOTE_HOST=%s\n", s->remote_host); ++ if (s->remote_host) { ++ _cleanup_free_ char *escaped; ++ ++ escaped = cescape(s->remote_host); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } + +- if (s->remote_user) +- fprintf(f, "REMOTE_USER=%s\n", s->remote_user); ++ fprintf(f, "REMOTE_HOST=%s\n", escaped); ++ } ++ ++ if (s->remote_user) { ++ _cleanup_free_ char *escaped; ++ ++ escaped = cescape(s->remote_user); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } + +- if (s->service) +- fprintf(f, "SERVICE=%s\n", s->service); ++ fprintf(f, "REMOTE_USER=%s\n", escaped); ++ } ++ ++ if (s->service) { ++ _cleanup_free_ char *escaped; ++ ++ escaped = cescape(s->service); ++ if (!escaped) { ++ r = -ENOMEM; ++ goto finish; ++ } ++ ++ fprintf(f, "SERVICE=%s\n", escaped); ++ } + + if (s->seat && seat_has_vts(s->seat)) + fprintf(f, "VTNR=%i\n", s->vtnr); diff --git a/0426-man-drop-reference-to-file-locking-for-PID-file-crea.patch b/0426-man-drop-reference-to-file-locking-for-PID-file-crea.patch new file mode 100644 index 0000000..8391aa2 --- /dev/null +++ b/0426-man-drop-reference-to-file-locking-for-PID-file-crea.patch @@ -0,0 +1,29 @@ +From 11d7f271bd495d536f0e905ec7e16b6d22bac663 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 16:15:56 +0900 +Subject: [PATCH] man: drop reference to file locking for PID file creation + from daemon(7) + +File locking is usually a bad idea, don't suggest using it. + +(cherry picked from commit c4b834a4adfa4f858ed9fd07b300588ec1c3e20e) +(cherry picked from commit ab28d5c3ed99817a76607f88e99d6d60feaf22c2) +--- + man/daemon.xml | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/man/daemon.xml b/man/daemon.xml +index 932de3b..170949e 100644 +--- a/man/daemon.xml ++++ b/man/daemon.xml +@@ -158,9 +158,7 @@ + it is verified at the same time that + the PID previously stored in the PID + file no longer exists or belongs to a +- foreign process. Commonly, some kind of +- file locking is employed to implement +- this logic. ++ foreign process. + + In the daemon process, + drop privileges, if possible and diff --git a/0427-man-update-URL-refernce-in-daemon-7.patch b/0427-man-update-URL-refernce-in-daemon-7.patch new file mode 100644 index 0000000..d06c089 --- /dev/null +++ b/0427-man-update-URL-refernce-in-daemon-7.patch @@ -0,0 +1,25 @@ +From b7ae22f942dd031082fc5425a365ce258517759c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 16:22:48 +0900 +Subject: [PATCH] man: update URL refernce in daemon(7) + +http://lists.freedesktop.org/archives/systemd-devel/2014-May/019410.html +(cherry picked from commit 0afedd300cbe53bd5a54aefc81cede1eae9a9ab8) +(cherry picked from commit 13fc6c9bfacdca10d3e7eb73cd96515cae760734) +--- + man/daemon.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/daemon.xml b/man/daemon.xml +index 170949e..543468e 100644 +--- a/man/daemon.xml ++++ b/man/daemon.xml +@@ -352,7 +352,7 @@ + + These recommendations are similar but + not identical to the Apple ++ url="https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html">Apple + MacOS X Daemon Requirements. + + diff --git a/0428-conf-parser-never-consider-it-an-error-if-we-cannot-.patch b/0428-conf-parser-never-consider-it-an-error-if-we-cannot-.patch new file mode 100644 index 0000000..e70d421 --- /dev/null +++ b/0428-conf-parser-never-consider-it-an-error-if-we-cannot-.patch @@ -0,0 +1,29 @@ +From da20acfc79c6f9cda31dfd37e0bd9eac61191970 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 16:47:46 +0900 +Subject: [PATCH] conf-parser: never consider it an error if we cannot load a + drop-in file because it is missing + +After all, we want to be able to boot with /etc empty one day... + +(cherry picked from commit 9f43a07f10639c5b41b45448e551e43914eefe32) +(cherry picked from commit 31dc5786e03bf8f00371d36ed702197ed842afe6) +--- + src/shared/conf-parser.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c +index 4ac71ed..e206b5b 100644 +--- a/src/shared/conf-parser.c ++++ b/src/shared/conf-parser.c +@@ -320,8 +320,8 @@ int config_parse(const char *unit, + if (!f) { + f = ours = fopen(filename, "re"); + if (!f) { +- log_error("Failed to open configuration file '%s': %m", filename); +- return -errno; ++ log_full(errno == ENOENT ? LOG_DEBUG : LOG_ERR, "Failed to open configuration file '%s': %m", filename); ++ return errno == ENOENT ? 0 : -errno; + } + } + diff --git a/0429-socket-properly-handle-if-our-service-vanished-durin.patch b/0429-socket-properly-handle-if-our-service-vanished-durin.patch new file mode 100644 index 0000000..93b2feb --- /dev/null +++ b/0429-socket-properly-handle-if-our-service-vanished-durin.patch @@ -0,0 +1,29 @@ +From a230a93aa21f2f5c8e1d6dd523714530ea4ab75e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 22 May 2014 16:56:21 +0900 +Subject: [PATCH] socket: properly handle if our service vanished during + runtime + +(cherry picked from commit 640ace4a8de907994a1b95f6d368c3e6a8fcf60f) +(cherry picked from commit b56c47689c38ea4be7d0307e1e01be5acecf73be) +--- + src/core/socket.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/core/socket.c b/src/core/socket.c +index 842850f..b811a61 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -1462,6 +1462,12 @@ static void socket_enter_running(Socket *s, int cfd) { + } + + if (!pending) { ++ if (!UNIT_ISSET(s->service)) { ++ log_error_unit(UNIT(s)->id, "%s: service to activate vanished, refusing activation.", UNIT(s)->id); ++ r = -ENOENT; ++ goto fail; ++ } ++ + r = manager_add_job(UNIT(s)->manager, JOB_START, UNIT_DEREF(s->service), JOB_REPLACE, true, &error, NULL); + if (r < 0) + goto fail; diff --git a/0430-keymap-Add-Lenovo-Enhanced-USB-Keyboard.patch b/0430-keymap-Add-Lenovo-Enhanced-USB-Keyboard.patch new file mode 100644 index 0000000..00c4839 --- /dev/null +++ b/0430-keymap-Add-Lenovo-Enhanced-USB-Keyboard.patch @@ -0,0 +1,37 @@ +From 3b0ae67b69835006cc828fca36732704bc7dbd48 Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Sun, 25 May 2014 11:57:22 +0200 +Subject: [PATCH] keymap: Add Lenovo Enhanced USB Keyboard + +https://bugs.freedesktop.org/show_bug.cgi?id=77234 +(cherry picked from commit d258d4967eb24122c2b1014d4e873f61b633f1d2) +(cherry picked from commit f36ed0204ee1f917f8eadc37bb655324b1e4157a) + +Conflicts: + hwdb/60-keyboard.hwdb +--- + hwdb/60-keyboard.hwdb | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index fdab827..c320c21 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -576,6 +576,17 @@ keyboard:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*U300s*:pvr* + KEYBOARD_KEY_f1=f21 + KEYBOARD_KEY_ce=f20 + ++# enhanced USB keyboard ++keyboard:usb:v04B3p301B* ++ KEYBOARD_KEY_90001=prog1 # ThinkVantage ++ KEYBOARD_KEY_90002=screenlock ++ KEYBOARD_KEY_90003=file ++ KEYBOARD_KEY_90004=wordprocessor ++ KEYBOARD_KEY_90005=spreadsheet ++ KEYBOARD_KEY_90006=calc ++ KEYBOARD_KEY_90007=mail ++ KEYBOARD_KEY_90008=www ++ + ########################################################### + # Logitech + ########################################################### diff --git a/0431-keymap-Asus-EeePC-touchpad-toggle-key.patch b/0431-keymap-Asus-EeePC-touchpad-toggle-key.patch new file mode 100644 index 0000000..d52919c --- /dev/null +++ b/0431-keymap-Asus-EeePC-touchpad-toggle-key.patch @@ -0,0 +1,32 @@ +From 69979668d98365c4862f0de067cf54aac759873f Mon Sep 17 00:00:00 2001 +From: Martin Pitt +Date: Sun, 25 May 2014 12:16:35 +0200 +Subject: [PATCH] keymap: Asus EeePC touchpad toggle key + +Originally is KEY_TOUCHPAD_TOGGLE, but X.org can't handle the big key events, +so use the F21 convention. + +https://bugs.freedesktop.org/show_bug.cgi?id=72807 +(cherry picked from commit e55edb22a71e67f01534d28f91c6aa27bba48fc1) +(cherry picked from commit 970e92893ea9aff1df21ad5e9a19f7d1c0fdedbe) + +Conflicts: + hwdb/60-keyboard.hwdb +--- + hwdb/60-keyboard.hwdb | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index c320c21..b407949 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -140,6 +140,9 @@ keyboard:dmi:bvn*:bvr*:bd*:svnASUS:pn* + keyboard:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr* + KEYBOARD_KEY_6b=f21 # Touchpad Toggle + ++keyboard:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:pvr* ++ KEYBOARD_KEY_6b=f21 # Touchpad Toggle ++ + ########################################################### + # BenQ + ########################################################### diff --git a/0432-udev-keyboard-also-hook-into-change-events.patch b/0432-udev-keyboard-also-hook-into-change-events.patch new file mode 100644 index 0000000..b2b6f03 --- /dev/null +++ b/0432-udev-keyboard-also-hook-into-change-events.patch @@ -0,0 +1,27 @@ +From 9dc8d00250c7e28f8e1c6f4a4508247971097312 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Mon, 26 May 2014 09:30:21 +0800 +Subject: [PATCH] udev: keyboard - also hook into "change" events + +Re-apply the keymaps when "udevadm trigger" is called. Hooking into +"add" only would just remove all keymap content from the udev database +instead of applying the new config. + +(cherry picked from commit 49804365ea1242456c9763058a59cf68479e07ea) +(cherry picked from commit 8d9518eb8f0dbf20e0abfb3b97845ff1f22d8dc3) +--- + rules/60-keyboard.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rules/60-keyboard.rules b/rules/60-keyboard.rules +index 4e0f366..22f71e7 100644 +--- a/rules/60-keyboard.rules ++++ b/rules/60-keyboard.rules +@@ -1,6 +1,6 @@ + # do not edit this file, it will be overwritten on update + +-ACTION!="add", GOTO="keyboard_end" ++ACTION=="remove", GOTO="keyboard_end" + KERNEL!="event*", GOTO="keyboard_end" + ENV{ID_INPUT_KEY}=="", GOTO="keyboard_end" + diff --git a/0433-Do-not-unescape-unit-names-in-Install-section.patch b/0433-Do-not-unescape-unit-names-in-Install-section.patch new file mode 100644 index 0000000..bd7dcae --- /dev/null +++ b/0433-Do-not-unescape-unit-names-in-Install-section.patch @@ -0,0 +1,25 @@ +From 5cc09ed951c574c5db646da49af575ee972ad15a Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 26 May 2014 20:09:45 +0200 +Subject: [PATCH] Do not unescape unit names in [Install] section + +https://bugs.freedesktop.org/show_bug.cgi?id=49316 +(cherry picked from commit 000f6e5667eb4f73e137cbd0d7395a9f9db7728a) +(cherry picked from commit 6a5aa37d144cf0d2be355324e78ff320556628a5) +--- + 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 e206b5b..348a540 100644 +--- a/src/shared/conf-parser.c ++++ b/src/shared/conf-parser.c +@@ -669,7 +669,7 @@ int config_parse_strv(const char *unit, + FOREACH_WORD_QUOTED(w, l, rvalue, state) { + _cleanup_free_ char *n; + +- n = cunescape_length(w, l); ++ n = strndup(w, l); + if (!n) + return log_oom(); + diff --git a/0434-util-ignore_file-should-not-allow-files-ending-with.patch b/0434-util-ignore_file-should-not-allow-files-ending-with.patch new file mode 100644 index 0000000..9e69581 --- /dev/null +++ b/0434-util-ignore_file-should-not-allow-files-ending-with.patch @@ -0,0 +1,28 @@ +From b83bfe4cf4bf0b866b7f5b7672f644fc68e3e352 Mon Sep 17 00:00:00 2001 +From: Thomas Hindoe Paaboel Andersen +Date: Sat, 31 May 2014 21:36:23 +0200 +Subject: [PATCH] util: ignore_file should not allow files ending with '~' + +ignore_file currently allows any file ending with '~' while it +seems that the opposite was intended: +a228a22fda4faa9ecb7c5a5e499980c8ae5d2a08 + +(cherry picked from commit 93f1a06374e335e8508d89e1bdaadf45be6ab777) +(cherry picked from commit c4a42680d72b18c5bd8717e6cff3e0df049936d9) +--- + 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 9f5ee53..89fa053 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -1499,7 +1499,7 @@ bool ignore_file(const char *filename) { + assert(filename); + + if (endswith(filename, "~")) +- return false; ++ return true; + + return ignore_file_allow_backup(filename); + } diff --git a/0435-udev-builtin-keyboard-do-tell-on-which-device-EVIOCS.patch b/0435-udev-builtin-keyboard-do-tell-on-which-device-EVIOCS.patch new file mode 100644 index 0000000..a9e5fef --- /dev/null +++ b/0435-udev-builtin-keyboard-do-tell-on-which-device-EVIOCS.patch @@ -0,0 +1,34 @@ +From 0ac1bf960367c9cfe941970b212353e4c10523e8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Fri, 30 May 2014 13:16:56 -0400 +Subject: [PATCH] udev-builtin-keyboard: do tell on which device EVIOCSKEYCODE + failed. + +I am getting + +"Error calling EVIOCSKEYCODE (scan code 0xc022d, key code 418): Invalid +argument", the error message does not tell on which specific device the +problem is, add that info. + +(cherry picked from commit a52ec8ed881537627869afa8f0486db7e20ce2db) +(cherry picked from commit 55cf7f15b43583bbb17bbe7220aedefeeb39e141) + +Conflicts: + src/udev/udev-builtin-keyboard.c +--- + src/udev/udev-builtin-keyboard.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c +index 8f457ab..6357931 100644 +--- a/src/udev/udev-builtin-keyboard.c ++++ b/src/udev/udev-builtin-keyboard.c +@@ -143,7 +143,7 @@ static int builtin_keyboard(struct udev_device *dev, int argc, char *argv[], boo + log_debug("keyboard: mapping scan code %d (0x%x) to key code %d (0x%x)\n", + map[i].scan, map[i].scan, map[i].key, map[i].key); + if (ioctl(fd, EVIOCSKEYCODE, &map[i]) < 0) +- log_error("Error calling EVIOCSKEYCODE: %m\n"); ++ log_error("Error calling EVIOCSKEYCODE on device node '%s' (scan code 0x%x, key code %d): %m", node, map[i].scan, map[i].key); + } + + /* install list of force-release codes */ diff --git a/0436-tty-ask-password-agent-Do-tell-what-directory-we-fai.patch b/0436-tty-ask-password-agent-Do-tell-what-directory-we-fai.patch new file mode 100644 index 0000000..855d68b --- /dev/null +++ b/0436-tty-ask-password-agent-Do-tell-what-directory-we-fai.patch @@ -0,0 +1,25 @@ +From 9e693c89b05d1d2b91314767017487883eb420be Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cristian=20Rodr=C3=ADguez?= +Date: Thu, 29 May 2014 14:17:37 -0400 +Subject: [PATCH] tty-ask-password-agent: Do tell what directory we failed to + open + +(cherry picked from commit 267b3e41df5a2181f2911433539f81de2fa1511a) +(cherry picked from commit 54fcd1a651e89f4dd901dbecabf212f732006423) +--- + src/tty-ask-password-agent/tty-ask-password-agent.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c +index cb74c72..1e9ad9e 100644 +--- a/src/tty-ask-password-agent/tty-ask-password-agent.c ++++ b/src/tty-ask-password-agent/tty-ask-password-agent.c +@@ -503,7 +503,7 @@ static int show_passwords(void) { + if (errno == ENOENT) + return 0; + +- log_error("opendir(): %m"); ++ log_error("opendir(/run/systemd/ask-password): %m"); + return -errno; + } + diff --git a/0437-keyboard-add-Plantronics-.Audio-mute-button.patch b/0437-keyboard-add-Plantronics-.Audio-mute-button.patch new file mode 100644 index 0000000..7d77ccd --- /dev/null +++ b/0437-keyboard-add-Plantronics-.Audio-mute-button.patch @@ -0,0 +1,31 @@ +From bd541faf4f117a85f7567cfb7f41509824255571 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Sun, 1 Jun 2014 14:01:23 -0400 +Subject: [PATCH] keyboard: add Plantronics .Audio mute button + +https://bugs.freedesktop.org/show_bug.cgi?id=79495 +(cherry picked from commit 9e3dbf6b2b99d0e16989d9cedb458729db5a60c3) +(cherry picked from commit db75f7e5b9f699ebd4936e9342482b6ffb67cb78) +--- + hwdb/60-keyboard.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index b407949..17f06e8 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -864,6 +864,14 @@ keyboard:dmi:bvn*:bvr*:bd*:svnOQO*Inc.*:pnOQO*Model*2*:pvr* + KEYBOARD_KEY_f3=volumeup + + ########################################################### ++# Plantronics ++########################################################### ++ ++# Plantronics .Audio 626 DSP ++keyboard:usb:v047fpC006* ++ KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute ++ ++########################################################### + # Quanta + ########################################################### + diff --git a/0438-hwdb-fix-case-sensitive-match.patch b/0438-hwdb-fix-case-sensitive-match.patch new file mode 100644 index 0000000..61099d5 --- /dev/null +++ b/0438-hwdb-fix-case-sensitive-match.patch @@ -0,0 +1,24 @@ +From 6a203eb0721d9a095dfcd86b89ac876ad3a1d710 Mon Sep 17 00:00:00 2001 +From: Kay Sievers +Date: Wed, 4 Jun 2014 17:55:14 +0200 +Subject: [PATCH] hwdb: fix case-sensitive match + +(cherry picked from commit 4c02dd7153f970244950b5e00f7bdfea8d2ff0be) +(cherry picked from commit 47023e8267dafc845ed51544f193e33de6c2e350) +--- + hwdb/60-keyboard.hwdb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb +index 17f06e8..3071c61 100644 +--- a/hwdb/60-keyboard.hwdb ++++ b/hwdb/60-keyboard.hwdb +@@ -868,7 +868,7 @@ keyboard:dmi:bvn*:bvr*:bd*:svnOQO*Inc.*:pnOQO*Model*2*:pvr* + ########################################################### + + # Plantronics .Audio 626 DSP +-keyboard:usb:v047fpC006* ++keyboard:usb:v047FpC006* + KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute + + ########################################################### diff --git a/0439-man-fix-references-to-sd_journal_cutoff_realtime_use.patch b/0439-man-fix-references-to-sd_journal_cutoff_realtime_use.patch new file mode 100644 index 0000000..fe4c22a --- /dev/null +++ b/0439-man-fix-references-to-sd_journal_cutoff_realtime_use.patch @@ -0,0 +1,35 @@ +From 7f0dbe757c0144bd85511d32d0d3e8a1e7fb6932 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Mantas=20Mikul=C4=97nas?= +Date: Mon, 2 Jun 2014 16:47:15 +0300 +Subject: [PATCH] man: fix references to sd_journal_cutoff_realtime_usec + +(cherry picked from commit d275b5296958446957e98ce61213f98519e11808) +(cherry picked from commit 44045f883f3911ca1bcab36250bf66c0d24bc569) +--- + man/sd-journal.xml | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/man/sd-journal.xml b/man/sd-journal.xml +index 832d584..83ee8f4 100644 +--- a/man/sd-journal.xml ++++ b/man/sd-journal.xml +@@ -78,7 +78,8 @@ + sd_journal_add_match3, + sd_journal_seek_head3, + sd_journal_get_cursor3, +- sd_journal_cutoff_realtime_usec3, ++ sd_journal_get_cutoff_realtime_usec3, ++ sd_journal_get_cutoff_monotonic_usec3, + sd_journal_get_usage3, + sd_journal_get_catalog3 + and +@@ -117,7 +118,8 @@ + sd_journal_add_match3, + sd_journal_seek_head3, + sd_journal_get_cursor3, +- sd_journal_cutoff_realtime_usec3, ++ sd_journal_get_cutoff_realtime_usec3, ++ sd_journal_get_cutoff_monotonic_usec3, + sd_journal_get_usage3, + sd_journal_get_fd3, + sd_journal_query_unique3, diff --git a/0440-man-Searching-for-an-explanation-of-what-a-slice-uni.patch b/0440-man-Searching-for-an-explanation-of-what-a-slice-uni.patch new file mode 100644 index 0000000..f0147bb --- /dev/null +++ b/0440-man-Searching-for-an-explanation-of-what-a-slice-uni.patch @@ -0,0 +1,34 @@ +From 0c888269f42b135c433d815af997747f130e5ffa Mon Sep 17 00:00:00 2001 +From: Mark Eichin +Date: Mon, 9 Jun 2014 01:57:19 -0400 +Subject: [PATCH] man: Searching for an explanation of what a "slice unit" was, + found this, felt compelled to send in fixes for the obvious typos + +(cherry picked from commit 299a55075d1bf478b9190191caefd5c1b934340d) +(cherry picked from commit e3d71d5dc2872bef8dbd20b29be5f6ba444a171f) +--- + man/systemd.slice.xml | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/man/systemd.slice.xml b/man/systemd.slice.xml +index 4d27ddf..f82e6c3 100644 +--- a/man/systemd.slice.xml ++++ b/man/systemd.slice.xml +@@ -56,13 +56,13 @@ along with systemd; If not, see . + + A unit configuration file whose name ends in + .slice encodes information about a slice which +- is a concept for hierarchially managing resources of a group of ++ is a concept for hierarchically managing resources of a group of + processes. This management is performed by creating a node in the + Linux Control Group (cgroup) tree. Units that manage processes +- (primarilly scope and service units) may be assigned to a specific +- slice. For each slice, certain resource limits may the be set that ++ (primarily scope and service units) may be assigned to a specific ++ slice. For each slice, certain resource limits may be set that + apply to all processes of all units contained in that +- slice. Slices are organized hierarchially in a tree. The name of ++ slice. Slices are organized hierarchically in a tree. The name of + the slice encodes the location in the tree. The name consists of a + dash-separated series of names, which describes the path to the + slice from the root slice. The root slice is named, diff --git a/0441-systemd-detect-virt-only-discover-Xen-domU.patch b/0441-systemd-detect-virt-only-discover-Xen-domU.patch new file mode 100644 index 0000000..074cf8d --- /dev/null +++ b/0441-systemd-detect-virt-only-discover-Xen-domU.patch @@ -0,0 +1,81 @@ +From 8333445a1902e157e54e54bc70038087fb0aa89a Mon Sep 17 00:00:00 2001 +From: Thomas Blume +Date: Fri, 6 Jun 2014 16:36:45 +0200 +Subject: [PATCH] systemd-detect-virt: only discover Xen domU + +The current vm detection lacks the distinction between Xen dom0 and Xen domU. +Both, dom0 and domU are running inside the hypervisor. +Therefore systemd-detect-virt and the ConditionVirtualization directive detect +dom0 as a virtual machine. + +dom0 is not using virtual devices but is accessing the real hardware. +Therefore dom0 should be considered the virtualisation host and not a virtual +machine. + +https://bugs.freedesktop.org/show_bug.cgi?id=77271 +(cherry picked from commit 37287585b6ba9a55065c8f94458f6db3c0abe0af) +(cherry picked from commit f22d2ebe687ad842f4bed11df918ed07a0bb3e78) + +Conflicts: + src/shared/virt.c +--- + src/shared/virt.c | 34 +++++++++++++++++++++++++++------- + 1 file changed, 27 insertions(+), 7 deletions(-) + +diff --git a/src/shared/virt.c b/src/shared/virt.c +index 4e18638..e59f2b1 100644 +--- a/src/shared/virt.c ++++ b/src/shared/virt.c +@@ -149,7 +149,7 @@ static int detect_vm_dmi(const char **_id) { + + /* Returns a short identifier for the various VM implementations */ + int detect_vm(const char **id) { +- _cleanup_free_ char *hvtype = NULL, *cpuinfo_contents = NULL; ++ _cleanup_free_ char *domcap = NULL, *cpuinfo_contents = NULL; + static __thread int cached_found = -1; + static __thread const char *cached_id = NULL; + const char *_id = NULL; +@@ -163,17 +163,37 @@ int detect_vm(const char **id) { + return cached_found; + } + +- /* Try high-level hypervisor sysfs file first: ++ /* Try xen capabilities file first, if not found try high-level hypervisor sysfs file: + * +- * https://bugs.freedesktop.org/show_bug.cgi?id=61491 */ +- r = read_one_line_file("/sys/hypervisor/type", &hvtype); ++ * https://bugs.freedesktop.org/show_bug.cgi?id=77271 */ ++ r = read_one_line_file("/proc/xen/capabilities", &domcap); + if (r >= 0) { +- if (streq(hvtype, "xen")) { ++ char *cap, *i = domcap; ++ ++ while ((cap = strsep(&i, ","))) ++ if (streq(cap, "control_d")) ++ break; ++ ++ if (!i) { + _id = "xen"; + r = 1; +- goto finish; + } +- } else if (r != -ENOENT) ++ ++ goto finish; ++ ++ } else if (r == -ENOENT) { ++ _cleanup_free_ char *hvtype = NULL; ++ ++ r = read_one_line_file("/sys/hypervisor/type", &hvtype); ++ if (r >= 0) { ++ if (streq(hvtype, "xen")) { ++ _id = "xen"; ++ r = 1; ++ goto finish; ++ } ++ } else if (r != -ENOENT) ++ return r; ++ } else + return r; + + /* this will set _id to "other" and return 0 for unknown hypervisors */ diff --git a/0442-man-updates-to-the-passive-target-section.patch b/0442-man-updates-to-the-passive-target-section.patch new file mode 100644 index 0000000..5c8bd77 --- /dev/null +++ b/0442-man-updates-to-the-passive-target-section.patch @@ -0,0 +1,125 @@ +From 9d41d5eb0664e3b7389b2f11fb8ab6aa0fc5c679 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 10 Jun 2014 18:52:28 +0200 +Subject: [PATCH] man: updates to the passive target section + +(cherry picked from commit 51cb9d734a182c4892a6b31f58d75489a2ca432b) +(cherry picked from commit 1f98d3636de425d9c49cd0dcb889865fbb996924) +--- + man/systemd.special.xml | 58 ++++++++++++++++++++++++++++++++++++------------- + 1 file changed, 43 insertions(+), 15 deletions(-) + +diff --git a/man/systemd.special.xml b/man/systemd.special.xml +index 8ccccc2..38b94a7 100644 +--- a/man/systemd.special.xml ++++ b/man/systemd.special.xml +@@ -866,7 +866,13 @@ + will be stopped before the + network -- to whatever level + it might be set up then -- is +- shut down. Also see Running + Services After the Network is + up for more +@@ -882,7 +888,6 @@ + an LSB header referring to the + $network + facility. +- + + + +@@ -896,7 +901,12 @@ + user/group name lookups for + which + nss-user-lookup.target +- should be used. systemd ++ should be used. All services ++ for which the availability of ++ full host/network name ++ resolution is essential should ++ be ordered after this target, ++ but not pull it in. systemd + automatically adds + dependencies of type + After= for +@@ -918,7 +928,16 @@ + host/network name lookups for + which + nss-lookup.target +- should be used. ++ should be used. All services ++ for which the availability of ++ the full user/group database is ++ essential should be ordered ++ after this target, but not ++ pull it in. Note that system ++ users are always resolvable, ++ and hence do not require any ++ special ordering against this ++ target. + + + +@@ -943,19 +962,18 @@ + should use + network-online.target + (see above). +- +- Again, this target unit +- is not +- suitable for pulling in other +- units, it is only useful for +- ordering. + + + + rpcbind.target + +- systemd automatically +- adds dependencies of type ++ The portmapper/rpcbind ++ pulls in this target and ++ orders itself before it, to ++ indicate its ++ availability. systemd ++ automatically adds ++ dependencies of type + After= for + this target unit to all SysV + init script service units with +@@ -967,14 +985,24 @@ + + time-sync.target + +- systemd automatically +- adds dependencies of type ++ Services responsible for ++ synchronizing the system clock ++ from a remote source (such as ++ NTP client implementations) ++ should pull in this target and ++ order themselves before ++ it. All services where correct ++ time is essential should be ++ ordered after this unit, but ++ not pull it in. systemd ++ automatically adds ++ dependencies of type + After= for + this target unit to all SysV + init script service units with + an LSB header referring to the + $time +- facility. ++ facility. + + + diff --git a/0443-label-when-clearing-selinux-context-don-t-mangle-err.patch b/0443-label-when-clearing-selinux-context-don-t-mangle-err.patch new file mode 100644 index 0000000..b5097e5 --- /dev/null +++ b/0443-label-when-clearing-selinux-context-don-t-mangle-err.patch @@ -0,0 +1,93 @@ +From 2a3d6ea33611531c974b6c37c0685fc2178fab52 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 10 Jun 2014 22:48:56 +0200 +Subject: [PATCH] label: when clearing selinux context, don't mangle errno + +(cherry picked from commit 874f1947e33922f08c578696af5b628a0f67fec2) +(cherry picked from commit 00d967b989929e176e940345bbf3ffa65832b15f) + +Conflicts: + src/tmpfiles/tmpfiles.c +--- + src/shared/label.c | 4 ++++ + src/tmpfiles/tmpfiles.c | 13 +++++-------- + 2 files changed, 9 insertions(+), 8 deletions(-) + +diff --git a/src/shared/label.c b/src/shared/label.c +index fde39f2..3a18e31 100644 +--- a/src/shared/label.c ++++ b/src/shared/label.c +@@ -230,6 +230,8 @@ int label_socket_set(const char *label) { + void label_context_clear(void) { + + #ifdef HAVE_SELINUX ++ PROTECT_ERRNO; ++ + if (!use_selinux()) + return; + +@@ -240,6 +242,8 @@ void label_context_clear(void) { + void label_socket_clear(void) { + + #ifdef HAVE_SELINUX ++ PROTECT_ERRNO; ++ + if (!use_selinux()) + return; + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 4244656..be2115c 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -460,18 +460,19 @@ static int item_set_perms(Item *i, const char *path) { + } + + static int write_one_file(Item *i, const char *path) { +- int r, e, fd, flags; ++ int r, fd, flags; + struct stat st; + ++ assert(i); ++ assert(path); ++ + flags = i->type == CREATE_FILE ? O_CREAT|O_APPEND : + i->type == TRUNCATE_FILE ? O_CREAT|O_TRUNC : 0; + + RUN_WITH_UMASK(0) { + label_context_set(path, S_IFREG); + fd = open(path, flags|O_NDELAY|O_CLOEXEC|O_WRONLY|O_NOCTTY|O_NOFOLLOW, i->mode); +- e = errno; + label_context_clear(); +- errno = e; + } + + if (fd < 0) { +@@ -633,7 +634,7 @@ static int glob_item(Item *i, int (*action)(Item *, const char *)) { + } + + static int create_item(Item *i) { +- int r, e; ++ int r; + struct stat st; + + assert(i); +@@ -728,9 +729,7 @@ static int create_item(Item *i) { + + label_context_set(i->path, S_IFLNK); + r = symlink(i->argument, i->path); +- e = errno; + label_context_clear(); +- errno = e; + + if (r < 0 && errno != EEXIST) { + log_error("symlink(%s, %s) failed: %m", i->argument, i->path); +@@ -772,9 +771,7 @@ static int create_item(Item *i) { + RUN_WITH_UMASK(0000) { + label_context_set(i->path, file_type); + r = mknod(i->path, i->mode | file_type, i->major_minor); +- e = errno; + label_context_clear(); +- errno = e; + } + + if (r < 0 && errno != EEXIST) { diff --git a/0444-units-order-network-online.target-after-network.targ.patch b/0444-units-order-network-online.target-after-network.targ.patch new file mode 100644 index 0000000..c92a2a4 --- /dev/null +++ b/0444-units-order-network-online.target-after-network.targ.patch @@ -0,0 +1,29 @@ +From c14e22f6d48d3d22b4661c9191a3ed9dc395bea0 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 11 Jun 2014 14:58:32 +0200 +Subject: [PATCH] units: order network-online.target after network.target + +There might be implementations around where the network-online logic +might not talk to any network configuration service (and thus not have +to wait for it), hence let's explicitly order network-online.target +after network.target to avoid any ambiguities. + +(cherry picked from commit 58e027023b47b32e42cf93dd4a629b869ee1ef25) + +Conflicts: + units/systemd-networkd-wait-online.service.in + +(cherry picked from commit 406be70b2f9adaa7dc4168dd51ac8e3cfe41bcb3) +--- + units/network-online.target | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/units/network-online.target b/units/network-online.target +index a40c44c..67bc4fa 100644 +--- a/units/network-online.target ++++ b/units/network-online.target +@@ -9,3 +9,4 @@ + Description=Network is Online + Documentation=man:systemd.special(7) + Documentation=http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget ++After=network.target diff --git a/0445-core-fix-invalid-free-in-killall.patch b/0445-core-fix-invalid-free-in-killall.patch new file mode 100644 index 0000000..39511ac --- /dev/null +++ b/0445-core-fix-invalid-free-in-killall.patch @@ -0,0 +1,32 @@ +From cd90b3170d09d95f391a10da15be7a0b2eac32ab Mon Sep 17 00:00:00 2001 +From: Andreas Henriksson +Date: Fri, 13 Jun 2014 18:48:19 +0200 +Subject: [PATCH] core: fix invalid free() in killall() + +static int killall(....) in ./src/core/killall.c tries to get "s" +initialized by calling get_process_comm(...) which calls +read_one_line_file(...) which if it fails will mean it is left +uninitialized. +It is then used in argument to strna(s) call where it is +dereferenced(!), in addition to nothing else initializing it before +the scope it is in finishes. + +(cherry picked from commit 3e09eb5c83e56bc0184bd9d9c44f76047464f77c) +(cherry picked from commit 89655d12976c14a2fc6b6c2b91164b9246898560) +--- + src/core/killall.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/killall.c b/src/core/killall.c +index e395050..967dac0 100644 +--- a/src/core/killall.c ++++ b/src/core/killall.c +@@ -167,7 +167,7 @@ static int killall(int sig, Set *pids) { + continue; + + if (sig == SIGKILL) { +- _cleanup_free_ char *s; ++ _cleanup_free_ char *s = NULL; + + get_process_comm(pid, &s); + log_notice("Sending SIGKILL to PID %lu (%s).", (unsigned long) pid, strna(s)); diff --git a/0446-install-fix-invalid-free-in-unit_file_mask.patch b/0446-install-fix-invalid-free-in-unit_file_mask.patch new file mode 100644 index 0000000..76a9a16 --- /dev/null +++ b/0446-install-fix-invalid-free-in-unit_file_mask.patch @@ -0,0 +1,30 @@ +From c704373a42bff8615dc4467299ac4c42f5657f51 Mon Sep 17 00:00:00 2001 +From: Andreas Henriksson +Date: Fri, 13 Jun 2014 18:48:18 +0200 +Subject: [PATCH] install: fix invalid free() in unit_file_mask() + +int unit_file_mask(...) in ./src/shared/install.c calls +get_config_path(...) which can in 4 error cases return without setting +"ret", and thus "prefix" can be uninitialized when unit_file_mask(...) +finishes (which it does directly after the error is returned from +get_config_path(...)). + +(cherry picked from commit 223217749e57996336d5730b0a28716cca56d45d) +(cherry picked from commit bcb667c211614b38870aced0703c6f93b0d198eb) +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 241e000..c9c785a 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -567,7 +567,7 @@ int unit_file_mask( + unsigned *n_changes) { + + char **i; +- _cleanup_free_ char *prefix; ++ _cleanup_free_ char *prefix = NULL; + int r; + + assert(scope >= 0); diff --git a/0447-rpm-don-t-hardcode-the-binary-paths-in-the-macros-re.patch b/0447-rpm-don-t-hardcode-the-binary-paths-in-the-macros-re.patch new file mode 100644 index 0000000..2985222 --- /dev/null +++ b/0447-rpm-don-t-hardcode-the-binary-paths-in-the-macros-re.patch @@ -0,0 +1,73 @@ +From 7ab0e2491ff2d4bacf42c27c55957c36383fae5e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 13 Jun 2014 19:05:22 +0200 +Subject: [PATCH] rpm: don't hardcode the binary paths in the macros, rely on + $PATH + +this gives us a little bit more freedom to move things around later on, +as we don't hardcode the systemd paths in old RPMs that shall work with +new systemds. + +(cherry picked from commit 8cf7c96517c3688d29b30651adcda9e71e7fcb07) +(cherry picked from commit 2ea8cba266174f4c4afe7b0a5fbbfebf93fb37cc) +--- + src/core/macros.systemd.in | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/core/macros.systemd.in b/src/core/macros.systemd.in +index 89b4825..167016a 100644 +--- a/src/core/macros.systemd.in ++++ b/src/core/macros.systemd.in +@@ -37,42 +37,42 @@ Requires(postun): systemd \ + %systemd_post() \ + if [ $1 -eq 1 ] ; then \ + # Initial installation \ +- @rootbindir@/systemctl preset %{?*} >/dev/null 2>&1 || : \ ++ systemctl preset %{?*} >/dev/null 2>&1 || : \ + fi \ + %{nil} + + %systemd_preun() \ + if [ $1 -eq 0 ] ; then \ + # Package removal, not upgrade \ +- @rootbindir@/systemctl --no-reload disable %{?*} > /dev/null 2>&1 || : \ +- @rootbindir@/systemctl stop %{?*} > /dev/null 2>&1 || : \ ++ systemctl --no-reload disable %{?*} > /dev/null 2>&1 || : \ ++ systemctl stop %{?*} > /dev/null 2>&1 || : \ + fi \ + %{nil} + + %systemd_postun() \ +-@rootbindir@/systemctl daemon-reload >/dev/null 2>&1 || : \ ++systemctl daemon-reload >/dev/null 2>&1 || : \ + %{nil} + + %systemd_postun_with_restart() \ +-@rootbindir@/systemctl daemon-reload >/dev/null 2>&1 || : \ ++systemctl daemon-reload >/dev/null 2>&1 || : \ + if [ $1 -ge 1 ] ; then \ + # Package upgrade, not uninstall \ +- @rootbindir@/systemctl try-restart %{?*} >/dev/null 2>&1 || : \ ++ systemctl try-restart %{?*} >/dev/null 2>&1 || : \ + fi \ + %{nil} + + %udev_hwdb_update() \ +-@rootbindir@/udevadm hwdb --update >/dev/null 2>&1 || : \ ++udevadm hwdb --update >/dev/null 2>&1 || : \ + %{nil} + + %udev_rules_update() \ +-@rootbindir@/udevadm control --reload >/dev/null 2>&1 || : \ ++udevadm control --reload >/dev/null 2>&1 || : \ + %{nil} + + %journal_catalog_update() \ +-@rootbindir@/journalctl --update-catalog >/dev/null 2>&1 || : \ ++journalctl --update-catalog >/dev/null 2>&1 || : \ + %{nil} + + %tmpfiles_create() \ +-@rootbindir@/systemd-tmpfiles --create %{?*} >/dev/null 2>&1 || : \ ++systemd-tmpfiles --create %{?*} >/dev/null 2>&1 || : \ + %{nil} diff --git a/0448-tmpfiles-set-up-selinux-label-proeprly-when-creating.patch b/0448-tmpfiles-set-up-selinux-label-proeprly-when-creating.patch new file mode 100644 index 0000000..ce343bc --- /dev/null +++ b/0448-tmpfiles-set-up-selinux-label-proeprly-when-creating.patch @@ -0,0 +1,31 @@ +From 9b26053ff0ed34351877548a89b803a7729bf855 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 16 Jun 2014 13:20:38 +0200 +Subject: [PATCH] tmpfiles: set up selinux label proeprly when creating fifos + +(cherry picked from commit 45c196a76b2d883552c90807386d9bed40da822b) + +Conflicts: + src/shared/util.c + +(cherry picked from commit 1762262e61d16e77a9446b7588f7828f70cd9cbb) +--- + src/tmpfiles/tmpfiles.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index be2115c..6b0dfaf 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -699,9 +699,11 @@ static int create_item(Item *i) { + + case CREATE_FIFO: + ++ label_context_set(i->path, S_IFIFO); + RUN_WITH_UMASK(0000) { + r = mkfifo(i->path, i->mode); + } ++ label_context_clear(); + + if (r < 0 && errno != EEXIST) { + log_error("Failed to create fifo %s: %m", i->path); diff --git a/0449-util-add-files_same-helper-function.patch b/0449-util-add-files_same-helper-function.patch new file mode 100644 index 0000000..39e526d --- /dev/null +++ b/0449-util-add-files_same-helper-function.patch @@ -0,0 +1,70 @@ +From 3f7acd19729163a13b1aca3b6c07ea1d96de696b Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 6 Mar 2014 09:12:57 +0100 +Subject: [PATCH] util: add files_same() helper function + +files_same() returns + 1, if the files are the same + 0, if the files have different inode/dev numbers + errno, for any stat error + +(cherry picked from commit 9d9951a460a90ef0e1e0384742cefdcf85193f8c) +(cherry picked from commit ac0c2a0e3cd29f5f6d80bdb9ae4ffbd94e15707e) +--- + src/shared/util.c | 24 ++++++++++++++++-------- + src/shared/util.h | 2 ++ + 2 files changed, 18 insertions(+), 8 deletions(-) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 89fa053..0202c39 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -3333,19 +3333,27 @@ bool on_tty(void) { + return cached_on_tty; + } + +-int running_in_chroot(void) { +- struct stat a = {}, b = {}; ++int files_same(const char *filea, const char *fileb) { ++ struct stat a, b; + +- /* Only works as root */ +- if (stat("/proc/1/root", &a) < 0) ++ if (stat(filea, &a) < 0) + return -errno; + +- if (stat("/", &b) < 0) ++ if (stat(fileb, &b) < 0) + return -errno; + +- return +- a.st_dev != b.st_dev || +- a.st_ino != b.st_ino; ++ return a.st_dev == b.st_dev && ++ a.st_ino == b.st_ino; ++} ++ ++int running_in_chroot(void) { ++ int ret; ++ ++ ret = files_same("/proc/1/root", "/"); ++ if (ret < 0) ++ return ret; ++ ++ return ret == 0; + } + + char *ellipsize_mem(const char *s, size_t old_length, size_t new_length, unsigned percent) { +diff --git a/src/shared/util.h b/src/shared/util.h +index e83d2ab..20d81e5 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -405,6 +405,8 @@ static inline const char *ansi_highlight_off(void) { + return on_tty() ? ANSI_HIGHLIGHT_OFF : ""; + } + ++int files_same(const char *filea, const char *fileb); ++ + int running_in_chroot(void); + + char *ellipsize(const char *s, size_t length, unsigned percent); diff --git a/0450-Add-strappenda3.patch b/0450-Add-strappenda3.patch new file mode 100644 index 0000000..f6a2cd4 --- /dev/null +++ b/0450-Add-strappenda3.patch @@ -0,0 +1,41 @@ +From 9f4a3dd335fc0b6121078c665ed1901e8f964229 Mon Sep 17 00:00:00 2001 +From: Harald Hoyer +Date: Thu, 6 Mar 2014 16:35:02 +0100 +Subject: [PATCH] Add strappenda3 + +(cherry picked from commit f39d4a08e746e703d562076a0f622eb91dbdcd3e) + +For strappenda3, and it seems a good fix in general. + +(cherry picked from commit 4f0b9b433473d4f2b24675253064fd098d21e5a6) + +Conflicts: + src/systemctl/systemctl.c +--- + src/shared/util.h | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/src/shared/util.h b/src/shared/util.h +index 20d81e5..3f97663 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -728,6 +728,19 @@ int unlink_noerrno(const char *path); + _c_; \ + }) + ++#define strappenda3(a, b, c) \ ++ ({ \ ++ const char *_a_ = (a), *_b_ = (b), *_c_ = (c); \ ++ char *_d_; \ ++ size_t _x_, _y_, _z_; \ ++ _x_ = strlen(_a_); \ ++ _y_ = strlen(_b_); \ ++ _z_ = strlen(_c_); \ ++ _d_ = alloca(_x_ + _y_ + _z_ + 1); \ ++ strcpy(stpcpy(stpcpy(_d_, _a_), _b_), _c_); \ ++ _d_; \ ++ }) ++ + #define procfs_file_alloca(pid, field) \ + ({ \ + pid_t _pid_ = (pid); \ diff --git a/0451-unit-name-fix-detection-of-unit-templates-instances.patch b/0451-unit-name-fix-detection-of-unit-templates-instances.patch new file mode 100644 index 0000000..9218741 --- /dev/null +++ b/0451-unit-name-fix-detection-of-unit-templates-instances.patch @@ -0,0 +1,58 @@ +From 0d8027024c9ac692aaffe1823976aeea1f2ea84d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Mon, 16 Jun 2014 17:01:26 +0200 +Subject: [PATCH] unit-name: fix detection of unit templates/instances + +We need to check for the last dot, not the first one in a unit name, for +the suffix. Correct that. + +(cherry picked from commit 6ef9eeed61a291cc42b7d911f5cf5a4deca742a3) +(cherry picked from commit 2992a46a54b65b349b8d5b6330fe8fd19234e321) +--- + src/shared/unit-name.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c +index bc8094d..577f7e7 100644 +--- a/src/shared/unit-name.c ++++ b/src/shared/unit-name.c +@@ -334,7 +334,7 @@ char *unit_name_path_unescape(const char *f) { + } + + bool unit_name_is_template(const char *n) { +- const char *p; ++ const char *p, *e; + + assert(n); + +@@ -342,11 +342,15 @@ bool unit_name_is_template(const char *n) { + if (!p) + return false; + +- return p[1] == '.'; ++ e = strrchr(p+1, '.'); ++ if (!e) ++ return false; ++ ++ return e == p + 1; + } + + bool unit_name_is_instance(const char *n) { +- const char *p; ++ const char *p, *e; + + assert(n); + +@@ -354,7 +358,11 @@ bool unit_name_is_instance(const char *n) { + if (!p) + return false; + +- return p[1] != '.'; ++ e = strrchr(p+1, '.'); ++ if (!e) ++ return false; ++ ++ return e > p + 1; + } + + char *unit_name_replace_instance(const char *f, const char *i) { diff --git a/0452-conf-files-fix-when-for-root-logic.patch b/0452-conf-files-fix-when-for-root-logic.patch new file mode 100644 index 0000000..43f32e3 --- /dev/null +++ b/0452-conf-files-fix-when-for-root-logic.patch @@ -0,0 +1,50 @@ +From a95d58fe1724ea299b1038b74c454a53f2d43007 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 17 Jun 2014 01:56:44 +0200 +Subject: [PATCH] conf-files: fix when for --root= logic + +This is based on parts of similar patches from Michael Marineau and +Lukas Nykrin, but simply uses strappenda3(). + +(cherry picked from commit cebed5005b5ede17fc52ab50c054fca73bc938b8) +(cherry picked from commit 173749803c35c127b84d537974b6783cdba674fc) +--- + src/shared/conf-files.c | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c +index 3d5b1df..4ec8bed 100644 +--- a/src/shared/conf-files.c ++++ b/src/shared/conf-files.c +@@ -37,10 +37,20 @@ + #include "hashmap.h" + #include "conf-files.h" + +-static int files_add(Hashmap *h, const char *dirpath, const char *suffix) { ++static int files_add(Hashmap *h, const char *dirpath, const char *suffix, const char *root) { + _cleanup_closedir_ DIR *dir = NULL; + +- dir = opendir(dirpath); ++ assert(dirpath); ++ assert(suffix); ++ ++ if (isempty(root)) ++ dir = opendir(dirpath); ++ else { ++ const char *p; ++ ++ p = strappenda3(root, "/", dirpath); ++ dir = opendir(p); ++ } + if (!dir) { + if (errno == ENOENT) + return 0; +@@ -108,7 +118,7 @@ static int conf_files_list_strv_internal(char ***strv, const char *suffix, const + return -ENOMEM; + + STRV_FOREACH(p, dirs) { +- r = files_add(fh, *p, suffix); ++ r = files_add(fh, *p, suffix, root); + if (r == -ENOMEM) { + hashmap_free_free(fh); + return r; diff --git a/0453-bootchart-set-white-background.patch b/0453-bootchart-set-white-background.patch new file mode 100644 index 0000000..6c94513 --- /dev/null +++ b/0453-bootchart-set-white-background.patch @@ -0,0 +1,36 @@ +From f19ebb4146b22ede6315b3e5c4c3841f085f2f10 Mon Sep 17 00:00:00 2001 +From: Frederic Crozat +Date: Mon, 16 Jun 2014 18:49:12 +0200 +Subject: [PATCH] bootchart: set white background + + In programs like eog and gimp the transparant background did not +look very good. + +Similar fix from the one done in systemd-analyze (418e3750) + +(cherry picked from commit a7997073ac07add6cb30dcd9491c0179b2d6ad52) +(cherry picked from commit 0eca797c3c6b82527d1e38a9f194f9daca1abb47) +--- + src/bootchart/svg.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c +index 5eee2d1..fe8b1b8 100644 +--- a/src/bootchart/svg.c ++++ b/src/bootchart/svg.c +@@ -123,6 +123,7 @@ static void svg_header(void) { + svg("\n