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 50855ff4892651e42167ddd093064ddef8eb4e42..89bb039a8a3c6adbb19eeb19163d060d00913495 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 a45919616fa86177c5cf0d27edd29b88adf06419..86b7ac63fec20e0dbabbb53888516d03d165fc3e 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 aba7d26b54b25c22893d349271cc0cb9c1decbbb..71f588cbdf887b5cec74fb3e87e98557103408e6 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 3840380a5aee1c49f937cca26a8bf1941d1d2c69..afb5190afc031b7599728da17b7054fe0fa90e97 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 378cedb502ba509c127c73d5bf59d3e49e32da2e..f0c20070094d4a0dd28134131ff08417a8261c39 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