Hi, On 3/7/22 23:09, Jorge Lopez wrote: > Several WMI queries leverage hp_wmi_read_int function to read their data. > hp_wmi_read_int function was corrected in a previous patch. Now, this > function invokes hp_wmi_perform_query with input parameter of size zero > and the output buffer of size 4. > > WMI commands calling hp_wmi_perform_query with input buffer size value > of zero are listed below. > > HPWMI_DISPLAY_QUERY > HPWMI_HDDTEMP_QUERY > HPWMI_ALS_QUERY > HPWMI_HARDWARE_QUERY > HPWMI_WIRELESS_QUERY > HPWMI_BIOS_QUERY > HPWMI_FEATURE_QUERY > HPWMI_HOTKEY_QUERY > HPWMI_FEATURE2_QUERY > HPWMI_WIRELESS2_QUERY > HPWMI_POSTCODEERROR_QUERY > HPWMI_THERMAL_PROFILE_QUERY > HPWMI_FAN_SPEED_MAX_GET_QUERY > > Invoking those WMI commands with an input buffer size greater > than zero will cause error 0x05 to be returned. > > All WMI commands executed by the driver were reviewed and changes > were made to ensure the expected input and output buffer size match > the WMI specification. > > Changes were validated on a HP ZBook Workstation notebook, > HP EliteBook x360, and HP EliteBook 850 G8. Additional > validation was included in the test process to ensure no other > commands were incorrectly handled. > > Signed-off-by: Jorge Lopez <jorge.lopez2@xxxxxx> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@xxxxxxxxxx> Regards, Hans > > --- > Based on the latest platform-drivers-x86.git/for-next > --- > drivers/platform/x86/hp-wmi.c | 22 +++++++++++----------- > 1 file changed, 11 insertions(+), 11 deletions(-) > > diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c > index e142e9a0d317..a0aba7db8a1c 100644 > --- a/drivers/platform/x86/hp-wmi.c > +++ b/drivers/platform/x86/hp-wmi.c > @@ -329,7 +329,7 @@ static int hp_wmi_get_fan_speed(int fan) > char fan_data[4] = { fan, 0, 0, 0 }; > > int ret = hp_wmi_perform_query(HPWMI_FAN_SPEED_GET_QUERY, HPWMI_GM, > - &fan_data, sizeof(fan_data), > + &fan_data, sizeof(char), > sizeof(fan_data)); > > if (ret != 0) > @@ -406,7 +406,7 @@ static int omen_thermal_profile_set(int mode) > return -EINVAL; > > ret = hp_wmi_perform_query(HPWMI_SET_PERFORMANCE_MODE, HPWMI_GM, > - &buffer, sizeof(buffer), sizeof(buffer)); > + &buffer, sizeof(buffer), 0); > > if (ret) > return ret < 0 ? ret : -EINVAL; > @@ -443,7 +443,7 @@ static int hp_wmi_fan_speed_max_set(int enabled) > int ret; > > ret = hp_wmi_perform_query(HPWMI_FAN_SPEED_MAX_SET_QUERY, HPWMI_GM, > - &enabled, sizeof(enabled), sizeof(enabled)); > + &enabled, sizeof(enabled), 0); > > if (ret) > return ret < 0 ? ret : -EINVAL; > @@ -456,7 +456,7 @@ static int hp_wmi_fan_speed_max_get(void) > int val = 0, ret; > > ret = hp_wmi_perform_query(HPWMI_FAN_SPEED_MAX_GET_QUERY, HPWMI_GM, > - &val, sizeof(val), sizeof(val)); > + &val, 0, sizeof(val)); > > if (ret) > return ret < 0 ? ret : -EINVAL; > @@ -468,7 +468,7 @@ static int __init hp_wmi_bios_2008_later(void) > { > int state = 0; > int ret = hp_wmi_perform_query(HPWMI_FEATURE_QUERY, HPWMI_READ, &state, > - sizeof(state), sizeof(state)); > + 0, sizeof(state)); > if (!ret) > return 1; > > @@ -479,7 +479,7 @@ static int __init hp_wmi_bios_2009_later(void) > { > u8 state[128]; > int ret = hp_wmi_perform_query(HPWMI_FEATURE2_QUERY, HPWMI_READ, &state, > - sizeof(state), sizeof(state)); > + 0, sizeof(state)); > if (!ret) > return 1; > > @@ -557,7 +557,7 @@ static int hp_wmi_rfkill2_refresh(void) > int err, i; > > err = hp_wmi_perform_query(HPWMI_WIRELESS2_QUERY, HPWMI_READ, &state, > - sizeof(state), sizeof(state)); > + 0, sizeof(state)); > if (err) > return err; > > @@ -646,7 +646,7 @@ static ssize_t als_store(struct device *dev, struct device_attribute *attr, > return ret; > > ret = hp_wmi_perform_query(HPWMI_ALS_QUERY, HPWMI_WRITE, &tmp, > - sizeof(tmp), sizeof(tmp)); > + sizeof(tmp), 0); > if (ret) > return ret < 0 ? ret : -EINVAL; > > @@ -667,9 +667,9 @@ static ssize_t postcode_store(struct device *dev, struct device_attribute *attr, > if (clear == false) > return -EINVAL; > > - /* Clear the POST error code. It is kept until until cleared. */ > + /* Clear the POST error code. It is kept until cleared. */ > ret = hp_wmi_perform_query(HPWMI_POSTCODEERROR_QUERY, HPWMI_WRITE, &tmp, > - sizeof(tmp), sizeof(tmp)); > + sizeof(tmp), 0); > if (ret) > return ret < 0 ? ret : -EINVAL; > > @@ -959,7 +959,7 @@ static int __init hp_wmi_rfkill2_setup(struct platform_device *device) > int err, i; > > err = hp_wmi_perform_query(HPWMI_WIRELESS2_QUERY, HPWMI_READ, &state, > - sizeof(state), sizeof(state)); > + 0, sizeof(state)); > if (err) > return err < 0 ? err : -EINVAL; >