On Mon, Oct 25, 2021 at 10:37:06PM +0300, Andy Shevchenko wrote: > On Mon, Oct 25, 2021 at 10:20:17PM +0300, Andy Shevchenko wrote: > > On Fri, Oct 22, 2021 at 11:00:29PM +0300, Denis Pauk wrote: ... > > Below is a follow up, I have not compiled it. > > Feel free to take fully or partially. Okay, here a few additional fixes (make them symmetrical and hope that it will compile now): diff --git a/drivers/hwmon/asus_wmi_ec_sensors.c b/drivers/hwmon/asus_wmi_ec_sensors.c index 870de5a7f20d..d39271b5e50c 100644 --- a/drivers/hwmon/asus_wmi_ec_sensors.c +++ b/drivers/hwmon/asus_wmi_ec_sensors.c @@ -261,10 +261,7 @@ static int asus_wmi_ec_fill_board_sensors(struct asus_wmi_ec_info *ec, static int asus_wmi_ec_decode_reply_buffer(const u8 *in, u32 length, u8 *out) { char buffer[ASUSWMI_MAX_BUF_LEN * 2]; - u32 len; - - /* Minimum of size of response and size of ACPI result (in bytes) */ - len = min_t(u32, in[0], length - 2); + u32 len = min_t(u32, get_unaligned_le16(in), length - 2); utf16s_to_utf8s((wchar_t *)(in + 2), len / 2, UTF16_LITTLE_ENDIAN, buffer, sizeof(buffer)); @@ -274,13 +271,13 @@ static int asus_wmi_ec_decode_reply_buffer(const u8 *in, u32 length, u8 *out) static void asus_wmi_ec_encode_registers(const u8 *in, u32 length, char *out) { char buffer[ASUSWMI_MAX_BUF_LEN * 2]; - u16 len = nr_registers * 2; - - put_unaligned_le16(len * 2, out); + u32 len = length; bin2hex(buffer, in, len); utf8s_to_utf16s(buffer, len * 2, UTF16_LITTLE_ENDIAN, (wchar_t *)(out + 2), len); + + put_unaligned_le16(len * 2, out); } static void asus_wmi_ec_make_block_read_query(struct asus_wmi_ec_info *ec) @@ -298,7 +295,7 @@ static void asus_wmi_ec_make_block_read_query(struct asus_wmi_ec_info *ec) } } - asus_wmi_ec_encode_registers(registers, ec->nr_registers, ec->read_arg); + asus_wmi_ec_encode_registers(registers, offset, ec->read_arg); } static int asus_wmi_ec_block_read(u32 method_id, char *query, u8 *out) -- With Best Regards, Andy Shevchenko