Compare commits

...

No commits in common. "c8" and "c9" have entirely different histories.
c8 ... c9

9 changed files with 1117 additions and 284 deletions

View File

@ -4,6 +4,9 @@ a5f73c606abb93bf61625e4628d27a2cd460f162 SOURCES/DBXUpdate-20160809-x64.cab
b5b2dc87daca1d3f8081a323290432c141aa405d SOURCES/DBXUpdate-20200729-aa64.cab
3fb407561768a3a2f5fb49d7738b5e0650e70810 SOURCES/DBXUpdate-20200729-ia32.cab
89db93c9d9d20f81791a262e817b99d8882c8bb0 SOURCES/DBXUpdate-20200729-x64.cab
59006fd556faeacc8185075c8fe7826249a2da32 SOURCES/fwupd-1.7.8.tar.xz
1a586c3634ef190e6128351ee60fd17d0e584f7c SOURCES/fwupd-efi-1.3.tar.xz
a62a28924d26cd49b6441170795a237ba33ec192 SOURCES/libjcat-0.1.9.tar.xz
cd2bbe591438fe893b4042dc03d30659c1e31756 SOURCES/DBXUpdate-20210429-x64.cab
d3ae610f5b6e602feded54eae8d67ddb7c60e64f SOURCES/DBXUpdate-20220812-aa64.cab
0ac8508ef7a86959e6ab03deec256b19df29677f SOURCES/DBXUpdate-20220812-ia32.cab
60f9aa664cb7588e33ce56d621dafa9b5a71e072 SOURCES/DBXUpdate-20220812-x64.cab
5e77389b263dd463de85db965d478f7182a9ea0a SOURCES/fwupd-1.8.10.tar.xz
147b36f75fca288fd01d9ed4150866344d57df27 SOURCES/fwupd-efi-1.4.tar.xz

9
.gitignore vendored
View File

@ -4,6 +4,9 @@ SOURCES/DBXUpdate-20160809-x64.cab
SOURCES/DBXUpdate-20200729-aa64.cab
SOURCES/DBXUpdate-20200729-ia32.cab
SOURCES/DBXUpdate-20200729-x64.cab
SOURCES/fwupd-1.7.8.tar.xz
SOURCES/fwupd-efi-1.3.tar.xz
SOURCES/libjcat-0.1.9.tar.xz
SOURCES/DBXUpdate-20210429-x64.cab
SOURCES/DBXUpdate-20220812-aa64.cab
SOURCES/DBXUpdate-20220812-ia32.cab
SOURCES/DBXUpdate-20220812-x64.cab
SOURCES/fwupd-1.8.10.tar.xz
SOURCES/fwupd-efi-1.4.tar.xz

View File

