platform/x86: hp-bioscfg: Change how prerequisites size is evaluated
authorJorge Lopez <jorge.lopez2@hp.com>
Mon, 31 Jul 2023 20:31:37 +0000 (15:31 -0500)
committerHans de Goede <hdegoede@redhat.com>
Mon, 7 Aug 2023 11:34:46 +0000 (13:34 +0200)
Update steps taken to evaluate prerequisites size value

Signed-off-by: Jorge Lopez <jorge.lopez2@hp.com>
Link: https://lore.kernel.org/r/20230731203141.30044-5-jorge.lopez2@hp.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/hp/hp-bioscfg/enum-attributes.c
drivers/platform/x86/hp/hp-bioscfg/int-attributes.c
drivers/platform/x86/hp/hp-bioscfg/order-list-attributes.c
drivers/platform/x86/hp/hp-bioscfg/passwdobj-attributes.c
drivers/platform/x86/hp/hp-bioscfg/string-attributes.c

index 50855ff..89bb039 100644 (file)
@@ -190,9 +190,11 @@ static int hp_populate_enumeration_elements_from_package(union acpi_object *enum
                        enum_data->common.sequence = int_value;
                        break;
                case PREREQUISITES_SIZE:
-                       enum_data->common.prerequisites_size = int_value;
-                       if (int_value > MAX_PREREQUISITES_SIZE)
+                       if (int_value > MAX_PREREQUISITES_SIZE) {
                                pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
+                               int_value = MAX_PREREQUISITES_SIZE;
+                       }
+                       enum_data->common.prerequisites_size = int_value;
 
                        /*
                         * This step is needed to keep the expected
index a459196..86b7ac6 100644 (file)
@@ -208,8 +208,12 @@ static int hp_populate_integer_elements_from_package(union acpi_object *integer_
                        integer_data->common.sequence = int_value;
                        break;
                case PREREQUISITES_SIZE:
-                       if (integer_data->common.prerequisites_size > MAX_PREREQUISITES_SIZE)
+                       if (int_value > MAX_PREREQUISITES_SIZE) {
                                pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
+                               int_value = MAX_PREREQUISITES_SIZE;
+                       }
+                       integer_data->common.prerequisites_size = int_value;
+
                        /*
                         * This step is needed to keep the expected
                         * element list pointing to the right obj[elem].type
index aba7d26..71f588c 100644 (file)
@@ -202,9 +202,11 @@ static int hp_populate_ordered_list_elements_from_package(union acpi_object *ord
                        ordered_list_data->common.sequence = int_value;
                        break;
                case PREREQUISITES_SIZE:
-                       ordered_list_data->common.prerequisites_size = int_value;
-                       if (int_value > MAX_PREREQUISITES_SIZE)
+                       if (int_value > MAX_PREREQUISITES_SIZE) {
                                pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
+                               int_value = MAX_PREREQUISITES_SIZE;
+                       }
+                       ordered_list_data->common.prerequisites_size = int_value;
 
                        /*
                         * This step is needed to keep the expected
index 3840380..afb5190 100644 (file)
@@ -289,9 +289,11 @@ static int hp_populate_password_elements_from_package(union acpi_object *passwor
                        password_data->common.sequence = int_value;
                        break;
                case PREREQUISITES_SIZE:
-                       password_data->common.prerequisites_size = int_value;
-                       if (int_value > MAX_PREREQUISITES_SIZE)
+                       if (int_value > MAX_PREREQUISITES_SIZE) {
                                pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
+                               int_value = MAX_PREREQUISITES_SIZE;
+                       }
+                       password_data->common.prerequisites_size = int_value;
 
                        /* This step is needed to keep the expected
                         * element list pointing to the right obj[elem].type
index 378cedb..f0c2007 100644 (file)
@@ -198,10 +198,12 @@ static int hp_populate_string_elements_from_package(union acpi_object *string_ob
                        string_data->common.sequence = int_value;
                        break;
                case PREREQUISITES_SIZE:
+                       if (int_value > MAX_PREREQUISITES_SIZE) {
+                               pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
+                               int_value = MAX_PREREQUISITES_SIZE;
+                       }
                        string_data->common.prerequisites_size = int_value;
 
-                       if (string_data->common.prerequisites_size > MAX_PREREQUISITES_SIZE)
-                               pr_warn("Prerequisites size value exceeded the maximum number of elements supported or data may be malformed\n");
                        /*
                         * This step is needed to keep the expected
                         * element list pointing to the right obj[elem].type