]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
platform/x86: think-lmi: improve check if BIOS account security enabled
authorMark Pearson <mpearson-lenovo@squebb.ca>
Thu, 24 Oct 2024 19:55:21 +0000 (15:55 -0400)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Tue, 29 Oct 2024 11:54:28 +0000 (13:54 +0200)
Improve determination of whether authentication account is enabled by
checking if either password or certificate is enabled.

Renamed valid to pwd_enabled for better readability.

Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Link: https://lore.kernel.org/r/20241024195536.6992-1-mpearson-lenovo@squebb.ca
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/think-lmi.c
drivers/platform/x86/think-lmi.h

index 4cfb53206cb848ba30d628a3476791c046dcd592..727a9400d406a72c6cff4562d98d5eab27f735ec 100644 (file)
@@ -391,7 +391,7 @@ static ssize_t is_enabled_show(struct kobject *kobj, struct kobj_attribute *attr
 {
        struct tlmi_pwd_setting *setting = to_tlmi_pwd_setting(kobj);
 
-       return sysfs_emit(buf, "%d\n", setting->valid);
+       return sysfs_emit(buf, "%d\n", setting->pwd_enabled || setting->cert_installed);
 }
 
 static struct kobj_attribute auth_is_pass_set = __ATTR_RO(is_enabled);
@@ -469,7 +469,7 @@ static ssize_t new_password_store(struct kobject *kobj,
                if (ret)
                        goto out;
 
-               if (tlmi_priv.pwd_admin->valid) {
+               if (tlmi_priv.pwd_admin->pwd_enabled) {
                        ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
                                        tlmi_priv.pwd_admin->password);
                        if (ret)
@@ -777,7 +777,7 @@ static ssize_t certificate_store(struct kobject *kobj,
                                new_cert, setting->signature);
        } else {
                /* This is a fresh install */
-               if (!setting->valid || !setting->password[0]) {
+               if (!setting->pwd_enabled || !setting->password[0]) {
                        kfree(new_cert);
                        return -EACCES;
                }
@@ -1019,7 +1019,7 @@ static ssize_t current_value_store(struct kobject *kobj,
                 * Workstation's require the opcode to be set before changing the
                 * attribute.
                 */
-               if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
+               if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) {
                        ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
                                                  tlmi_priv.pwd_admin->password);
                        if (ret)
@@ -1042,7 +1042,7 @@ static ssize_t current_value_store(struct kobject *kobj,
                else
                        ret = tlmi_save_bios_settings("");
        } 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->pwd_enabled && tlmi_priv.pwd_admin->password[0]) {
                        auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
                                        tlmi_priv.pwd_admin->password,
                                        encoding_options[tlmi_priv.pwd_admin->encoding],
@@ -1215,7 +1215,7 @@ static ssize_t save_settings_store(struct kobject *kobj, struct kobj_attribute *
                        if (ret)
                                goto out;
                } else if (tlmi_priv.opcode_support) {
-                       if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
+                       if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) {
                                ret = tlmi_opcode_setting("WmiOpcodePasswordAdmin",
                                                          tlmi_priv.pwd_admin->password);
                                if (ret)
@@ -1223,7 +1223,7 @@ static ssize_t save_settings_store(struct kobject *kobj, struct kobj_attribute *
                        }
                        ret = tlmi_save_bios_settings("");
                } 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->pwd_enabled && tlmi_priv.pwd_admin->password[0]) {
                                auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
                                                     tlmi_priv.pwd_admin->password,
                                                     encoding_options[tlmi_priv.pwd_admin->encoding],
@@ -1273,7 +1273,7 @@ static ssize_t debug_cmd_store(struct kobject *kobj, struct kobj_attribute *attr
        if (!new_setting)
                return -ENOMEM;
 
-       if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
+       if (tlmi_priv.pwd_admin->pwd_enabled && tlmi_priv.pwd_admin->password[0]) {
                auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
                                tlmi_priv.pwd_admin->password,
                                encoding_options[tlmi_priv.pwd_admin->encoding],
@@ -1637,14 +1637,14 @@ static int tlmi_analyze(void)
                goto fail_clear_attr;
 
        if (tlmi_priv.pwdcfg.core.password_state & TLMI_PAP_PWD)
-               tlmi_priv.pwd_admin->valid = true;
+               tlmi_priv.pwd_admin->pwd_enabled = true;
 
        tlmi_priv.pwd_power = tlmi_create_auth("pop", "power-on");
        if (!tlmi_priv.pwd_power)
                goto fail_clear_attr;
 
        if (tlmi_priv.pwdcfg.core.password_state & TLMI_POP_PWD)
-               tlmi_priv.pwd_power->valid = true;
+               tlmi_priv.pwd_power->pwd_enabled = true;
 
        if (tlmi_priv.opcode_support) {
                tlmi_priv.pwd_system = tlmi_create_auth("smp", "system");
@@ -1652,7 +1652,7 @@ static int tlmi_analyze(void)
                        goto fail_clear_attr;
 
                if (tlmi_priv.pwdcfg.core.password_state & TLMI_SMP_PWD)
-                       tlmi_priv.pwd_system->valid = true;
+                       tlmi_priv.pwd_system->pwd_enabled = true;
 
                tlmi_priv.pwd_hdd = tlmi_create_auth("hdd", "hdd");
                if (!tlmi_priv.pwd_hdd)
@@ -1670,7 +1670,7 @@ static int tlmi_analyze(void)
                        /* Check if PWD is configured and set index to first drive found */
                        if (tlmi_priv.pwdcfg.ext.hdd_user_password ||
                                        tlmi_priv.pwdcfg.ext.hdd_master_password) {
-                               tlmi_priv.pwd_hdd->valid = true;
+                               tlmi_priv.pwd_hdd->pwd_enabled = true;
                                if (tlmi_priv.pwdcfg.ext.hdd_master_password)
                                        tlmi_priv.pwd_hdd->index =
                                                ffs(tlmi_priv.pwdcfg.ext.hdd_master_password) - 1;
@@ -1680,7 +1680,7 @@ static int tlmi_analyze(void)
                        }
                        if (tlmi_priv.pwdcfg.ext.nvme_user_password ||
                                        tlmi_priv.pwdcfg.ext.nvme_master_password) {
-                               tlmi_priv.pwd_nvme->valid = true;
+                               tlmi_priv.pwd_nvme->pwd_enabled = true;
                                if (tlmi_priv.pwdcfg.ext.nvme_master_password)
                                        tlmi_priv.pwd_nvme->index =
                                                ffs(tlmi_priv.pwdcfg.ext.nvme_master_password) - 1;
index e1975ffebeb42d2815e8aac44144abb359ed25e8..4728f40143a3802d07ee967e382b3d917e9bcadd 100644 (file)
@@ -65,7 +65,7 @@ struct tlmi_pwdcfg {
 /* password setting details */
 struct tlmi_pwd_setting {
        struct kobject kobj;
-       bool valid;
+       bool pwd_enabled;
        char password[TLMI_PWD_BUFSIZE];
        const char *pwd_type;
        const char *role;