@ -0,0 +1,110 @@
From 90e5a58736645cdd37bf4c63f9a4056951dfb3f2 Mon Sep 17 00:00:00 2001
From: Richard Hughes <richard@hughsie.com>
Date: Tue, 24 Jan 2023 09:52:17 +0000
Subject: [PATCH] Do not make any of the HWIDs setup failures fatal
It's perfectly okay to have no HWIDs defined.
Should help with https://github.com/fwupd/fwupd/issues/5402
---
libfwupdplugin/fu-context.c | 73 +++++++++++--------------------------
1 file changed, 21 insertions(+), 52 deletions(-)
diff --git a/libfwupdplugin/fu-context.c b/libfwupdplugin/fu-context.c
index 08618b435..11b4b1b38 100644
--- a/libfwupdplugin/fu-context.c
+++ b/libfwupdplugin/fu-context.c
@@ -767,6 +767,8 @@ fu_context_security_changed(FuContext *self)
g_signal_emit(self, signals[SIGNAL_SECURITY_CHANGED], 0);
}
+typedef gboolean (*FuContextHwidsSetupFunc)(FuContext *self, FuHwids *hwids, GError **error);
+
/**
* fu_context_load_hwinfo:
* @self: a #FuContext
@@ -786,62 +788,29 @@ fu_context_load_hwinfo(FuContext *self, FuContextHwidFlags flags, GError **error
GPtrArray *guids;
g_autoptr(GError) error_hwids = NULL;
g_autoptr(GError) error_bios_settings = NULL;
+ struct {
+ const gchar *name;
+ FuContextHwidFlags flag;
+ FuContextHwidsSetupFunc func;
+ } hwids_setup_map[] = {{"config", FU_CONTEXT_HWID_FLAG_LOAD_CONFIG, fu_hwids_config_setup},
+ {"smbios", FU_CONTEXT_HWID_FLAG_LOAD_SMBIOS, fu_hwids_smbios_setup},
+ {"fdt", FU_CONTEXT_HWID_FLAG_LOAD_FDT, fu_hwids_fdt_setup},
+ {"kenv", FU_CONTEXT_HWID_FLAG_LOAD_KENV, fu_hwids_kenv_setup},
+ {"dmi", FU_CONTEXT_HWID_FLAG_LOAD_DMI, fu_hwids_dmi_setup},
+ {NULL, FU_CONTEXT_HWID_FLAG_NONE, NULL}};
g_return_val_if_fail(FU_IS_CONTEXT(self), FALSE);
g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
- if ((flags & FU_CONTEXT_HWID_FLAG_LOAD_CONFIG) > 0) {
- g_autoptr(GError) error_local = NULL;
- if (!fu_hwids_config_setup(self, priv->hwids, &error_local)) {
- if (!g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
- g_propagate_prefixed_error(error,
- g_steal_pointer(&error_local),
- "Failed to load HWIDs config: ");
- return FALSE;
- }
- }
- }
- if ((flags & FU_CONTEXT_HWID_FLAG_LOAD_DMI) > 0) {
- g_autoptr(GError) error_local = NULL;
- if (!fu_hwids_dmi_setup(self, priv->hwids, &error_local)) {
- if (!g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
- g_propagate_prefixed_error(error,
- g_steal_pointer(&error_local),
- "Failed to load HWIDs DMI: ");
- return FALSE;
- }
- }
- }
- if ((flags & FU_CONTEXT_HWID_FLAG_LOAD_FDT) > 0) {
- g_autoptr(GError) error_local = NULL;
- if (!fu_hwids_fdt_setup(self, priv->hwids, &error_local)) {
- if (!g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
- g_propagate_prefixed_error(error,
- g_steal_pointer(&error_local),
- "Failed to load HWIDs FDT: ");
- return FALSE;
- }
- }
- }
- if ((flags & FU_CONTEXT_HWID_FLAG_LOAD_KENV) > 0) {
- g_autoptr(GError) error_local = NULL;
- if (!fu_hwids_kenv_setup(self, priv->hwids, &error_local)) {
- if (!g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
- g_propagate_prefixed_error(error,
- g_steal_pointer(&error_local),
- "Failed to load HWIDs kenv: ");
- return FALSE;
- }
- }
- }
- if ((flags & FU_CONTEXT_HWID_FLAG_LOAD_SMBIOS) > 0) {
- g_autoptr(GError) error_local = NULL;
- if (!fu_hwids_smbios_setup(self, priv->hwids, &error_local)) {
- if (!g_error_matches(error_local, FWUPD_ERROR, FWUPD_ERROR_NOT_SUPPORTED)) {
- g_propagate_prefixed_error(error,
- g_steal_pointer(&error_local),
- "Failed to load SMBIOS: ");
- return FALSE;
+ /* run all the HWID setup funcs */
+ for (guint i = 0; hwids_setup_map[i].name != NULL; i++) {
+ if ((flags & hwids_setup_map[i].flag) > 0) {
+ g_autoptr(GError) error_local = NULL;
+ if (!hwids_setup_map[i].func(self, priv->hwids, &error_local)) {
+ g_debug("failed to load %s: %s",
+ hwids_setup_map[i].name,
+ error_local->message);
+ break;
}
}
}
--
2.39.1

