From 41e756a78a2a856cfe48c6b23a677548fcbe008c Mon Sep 17 00:00:00 2001 From: liyunqing_kl Date: Thu, 12 Sep 2024 10:15:51 +0800 Subject: [PATCH] backport: Use read_file instead of mem_chunk (cherry picked from commit 89c9b2758e33123dc4d9ace55f20cb7ece6d4d3c) --- ...d_file-when-reading-from-a-dump-file.patch | 64 +++++++++++++++++++ dmidecode.spec | 6 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 Consistently-use-read_file-when-reading-from-a-dump-file.patch diff --git a/Consistently-use-read_file-when-reading-from-a-dump-file.patch b/Consistently-use-read_file-when-reading-from-a-dump-file.patch new file mode 100644 index 0000000..babdf98 --- /dev/null +++ b/Consistently-use-read_file-when-reading-from-a-dump-file.patch @@ -0,0 +1,64 @@ +From c76ddda0ba0aa99a55945e3290095c2ec493c892 Mon Sep 17 00:00:00 2001 +From: Jean Delvare +Date: Wed, 26 Apr 2023 15:44:27 +0200 +Subject: [PATCH] Consistently use read_file() when reading from a dump file + +Use read_file() instead of mem_chunk() to read the entry point from a +dump file. This is faster, and consistent with how we then read the +actual DMI table from that dump file. + +This made no functional difference so far, which is why it went +unnoticed for years. But now that a file type check was added to the +mem_chunk() function, we must stop using it to read from regular +files. + +This will again allow root to use the --from-dump option. + +Signed-off-by: Jean Delvare +Tested-by: Jerry Hoemann +--- + dmidecode.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/dmidecode.c b/dmidecode.c +index 54f59c1..52ddbf1 100644 +--- a/dmidecode.c ++++ b/dmidecode.c +@@ -6025,17 +6025,25 @@ int main(int argc, char * const argv[]) + pr_comment("dmidecode %s", VERSION); + + /* Read from dump if so instructed */ ++ size = 0x20; + if (opt.flags & FLAG_FROM_DUMP) + { + if (!(opt.flags & FLAG_QUIET)) + pr_info("Reading SMBIOS/DMI data from file %s.", + opt.dumpfile); +- if ((buf = mem_chunk(0, 0x20, opt.dumpfile)) == NULL) ++ if ((buf = read_file(0, &size, opt.dumpfile)) == NULL) + { + ret = 1; + goto exit_free; + } + ++ /* Truncated entry point can't be processed */ ++ if (size < 0x20) ++ { ++ ret = 1; ++ goto done; ++ } ++ + if (memcmp(buf, "_SM3_", 5) == 0) + { + if (smbios3_decode(buf, opt.dumpfile, 0)) +@@ -6059,7 +6067,6 @@ 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(0, &size, SYS_ENTRY_FILE)) != NULL) + { +-- +2.27.0 + diff --git a/dmidecode.spec b/dmidecode.spec index 123a9b6..5de194d 100644 --- a/dmidecode.spec +++ b/dmidecode.spec @@ -1,6 +1,6 @@ Name: dmidecode Version: 3.5 -Release: 1 +Release: 2 Epoch: 1 Summary: DMI data report tool @@ -9,6 +9,7 @@ URL: https://www.nongnu.org/dmidecode/ Source0: http://download.savannah.gnu.org/releases/dmidecode/%{name}-%{version}.tar.xz Patch6000: bugfix-compat_uuid.patch +Patch6001: Consistently-use-read_file-when-reading-from-a-dump-file.patch BuildRequires: make gcc xz @@ -50,6 +51,9 @@ make %{?_smp_mflags} CFLAGS="%{__global_cflags}" LDFLAGS="%{__global_ldflags}" %{_mandir}/man8/*.8.gz %changelog +* Thu Sep 12 2024 liyunqing - 1:3.5-2 +- backport: Use read_file instead of mem_chunk + * Mon Feb 5 2024 nicunshu - 1:3.5-1 - Upgrade to 3.5 -- Gitee