All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Pearson <mpearson-lenovo@squebb.ca>
To: mpearson-lenovo@squebb.ca
Cc: hdegoede@redhat.com, markgross@kernel.org,
	platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH v3 1/5] platform/x86: think-lmi: Enable opcode support on BIOS settings
Date: Fri, 26 May 2023 13:16:54 -0400	[thread overview]
Message-ID: <20230526171658.3886-1-mpearson-lenovo@squebb.ca> (raw)
In-Reply-To: <mpearson-lenovo@squebb.ca>

Whilst reviewing some documentation from the FW team on using WMI on
Lenovo system I noticed that we weren't using Opcode support when
changing BIOS settings in the thinkLMI driver.

We should be doing this to ensure we're future proof as the old
non-opcode mechanism has been deprecated.

Tested on X1 Carbon G10 and G11.

Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
---
Changes in v2: Update comment for clearer explanation of what the driver
is doing
Changes in v3: None. Version bump with rest of series

 drivers/platform/x86/think-lmi.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c
index 1138f770149d..2745224f62ab 100644
--- a/drivers/platform/x86/think-lmi.c
+++ b/drivers/platform/x86/think-lmi.c
@@ -1001,7 +1001,33 @@ static ssize_t current_value_store(struct kobject *kobj,
 				tlmi_priv.pwd_admin->save_signature);
 		if (ret)
 			goto out;
-	} else { /* Non certiifcate based authentication */
+	} else if (tlmi_priv.opcode_support) {
+		/*
+		 * If opcode support is present use that interface.
+		 * Note - this sets the variable and then the password as separate
+		 * WMI calls. Function tlmi_save_bios_settings will error if the
+		 * password is incorrect.
+		 */
+		set_str = kasprintf(GFP_KERNEL, "%s,%s;", setting->display_name,
+					new_setting);
+		if (!set_str) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		ret = tlmi_simple_call(LENOVO_SET_BIOS_SETTINGS_GUID, set_str);
+		if (ret)
+			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("");
+	} else { /* old non opcode based authentication method (deprecated)*/
 		if (tlmi_priv.pwd_admin->valid && tlmi_priv.pwd_admin->password[0]) {
 			auth_str = kasprintf(GFP_KERNEL, "%s,%s,%s;",
 					tlmi_priv.pwd_admin->password,
-- 
2.40.1


             reply	other threads:[~2023-05-26 17:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-26 17:16 Mark Pearson [this message]
2023-05-26 17:16 ` [PATCH v3 2/5] platform/x86: think-lmi: Correct System password interface Mark Pearson
2023-05-29 11:36   ` Ilpo Järvinen
2023-05-29 14:44     ` Mark Pearson
2023-05-29 15:50       ` Ilpo Järvinen
2023-05-29 16:10         ` Mark Pearson
2023-05-26 17:16 ` [PATCH v3 3/5] platform/x86: think-lmi: Correct NVME password handling Mark Pearson
2023-05-29 12:03   ` Ilpo Järvinen
2023-05-29 14:58     ` Mark Pearson
2023-05-29 15:41       ` Ilpo Järvinen
2023-05-29 16:06         ` Mark Pearson
2023-05-26 17:16 ` [PATCH v3 4/5] platform/x86: think-lmi: Don't display unnecessary authentication settings Mark Pearson
2023-05-29 12:05   ` Ilpo Järvinen
2023-05-29 14:50     ` Mark Pearson
2023-05-26 17:16 ` [PATCH v3 5/5] platform/x86: think-lmi: mutex protection around multiple WMI calls Mark Pearson
2023-05-29 12:23   ` Ilpo Järvinen
2023-05-29 14:03     ` Mark Pearson
2023-05-29 11:51 ` [PATCH v3 1/5] platform/x86: think-lmi: Enable opcode support on BIOS settings Ilpo Järvinen
2023-05-29 14:49   ` Mark Pearson
2023-05-29 15:36     ` Ilpo Järvinen
2023-05-29 16:06       ` Mark Pearson
2023-05-30 10:54 ` Hans de Goede
2023-05-30 13:08   ` Mark Pearson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230526171658.3886-1-mpearson-lenovo@squebb.ca \
    --to=mpearson-lenovo@squebb.ca \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.