View File

@ -0,0 +1,60 @@
From 19db23f9b8a64597564ce1b474eb6c384a57125f Mon Sep 17 00:00:00 2001
From: Richard Hughes <richard@hughsie.com>
Date: Wed, 2 Nov 2022 09:31:53 +0000
Subject: [PATCH] Only include the 'attribute not exported' warning on debug
builds
End users are not really capable of fixing the root issue, and people seem
overly worried that something bad has gone wrong.
Fixes https://github.com/fwupd/fwupd/issues/5077
---
libfwupdplugin/fu-bios-settings.c | 2 +-
libfwupdplugin/fu-self-test.c | 2 ++
plugins/lenovo-thinklmi/fu-self-test.c | 2 ++
3 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/libfwupdplugin/fu-bios-settings.c b/libfwupdplugin/fu-bios-settings.c
index 6151c8289..8ea1269d7 100644
--- a/libfwupdplugin/fu-bios-settings.c
+++ b/libfwupdplugin/fu-bios-settings.c
@@ -276,7 +276,7 @@ fu_bios_setting_set_type(FuBiosSettings *self, FwupdBiosSetting *attr, GError **
/* lenovo thinklmi seems to be missing it even though it's mandatory :/ */
if (!fu_bios_setting_get_key(attr, "type", &data, &error_key)) {
-#if GLIB_CHECK_VERSION(2, 64, 0)
+#if GLIB_CHECK_VERSION(2, 64, 0) && !defined(SUPPORTED_BUILD)
g_warning_once("KERNEL BUG: 'type' attribute not exported: (%s)",
error_key->message);
#else
diff --git a/libfwupdplugin/fu-self-test.c b/libfwupdplugin/fu-self-test.c
index c105fa271..c670b3a80 100644
--- a/libfwupdplugin/fu-self-test.c
+++ b/libfwupdplugin/fu-self-test.c
@@ -3117,7 +3117,9 @@ fu_bios_settings_load_func(void)
test_dir = g_test_build_filename(G_TEST_DIST, "tests", "bios-attrs", "lenovo-p620", NULL);
(void)g_setenv("FWUPD_SYSFSFWATTRIBDIR", test_dir, TRUE);
+#if GLIB_CHECK_VERSION(2, 64, 0) && !defined(SUPPORTED_BUILD)
g_test_expect_message("FuBiosSettings", G_LOG_LEVEL_WARNING, "*BUG*");
+#endif
ret = fu_context_reload_bios_settings(ctx, &error);
g_assert_no_error(error);
g_assert_true(ret);
diff --git a/plugins/lenovo-thinklmi/fu-self-test.c b/plugins/lenovo-thinklmi/fu-self-test.c
index 4777a2ae1..9e20a8cf5 100644
--- a/plugins/lenovo-thinklmi/fu-self-test.c
+++ b/plugins/lenovo-thinklmi/fu-self-test.c
@@ -39,7 +39,9 @@ fu_test_self_init(FuTest *self, GError **error_global)
g_autoptr(FuProgress) progress = fu_progress_new(G_STRLOC);
g_autoptr(GError) error = NULL;
+#if GLIB_CHECK_VERSION(2, 64, 0) && !defined(SUPPORTED_BUILD)
g_test_expect_message("FuBiosSettings", G_LOG_LEVEL_WARNING, "*KERNEL*BUG*");
+#endif
ret = fu_context_load_quirks(ctx,
FU_QUIRKS_LOAD_FLAG_NO_CACHE | FU_QUIRKS_LOAD_FLAG_NO_VERIFY,
--
2.39.1

View File

@ -0,0 +1,91 @@
From cfd61f6958a46d5e9687f87caf04c94680382a9f Mon Sep 17 00:00:00 2001
From: Nicolas Frayer <nfrayer@redhat.com>
Date: Wed, 1 Feb 2023 12:13:45 +0100
Subject: [PATCH] generate_binary: Add NX COMPAT flag manually when genpeimg
missing
When genpeimg or python3-pefile is missing, add the NX COMPAT flag
manually by setting bit8 of the DllCharacteristics in the optional
header, clear the TimeDateStamp and update the checksum.
---
efi/generate_binary.py | 50 ++++++++++++++++++++++++++++++++++++++++--
1 file changed, 48 insertions(+), 2 deletions(-)
diff --git a/efi/generate_binary.py b/efi/generate_binary.py
index 7b802e7..10ab0b3 100755
--- a/efi/generate_binary.py
+++ b/efi/generate_binary.py
@@ -10,6 +10,13 @@
import subprocess
import sys
import argparse
+import os
+import struct
+
+COFF_HDR_OFFSET = 0x80
+OPTIONALHDR_CHECKSUM = COFF_HDR_OFFSET + 0x58
+OPTIONALHDR_DLLCHARACTERISTICS = COFF_HDR_OFFSET + 0x5E
+PEHEADER_TIMEDATASTAMP = COFF_HDR_OFFSET + 0x8
def _run_objcopy(args):
@@ -66,6 +73,27 @@ def _run_genpeimg(args):
sys.exit(1)
+def generate_checksum(data):
+ checksum_offset: int = OPTIONALHDR_CHECKSUM
+ checksum: int = 0
+ remainder: int = len(data) % 4
+ data_len: int = len(data) + ((4 - remainder) * (remainder != 0))
+ for i in range(int(data_len / 4)):
+ if i == int(checksum_offset / 4):
+ continue
+ if i + 1 == (int(data_len / 4)) and remainder:
+ dword = struct.unpack("I", data[i * 4 :] + (b"\0" * (4 - remainder)))[0]
+ else:
+ dword = struct.unpack("I", data[i * 4 : i * 4 + 4])[0]
+ checksum += dword
+ if checksum >= 2**32:
+ checksum = (checksum & 0xFFFFFFFF) + (checksum >> 32)
+ checksum = (checksum & 0xFFFF) + (checksum >> 16)
+ checksum = checksum + (checksum >> 16)
+ checksum = checksum & 0xFFFF
+ return checksum + len(data)
+
+
def _add_nx_pefile(args):
# unnecessary if we have genpeimg
if args.genpeimg:
@@ -73,8 +101,26 @@ def _add_nx_pefile(args):
try:
import pefile
except ImportError:
- print("Unable to add NX support to binaries without genpeimg or python3-pefile")
- sys.exit(1)
+ print("Adding NX support manually to the binary")
+ with open(args.outfile, "r+b") as fh:
+ buf = bytearray(fh.read(os.path.getsize(args.outfile)))
+ fh.seek(0)
+ DllCharacteristics = struct.unpack_from(
+ "<H", buf, OPTIONALHDR_DLLCHARACTERISTICS
+ )[0]
+ DllCharacteristics |= 0x100
+ struct.pack_into(
+ "<H", buf, OPTIONALHDR_DLLCHARACTERISTICS, DllCharacteristics
+ )
+
+ # set the timestamp to 0
+ struct.pack_into("<I", buf, PEHEADER_TIMEDATASTAMP, 0x0)
+
+ # as we have set the NX COMPAT bit, regenerate the checksum
+ struct.pack_into("<I", buf, OPTIONALHDR_CHECKSUM, generate_checksum(buf))
+ fh.write(buf)
+
+ return
pe = pefile.PE(args.outfile)
pe.OPTIONAL_HEADER.DllCharacteristics |= pefile.DLL_CHARACTERISTICS[
--
2.39.1

View File

@ -0,0 +1,28 @@
From af5fb429c8e726d1d7455b2d0e5d4263edbd4290 Mon Sep 17 00:00:00 2001
From: Ivan Mikhanchuk <ivanmikh@pm.me>
Date: Tue, 24 Jan 2023 17:06:09 -0800
Subject: [PATCH] modem-manager: remove improper use of assert
FuSaharaLoader being NULL is normal for devices that only
support Firehose and don't use Sahara QDL port.
---
plugins/modem-manager/fu-sahara-loader.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/plugins/modem-manager/fu-sahara-loader.c b/plugins/modem-manager/fu-sahara-loader.c
index 89c620fbe..78f24036f 100644
--- a/plugins/modem-manager/fu-sahara-loader.c
+++ b/plugins/modem-manager/fu-sahara-loader.c
@@ -206,7 +206,8 @@ fu_sahara_loader_close(FuSaharaLoader *self, GError **error)
gboolean
fu_sahara_loader_qdl_is_open(FuSaharaLoader *self)
{
- g_return_val_if_fail(self != NULL, FALSE);
+ if (self == NULL)
+ return FALSE;
return fu_usb_device_is_open(self->usb_device);
}
--
2.39.1

View File

@ -0,0 +1,24 @@
From 7f427d567d497048772bad59e098528605e563ce Mon Sep 17 00:00:00 2001
From: Richard Hughes <richard@hughsie.com>
Date: Mon, 23 Jan 2023 11:22:43 +0000
Subject: [PATCH] trivial: Fix build fix when using ppc64le system
---
src/meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/meson.build b/src/meson.build
index b9f6736f2..f3ca734ee 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -197,6 +197,7 @@ plugins_hdr = custom_target('fwupd-generate-plugins-header',
fwupdengine = library(
'fwupdengine',
resources_src,
+ plugins_hdr,
sources: fwupd_engine_src,
install: true,
install_rpath: libdir_pkg,
--
2.39.1

View File

@ -0,0 +1,46 @@
From 8076090a000d4adde59fddeadb17a6f769993d1e Mon Sep 17 00:00:00 2001
From: Jason Gerecke <killertofu@gmail.com>
Date: Tue, 17 Jan 2023 14:24:14 -0800
Subject: [PATCH] wacom-usb: Retry set_report on failure
Sometimes the flash process will randomly hang and time-out when sending
data to the device. We currently do not use any retry logic, so if this
happens the flash attempt is treated as a failure. This can be a source
of worry or frustration, especially if subsequent manual retries fail
in a similar way.
Adding FU_HID_DEVICE_FLAG_RETRY_FAILURE to the list of flags used when
calling fu_hid_device_set_report allows fwupd to try sending a block
multiple times if such a time-out (or other error) occurs. This makes
the flash process less prone to failure.
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
---
plugins/wacom-usb/fu-wac-device.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/plugins/wacom-usb/fu-wac-device.c b/plugins/wacom-usb/fu-wac-device.c
index 9162d19a9..714761b1e 100644
--- a/plugins/wacom-usb/fu-wac-device.c
+++ b/plugins/wacom-usb/fu-wac-device.c
@@ -182,7 +182,8 @@ fu_wac_device_set_feature_report(FuWacDevice *self,
buf,
bufsz,
FU_WAC_DEVICE_TIMEOUT,
- flags | FU_HID_DEVICE_FLAG_IS_FEATURE,
+ flags | FU_HID_DEVICE_FLAG_IS_FEATURE |
+ FU_HID_DEVICE_FLAG_RETRY_FAILURE,
error);
}
@@ -920,6 +921,7 @@ fu_wac_device_init(FuWacDevice *self)
fu_device_set_install_duration(FU_DEVICE(self), 10);
fu_device_set_remove_delay(FU_DEVICE(self), FU_DEVICE_REMOVE_DELAY_RE_ENUMERATE);
fu_device_set_firmware_gtype(FU_DEVICE(self), FU_TYPE_WAC_FIRMWARE);
+ fu_device_retry_set_delay(FU_DEVICE(self), 30); /* ms */
}
static void
--
2.39.1

File diff suppressed because it is too large Load Diff