mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
platform/x86: hp-bioscfg: fix password encoding bounds check
The password PSWD_ENCODINGS parser reads password_obj[elem + pos_values]
while copying the supported password encodings from the ACPI package.
The outer loop only guarantees that elem is within password_obj_count.
The encoding count is bounded by MAX_ENCODINGS_SIZE, but that does not
guarantee that the ACPI package contains enough entries for all
elem + pos_values accesses.
A malformed package can therefore declare a non-zero encoding count
without providing enough string objects, causing the parser to read past
the ACPI package array and pass an out-of-bounds string pointer and
length to hp_convert_hexstr_to_str().
Add the same computed-index bounds check used by the other offset-based
package parsing loops before reading password_obj[elem + pos_values].
Fixes: 8646a3b5ee ("platform/x86: hp-bioscfg: passwdobj-attributes")
Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
Link: https://patch.msgid.link/20260708090937.740435-1-lgs201920130244@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
parent
2b2ec354f9
commit
e213939ed9
|
|
@ -351,6 +351,11 @@ static int hp_populate_password_elements_from_package(union acpi_object *passwor
|
|||
case PSWD_ENCODINGS:
|
||||
size = min_t(u32, password_data->encodings_size, MAX_ENCODINGS_SIZE);
|
||||
for (pos_values = 0; pos_values < size; pos_values++) {
|
||||
if (elem + pos_values >= password_obj_count) {
|
||||
pr_err("Error elem-objects package is too small\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = hp_convert_hexstr_to_str(password_obj[elem + pos_values].string.pointer,
|
||||
password_obj[elem + pos_values].string.length,
|
||||
&str_value, &value_len);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user