platform/x86: dell-wmi-sysman: fix a NULL pointer dereference
authorMario Limonciello <mario.limonciello@dell.com>
Fri, 29 Jan 2021 17:26:54 +0000 (11:26 -0600)
committerHans de Goede <hdegoede@redhat.com>
Sun, 31 Jan 2021 19:58:58 +0000 (20:58 +0100)
An upcoming Dell platform is causing a NULL pointer dereference
in dell-wmi-sysman initialization.  Validate that the input from
BIOS matches correct ACPI types and abort module initialization
if it fails.

Signed-off-by: Mario Limonciello <mario.limonciello@dell.com>
Tested-by: Perry Yuan <perry_yuan@dell.com>
Link: https://lore.kernel.org/r/20210129172654.2326751-1-mario.limonciello@dell.com
[hdegoede@redhat.com: Drop redundant release_attributes_data() call]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/dell-wmi-sysman/sysman.c

index dc6dd53..cb81010 100644 (file)
@@ -419,13 +419,17 @@ static int init_bios_attributes(int attr_type, const char *guid)
                return retval;
        /* need to use specific instance_id and guid combination to get right data */
        obj = get_wmiobj_pointer(instance_id, guid);
-       if (!obj)
+       if (!obj || obj->type != ACPI_TYPE_PACKAGE)
                return -ENODEV;
        elements = obj->package.elements;
 
        mutex_lock(&wmi_priv.mutex);
        while (elements) {
                /* sanity checking */
+               if (elements[ATTR_NAME].type != ACPI_TYPE_STRING) {
+                       pr_debug("incorrect element type\n");
+                       goto nextobj;
+               }
                if (strlen(elements[ATTR_NAME].string.pointer) == 0) {
                        pr_debug("empty attribute found\n");
                        goto nextobj;