lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 089/775] iwlwifi: mvm: fix the type we use in the PPAG table validity checks
    Date
    From: Luca Coelho <luciano.coelho@intel.com>

    [ Upstream commit 5a6842455c113920001df83cffa28accceeb0927 ]

    The value we receive from ACPI is a long long unsigned integer but the
    values should be treated as signed char. When comparing the received
    value with ACPI_PPAG_MIN_LB/HB, we were doing an unsigned comparison,
    so the negative value would actually be treated as a very high number.

    To solve this issue, assign the value to our table of s8's before
    making the comparison, so the value is already converted when we do
    so.

    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/iwlwifi.20210210135352.b0ec69f312bc.If77fd9c61a96aa7ef2ac96d935b7efd7df502399@changeid
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 19 +++++++++++++------
    1 file changed, 13 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    index 9e150c01f7b37..522d547f35d58 100644
    --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
    @@ -962,16 +962,23 @@ read_table:
    union acpi_object *ent;

    ent = &wifi_pkg->package.elements[idx++];
    - if (ent->type != ACPI_TYPE_INTEGER ||
    - (j == 0 && ent->integer.value > ACPI_PPAG_MAX_LB) ||
    - (j == 0 && ent->integer.value < ACPI_PPAG_MIN_LB) ||
    - (j != 0 && ent->integer.value > ACPI_PPAG_MAX_HB) ||
    - (j != 0 && ent->integer.value < ACPI_PPAG_MIN_HB)) {
    - ppag_table.v1.enabled = cpu_to_le32(0);
    + if (ent->type != ACPI_TYPE_INTEGER) {
    ret = -EINVAL;
    goto out_free;
    }
    +
    gain[i * num_sub_bands + j] = ent->integer.value;
    +
    + if ((j == 0 &&
    + (gain[i * num_sub_bands + j] > ACPI_PPAG_MAX_LB ||
    + gain[i * num_sub_bands + j] < ACPI_PPAG_MIN_LB)) ||
    + (j != 0 &&
    + (gain[i * num_sub_bands + j] > ACPI_PPAG_MAX_HB ||
    + gain[i * num_sub_bands + j] < ACPI_PPAG_MIN_HB))) {
    + ppag_table.v1.enabled = cpu_to_le32(0);
    + ret = -EINVAL;
    + goto out_free;
    + }
    }
    }
    ret = 0;
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 00:56    [W:2.917 / U:0.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site