diff options
-rw-r--r-- | debian/changelog | 13 | ||||
-rw-r--r-- | debian/control | 2 | ||||
-rw-r--r-- | debian/patches/0001-hurd.patch (renamed from debian/patches/02-hurd.patch) | 0 | ||||
-rw-r--r-- | debian/patches/0005-build.patch (renamed from debian/patches/03-build.patch) | 0 | ||||
-rw-r--r-- | debian/patches/0100-ansi-c.patch (renamed from debian/patches/01-ansi-c.patch) | 0 | ||||
-rw-r--r-- | debian/patches/0105-dmidecode-avoid-sigbus.patch (renamed from debian/patches/05-dmidecode-avoid-sigbus.patch) | 0 | ||||
-rw-r--r-- | debian/patches/0110-nosysfs.patch | 32 | ||||
-rw-r--r-- | debian/patches/0115-no_smbios_DMI_entry_point.patch | 55 | ||||
-rw-r--r-- | debian/patches/0120-return_actual_data_size.patch | 103 | ||||
-rw-r--r-- | debian/patches/0125-use_read_file_to_read_DMI_table_from_sysfs.patch | 78 | ||||
-rw-r--r-- | debian/patches/0130-use_DWORD_for_table_max_size.patch | 27 | ||||
-rw-r--r-- | debian/patches/0135-hide_fixup_msg.patch | 46 | ||||
-rw-r--r-- | debian/patches/series | 14 |
13 files changed, 365 insertions, 5 deletions
diff --git a/debian/changelog b/debian/changelog index 77b7b34..6941903 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,16 @@ +dmidecode (3.0-3) UNRELEASED; urgency=medium + + * Rename patches. + * Add recommended patches from upstream: + - 0110-nosysfs.patch + - 0115-no_smbios_DMI_entry_point.patch + - 0120-return_actual_data_size.patch + - 0125-use_read_file_to_read_DMI_table_from_sysfs.patch + - 0130-use_DWORD_for_table_max_size.patch + - 0135-hide_fixup_msg.patch + + -- Jörg Frings-Fürst <debian@jff-webhosting.net> Sun, 15 May 2016 13:33:37 +0200 + dmidecode (3.0-2) unstable; urgency=medium * New debian/patches/05-dmidecode-avoid-sigbus.patch (Closes: #796963): diff --git a/debian/control b/debian/control index cff9ae8..bfd78d6 100644 --- a/debian/control +++ b/debian/control @@ -3,7 +3,7 @@ Section: utils Priority: optional Maintainer: Jörg Frings-Fürst <debian@jff-webhosting.net> Build-Depends: debhelper (>= 9) -Standards-Version: 3.9.6 +Standards-Version: 3.9.7 Vcs-Browser: http://anonscm.debian.org/cgit/collab-maint/dmidecode.git Vcs-Git: git://anonscm.debian.org/collab-maint/dmidecode.git Homepage: http://dmidecode.nongnu.org/ diff --git a/debian/patches/02-hurd.patch b/debian/patches/0001-hurd.patch index 236cdea..236cdea 100644 --- a/debian/patches/02-hurd.patch +++ b/debian/patches/0001-hurd.patch diff --git a/debian/patches/03-build.patch b/debian/patches/0005-build.patch index b9361eb..b9361eb 100644 --- a/debian/patches/03-build.patch +++ b/debian/patches/0005-build.patch diff --git a/debian/patches/01-ansi-c.patch b/debian/patches/0100-ansi-c.patch index fecd6bb..fecd6bb 100644 --- a/debian/patches/01-ansi-c.patch +++ b/debian/patches/0100-ansi-c.patch diff --git a/debian/patches/05-dmidecode-avoid-sigbus.patch b/debian/patches/0105-dmidecode-avoid-sigbus.patch index 518d972..518d972 100644 --- a/debian/patches/05-dmidecode-avoid-sigbus.patch +++ b/debian/patches/0105-dmidecode-avoid-sigbus.patch diff --git a/debian/patches/0110-nosysfs.patch b/debian/patches/0110-nosysfs.patch new file mode 100644 index 0000000..04c710a --- /dev/null +++ b/debian/patches/0110-nosysfs.patch @@ -0,0 +1,32 @@ +From 33b5aafc6ee6b5de9f2526fb1cf4b14d1e16e4f0 Mon Sep 17 00:00:00 2001 +From: Roy Franz <roy.franz@linaro.org> +Date: Thu, 01 Oct 2015 06:41:43 +0000 +Subject: Add "--no-sysfs" option description to -h output + +A description of --no-sysfs was not added to the output of "-h" when +the feature was added, so add it now. +--- +Index: trunk/CHANGELOG +=================================================================== +--- trunk.orig/CHANGELOG ++++ trunk/CHANGELOG +@@ -1,3 +1,7 @@ ++2015-10-01 Roy Franz <roy.franz@linaro.org> ++ ++ * dmiopt.c: Add "--no-sysfs" option description to -h output. ++ + 2015-09-03 Jean Delvare <jdelvare@suse.de> + + * version.h: Set version to 3.0. +Index: trunk/dmiopt.c +=================================================================== +--- trunk.orig/dmiopt.c ++++ trunk/dmiopt.c +@@ -314,6 +314,7 @@ void print_help(void) + " -u, --dump Do not decode the entries\n" + " --dump-bin FILE Dump the DMI data to a binary file\n" + " --from-dump FILE Read the DMI data from a binary file\n" ++ " --no-sysfs Do not attempt to read DMI data from sysfs files\n" + " -V, --version Display the version and exit\n"; + + printf("%s", help); diff --git a/debian/patches/0115-no_smbios_DMI_entry_point.patch b/debian/patches/0115-no_smbios_DMI_entry_point.patch new file mode 100644 index 0000000..ecbfc11 --- /dev/null +++ b/debian/patches/0115-no_smbios_DMI_entry_point.patch @@ -0,0 +1,55 @@ +From bf7bad24ce141dab5b5acc3ffb98ce5fe4a8e0f9 Mon Sep 17 00:00:00 2001 +From: Xie XiuQi <xiexiuqi@huawei.com> +Date: Wed, 21 Oct 2015 13:12:50 +0000 +Subject: Fix 'No SMBIOS nor DMI entry point found' on SMBIOS3 + +address_from_efi may return a SMBIOS or SMBIOS3 format entry +point, so add this condition. +--- +Index: trunk/AUTHORS +=================================================================== +--- trunk.orig/AUTHORS ++++ trunk/AUTHORS +@@ -19,6 +19,7 @@ Jarod Wilson <jarod@redhat.com> + Anton Arapov <anton@redhat.com> + Roy Franz <roy.franz@linaro.org> + Tyler Bell <tyler.bell@hp.com> ++Xie XiuQi <xiexiuqi@huawei.com> + + MANY THANKS TO (IN CHRONOLOGICAL ORDER) + Werner Heuser +Index: trunk/CHANGELOG +=================================================================== +--- trunk.orig/CHANGELOG ++++ trunk/CHANGELOG +@@ -1,3 +1,7 @@ ++2015-10-21 Xie XiuQi <xiexiuqi@huawei.com> ++ ++ * dmidecode.c: Handle SMBIOS 3.0 entry points on EFI systems. ++ + 2015-10-01 Roy Franz <roy.franz@linaro.org> + + * dmiopt.c: Add "--no-sysfs" option description to -h output. +Index: trunk/dmidecode.c +=================================================================== +--- trunk.orig/dmidecode.c ++++ trunk/dmidecode.c +@@ -4864,8 +4864,16 @@ int main(int argc, char * const argv[]) + goto exit_free; + } + +- if (smbios_decode(buf, opt.devmem, 0)) +- found++; ++ if (memcmp(buf, "_SM3_", 5) == 0) ++ { ++ if (smbios3_decode(buf, opt.devmem, 0)) ++ found++; ++ } ++ else if (memcmp(buf, "_SM_", 4) == 0) ++ { ++ if (smbios_decode(buf, opt.devmem, 0)) ++ found++; ++ } + goto done; + + memory_scan: diff --git a/debian/patches/0120-return_actual_data_size.patch b/debian/patches/0120-return_actual_data_size.patch new file mode 100644 index 0000000..dc539d9 --- /dev/null +++ b/debian/patches/0120-return_actual_data_size.patch @@ -0,0 +1,103 @@ +From de9a74e1c60210bee229fcf55b1678a99d1b44dd Mon Sep 17 00:00:00 2001 +From: Jean Delvare <jdelvare@suse.de> +Date: Mon, 02 Nov 2015 08:45:26 +0000 +Subject: Let read_file return the actual data size + +Let read_file return the actual data size to the caller. This gives +the caller the possibility to check that the data size is as expected +and large enough for the purpose, and report to the user if not. +--- +Index: trunk/CHANGELOG +=================================================================== +--- trunk.orig/CHANGELOG ++++ trunk/CHANGELOG +@@ -1,3 +1,8 @@ ++2015-11-02 Jean Delvare <jdelvare@suse.de> ++ ++ * dmidecode.c, util.c, util.h: Let read_file return the actual data ++ size. ++ + 2015-10-21 Xie XiuQi <xiexiuqi@huawei.com> + + * dmidecode.c: Handle SMBIOS 3.0 entry points on EFI systems. +Index: trunk/dmidecode.c +=================================================================== +--- trunk.orig/dmidecode.c ++++ trunk/dmidecode.c +@@ -4748,6 +4748,7 @@ int main(int argc, char * const argv[]) + int ret = 0; /* Returned value */ + int found = 0; + off_t fp; ++ size_t size; + int efi; + u8 *buf; + +@@ -4817,8 +4818,9 @@ int main(int argc, char * const argv[]) + * contain one of several types of entry points, so read enough for + * the largest one, then determine what type it contains. + */ ++ size = 0x20; + if (!(opt.flags & FLAG_NO_SYSFS) +- && (buf = read_file(0x20, SYS_ENTRY_FILE)) != NULL) ++ && (buf = read_file(&size, SYS_ENTRY_FILE)) != NULL) + { + if (!(opt.flags & FLAG_QUIET)) + printf("Getting SMBIOS data from sysfs.\n"); +Index: trunk/util.c +=================================================================== +--- trunk.orig/util.c ++++ trunk/util.c +@@ -94,10 +94,11 @@ int checksum(const u8 *buf, size_t len) + * needs to be freed by the caller. + * This provides a similar usage model to mem_chunk() + * +- * Returns pointer to buffer of max_len bytes, or NULL on error ++ * Returns pointer to buffer of max_len bytes, or NULL on error, and ++ * sets max_len to the length actually read. + * + */ +-void *read_file(size_t max_len, const char *filename) ++void *read_file(size_t *max_len, const char *filename) + { + int fd; + size_t r2 = 0; +@@ -115,7 +116,7 @@ void *read_file(size_t max_len, const ch + return(NULL); + } + +- if ((p = malloc(max_len)) == NULL) ++ if ((p = malloc(*max_len)) == NULL) + { + perror("malloc"); + return NULL; +@@ -123,7 +124,7 @@ void *read_file(size_t max_len, const ch + + do + { +- r = read(fd, p + r2, max_len - r2); ++ r = read(fd, p + r2, *max_len - r2); + if (r == -1) + { + if (errno != EINTR) +@@ -140,6 +141,8 @@ void *read_file(size_t max_len, const ch + while (r != 0); + + close(fd); ++ *max_len = r2; ++ + return p; + } + +Index: trunk/util.h +=================================================================== +--- trunk.orig/util.h ++++ trunk/util.h +@@ -25,7 +25,7 @@ + #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) + + int checksum(const u8 *buf, size_t len); +-void *read_file(size_t len, const char *filename); ++void *read_file(size_t *len, const char *filename); + void *mem_chunk(off_t base, size_t len, const char *devmem); + int write_dump(size_t base, size_t len, const void *data, const char *dumpfile, int add); + u64 u64_range(u64 start, u64 end); diff --git a/debian/patches/0125-use_read_file_to_read_DMI_table_from_sysfs.patch b/debian/patches/0125-use_read_file_to_read_DMI_table_from_sysfs.patch new file mode 100644 index 0000000..fe01f63 --- /dev/null +++ b/debian/patches/0125-use_read_file_to_read_DMI_table_from_sysfs.patch @@ -0,0 +1,78 @@ +From 364055211b1956539c6a6268e111e244e1292c8c Mon Sep 17 00:00:00 2001 +From: Jean Delvare <jdelvare@suse.de> +Date: Mon, 02 Nov 2015 08:45:31 +0000 +Subject: dmidecode: Use read_file() to read the DMI table from sysfs + +We shouldn't use mem_chunk() to read the DMI table from sysfs. This +will fail for SMBIOS v3 implementations which specify a maximum length +for the table rather than its exact length. The kernel will trim the +table to the actual length, so the DMI file will be shorter than the +length announced in entry point. + +read_file() fits the bill in this case, as it deals with end of file +nicely. + +This also helps with corrupted DMI tables, as the kernel will not +export the part of the table that it wasn't able to parse, effectively +trimming it. + +This fixes bug #46176: +https://savannah.nongnu.org/bugs/?46176 +Unexpected end of file error +--- +Index: trunk/CHANGELOG +=================================================================== +--- trunk.orig/CHANGELOG ++++ trunk/CHANGELOG +@@ -2,6 +2,9 @@ + + * dmidecode.c, util.c, util.h: Let read_file return the actual data + size. ++ * dmidecode.c: Use read_file to read the DMI table from sysfs. ++ This fixes Savannah bug #46176: ++ https://savannah.nongnu.org/bugs/?46176 + + 2015-10-21 Xie XiuQi <xiexiuqi@huawei.com> + +Index: trunk/dmidecode.c +=================================================================== +--- trunk.orig/dmidecode.c ++++ trunk/dmidecode.c +@@ -4521,16 +4521,29 @@ static void dmi_table(off_t base, u32 le + printf("\n"); + } + +- /* +- * When we are reading the DMI table from sysfs, we want to print +- * the address of the table (done above), but the offset of the +- * data in the file is 0. When reading from /dev/mem, the offset +- * in the file is the address. +- */ + if (flags & FLAG_NO_FILE_OFFSET) +- base = 0; ++ { ++ /* ++ * When reading from sysfs, the file may be shorter than ++ * announced. For SMBIOS v3 this is expcted, as we only know ++ * the maximum table size, not the actual table size. For older ++ * implementations (and for SMBIOS v3 too), this would be the ++ * result of the kernel truncating the table on parse error. ++ */ ++ size_t size = len; ++ buf = read_file(&size, devmem); ++ if (!(opt.flags & FLAG_QUIET) && num && size != (size_t)len) ++ { ++ printf("Wrong DMI structures length: %u bytes " ++ "announced, only %lu bytes available.\n", ++ len, (unsigned long)size); ++ } ++ len = size; ++ } ++ else ++ buf = mem_chunk(base, len, devmem); + +- if ((buf = mem_chunk(base, len, devmem)) == NULL) ++ if (buf == NULL) + { + fprintf(stderr, "Table is unreachable, sorry." + #ifndef USE_MMAP diff --git a/debian/patches/0130-use_DWORD_for_table_max_size.patch b/debian/patches/0130-use_DWORD_for_table_max_size.patch new file mode 100644 index 0000000..715d137 --- /dev/null +++ b/debian/patches/0130-use_DWORD_for_table_max_size.patch @@ -0,0 +1,27 @@ +From ab02b117511230e46bbef7febbd854b9c832c13c Mon Sep 17 00:00:00 2001 +From: Xie XiuQi <xiexiuqi@huawei.com> +Date: Mon, 01 Feb 2016 08:30:31 +0000 +Subject: Use DWORD for Structure table maximum size in SMBIOS3 + +0Ch DWORD "Structure table maximum size" + +Maximum size of SMBIOS Structure Table, pointed to by +the Structure Table Address, in bytes. The actual size is +guaranteed to be less or equal to the maximum size. + +Signed-off-by: Xie XiuQi <xiexiuqi@huawei.com> +Signed-off-by: Jean Delvare <jdelvare@suse.de> +--- +Index: trunk/dmidecode.c +=================================================================== +--- trunk.orig/dmidecode.c ++++ trunk/dmidecode.c +@@ -4612,7 +4612,7 @@ static int smbios3_decode(u8 *buf, const + } + + dmi_table(((off_t)offset.h << 32) | offset.l, +- WORD(buf + 0x0C), 0, ver, devmem, flags | FLAG_STOP_AT_EOT); ++ DWORD(buf + 0x0C), 0, ver, devmem, flags | FLAG_STOP_AT_EOT); + + if (opt.flags & FLAG_DUMP_BIN) + { diff --git a/debian/patches/0135-hide_fixup_msg.patch b/debian/patches/0135-hide_fixup_msg.patch new file mode 100644 index 0000000..ff3122c --- /dev/null +++ b/debian/patches/0135-hide_fixup_msg.patch @@ -0,0 +1,46 @@ +From cff11afa886a0147d734b650755d232b5e7f2099 Mon Sep 17 00:00:00 2001 +From: Jean Delvare <jdelvare@suse.de> +Date: Tue, 03 May 2016 13:32:21 +0000 +Subject: dmidecode: Hide irrelevant fixup message + +Only display the message about type 34 length fixup if the entry in +question is going to be displayed. Otherwise it's only confusing. + +This fixes bug #109024: +http://savannah.nongnu.org/support/?109024 + +Fixes: 3f70b3515d91 ("dmidecode: Fix up invalid DMI type 34 structure length") +--- +Index: trunk/dmidecode.c +=================================================================== +--- trunk.orig/dmidecode.c ++++ trunk/dmidecode.c +@@ -2946,7 +2946,7 @@ static void dmi_64bit_memory_error_addre + * first 5 characters of the device name to be trimmed. It's easy to + * check and fix, so do it, but warn. + */ +-static void dmi_fixup_type_34(struct dmi_header *h) ++static void dmi_fixup_type_34(struct dmi_header *h, int display) + { + u8 *p = h->data; + +@@ -2954,7 +2954,9 @@ static void dmi_fixup_type_34(struct dmi + if (h->length == 0x10 + && is_printable(p + 0x0B, 0x10 - 0x0B)) + { +- printf("Invalid entry length (%u). Fixed up to %u.\n", 0x10, 0x0B); ++ if (!(opt.flags & FLAG_QUIET) && display) ++ printf("Invalid entry length (%u). Fixed up to %u.\n", ++ 0x10, 0x0B); + h->length = 0x0B; + } + } +@@ -4443,7 +4445,7 @@ static void dmi_table_decode(u8 *buf, u3 + + /* Fixup a common mistake */ + if (h.type == 34) +- dmi_fixup_type_34(&h); ++ dmi_fixup_type_34(&h, display); + + /* look for the next handle */ + next = data + h.length; diff --git a/debian/patches/series b/debian/patches/series index 41f2000..1916e4c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,10 @@ -01-ansi-c.patch -02-hurd.patch -03-build.patch -05-dmidecode-avoid-sigbus.patch +0100-ansi-c.patch +0001-hurd.patch +0005-build.patch +0105-dmidecode-avoid-sigbus.patch +0110-nosysfs.patch +0115-no_smbios_DMI_entry_point.patch +0120-return_actual_data_size.patch +0125-use_read_file_to_read_DMI_table_from_sysfs.patch +0130-use_DWORD_for_table_max_size.patch +0135-hide_fixup_msg.patch |