mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00
platform/x86: think-lmi: Fix password opcode ordering for workstations
[ Upstream commit6f7d0f5fd8
] The Lenovo workstations require the password opcode to be run before the attribute value is changed (if Admin password is enabled). Tested on some Thinkpads to confirm they are OK with this order too. Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca> Fixes:640a5fa50a
("platform/x86: think-lmi: Opcode support") Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/r/20240209152359.528919-1-mpearson-lenovo@squebb.ca Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit6f7d0f5fd8
) [Harshit: CVE-2024-26836; Resolve conflicts due to missing commit:318d97849f
("platform/x86: think-lmi: Add bulk save feature") which is not in 6.6.y] Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com> Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e115c1b5de
commit
2deb10a996
|
@ -1021,7 +1021,16 @@ static ssize_t current_value_store(struct kobject *kobj,
|
||||||
* Note - this sets the variable and then the password as separate
|
* Note - this sets the variable and then the password as separate
|
||||||
* WMI calls. Function tlmi_save_bios_settings will error if the
|
* WMI calls. Function tlmi_save_bios_settings will error if the
|
||||||
* password is incorrect.
|
* password is incorrect.
|
||||||
|
* Workstation's require the opcode to be set before changing the
|
||||||
|
* attribute.
|
||||||
*/
|
*/
|
||||||
|
if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
|
||||||
|
ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
|
||||||
|
tlmi_priv.pwd_admin->password);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
|
set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
|
||||||
new_setting);
|
new_setting);
|
||||||
if (!set_str) {
|
if (!set_str) {
|
||||||
|
@ -1033,13 +1042,6 @@ static ssize_t current_value_store(struct kobject *kobj,
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
|
|
||||||
ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
|
|
||||||
tlmi_priv.pwd_admin->password);
|
|
||||||
if (ret)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = tlmi_save_bios_settings("");
|
ret = tlmi_save_bios_settings("");
|
||||||
} else { /* old non-opcode based authentication method (deprecated) */
|
} else { /* old non-opcode based authentication method (deprecated) */
|
||||||
if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
|
if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user