[PATCH 2/2] acpi/wmi: Warn if WMI GUIDs from the Windows driver samples are found
ivanhu
ivan.hu at canonical.com
Tue Oct 8 06:30:05 UTC 2024
On 10/6/24 07:37, Armin Wolf wrote:
> Some manufacturers like Uniwill just blindly copy the example code
> from the Windows driver samples without generating new unique WMI GUIDs.
>
> This prevents WMI drivers for those WMI GUIDs from being loaded
> automatically since they cannot reliably identify if a WMI device
> with such a GUID is actually supported by them.
>
> Signed-off-by: Armin Wolf <W_Armin at gmx.de>
> ---
> src/acpi/wmi/wmi.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 46 insertions(+)
>
> diff --git a/src/acpi/wmi/wmi.c b/src/acpi/wmi/wmi.c
> index 7a746354..37752cdd 100644
> --- a/src/acpi/wmi/wmi.c
> +++ b/src/acpi/wmi/wmi.c
> @@ -129,6 +129,25 @@ static fwts_wmi_known_guid fwts_wmi_known_guids[] = {
> { NULL, NULL, NULL }
> };
>
> +/*
> + * List of WMI GUIDs used inside the Windows driver samples.
> + *
> + * Some manufacturers just blindly copy those, which prevents their WMI drivers
> + * from being loaded automatically since those GUIDs are not unique and cannot
> + * be used for reliable WMI device identification.
> + */
> +static const char * const windows_example_wmi_guids[] = {
> + "ABBC0F6A-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F6B-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F6C-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F6D-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F6E-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F6F-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F70-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F71-8EA1-11D1-00A0-C90629100000",
> + "ABBC0F72-8EA1-11D1-00A0-C90629100000"
> +};
> +
> /*
> * WMI flag to text mappings
> */
> @@ -341,6 +360,31 @@ static void wmi_method_exist_count(
> guid_str, object_name, wm_name);
> }
>
> +/*
> + * wmi_guid_copycat()
> + * Warn if a WMI from the Windows driver samples was found. This usually means that
> + * the manufacturer just blindly copied the example code without generating new
> + * unique WMI GUIDs.
> + */
> +static void wmi_guid_copycat(
> + fwts_framework *fw,
> + const char *guid_str)
> +{
> + int i;
> +
> + for (i = 0; i < FWTS_ARRAY_SIZE(windows_example_wmi_guids); i++) {
> + if (strcmp(guid_str, windows_example_wmi_guids[i]) == 0) {
> + fwts_failed(fw, LOG_LEVEL_CRITICAL,
> + "WMIExampleGUIDCopycat",
> + "GUID %s has likely been copied from the Windows driver samples, "
> + "this is a firmware bug that prevents WMI drivers from reliably "
> + "detecting such WMI devices since their GUID is not unique.",
> + guid_str);
> + return;
The severity doesn't appear to be critical; it seems more like a medium level issue.
> + }
> + }
> +}
> +
> /*
> * wmi_no_known_driver()
> * grumble that the kernel does not have a known handler for this GUID
> @@ -462,6 +506,8 @@ static void wmi_parse_wdg_data(
> wmi_block_query_exist_count(fw, info, acpi_object_name, guid_str);
> }
>
> + wmi_guid_copycat(fw, guid_str);
> +
> if (info->instance == 0)
> fwts_failed(fw, LOG_LEVEL_LOW, "WMIZeroInstance",
> "GUID %s has zero instances", guid_str);
> --
> 2.39.5
>
>
More information about the fwts-devel
mailing list