mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Mark Pearson <mpearson-lenovo@squebb.ca>
Cc: hdegoede@redhat.com, markgross@kernel.org,
	platform-driver-x86@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3 5/5] platform/x86: think-lmi: mutex protection around multiple WMI calls
Date: Mon, 29 May 2023 15:23:42 +0300 (EEST)	[thread overview]
Message-ID: <27c7824e-ec90-c68f-3e76-92525ed7e393@linux.intel.com> (raw)
In-Reply-To: <20230526171658.3886-5-mpearson-lenovo@squebb.ca>

On Fri, 26 May 2023, Mark Pearson wrote:

> Add mutex protection around cases where an operation needs multiple
> WMI calls - e.g. setting password.

So you need this feature already for Patch 1/5? If that's the case, you 
should reorder the patches and put it before 1/5.

That "e.g. setting password" sounds vague enough that I'm left to wonder 
if there are other cases in the driver which need locking too. It would be 
useful to be precise with wording here. It will help immensely when 
somebody looks this changelog 5 years from now if you explain all cases 
that need locking up front.

So, is this needed also for some existing code, then Fixes tag might be in 
order? (I'm looking e.g. that cert auth block in current_value_store() 
which also does more than one call).

-- 
 i.

> Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
> ---
> Changes in v2: New commit added after review of other patches in series.
> Changes in v3: Simplified mutex handling as recommended.
> 
>  drivers/platform/x86/think-lmi.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c
> index 64cd453d6e7d..86185358dba2 100644
> --- a/drivers/platform/x86/think-lmi.c
> +++ b/drivers/platform/x86/think-lmi.c
> @@ -14,6 +14,7 @@
>  #include <linux/acpi.h>
>  #include <linux/errno.h>
>  #include <linux/fs.h>
> +#include <linux/mutex.h>
>  #include <linux/string.h>
>  #include <linux/types.h>
>  #include <linux/dmi.h>
> @@ -195,6 +196,7 @@ static const char * const level_options[] = {
>  };
>  static struct think_lmi tlmi_priv;
>  static struct class *fw_attr_class;
> +static DEFINE_MUTEX(tlmi_mutex);
>  
>  /* ------ Utility functions ------------*/
>  /* Strip out CR if one is present */
> @@ -437,6 +439,9 @@ static ssize_t new_password_store(struct kobject *kobj,
>  	/* Strip out CR if one is present, setting password won't work if it is present */
>  	strip_cr(new_pwd);
>  
> +	/* Use lock in case multiple WMI operations needed */
> +	mutex_lock(&tlmi_mutex);
> +
>  	pwdlen = strlen(new_pwd);
>  	/* pwdlen == 0 is allowed to clear the password */
>  	if (pwdlen && ((pwdlen < setting->minlen) || (pwdlen > setting->maxlen))) {
> @@ -493,6 +498,7 @@ static ssize_t new_password_store(struct kobject *kobj,
>  		kfree(auth_str);
>  	}
>  out:
> +	mutex_unlock(&tlmi_mutex);
>  	kfree(new_pwd);
>  	return ret ?: count;
>  }
> @@ -987,6 +993,9 @@ static ssize_t current_value_store(struct kobject *kobj,
>  	/* Strip out CR if one is present */
>  	strip_cr(new_setting);
>  
> +	/* Use lock in case multiple WMI operations needed */
> +	mutex_lock(&tlmi_mutex);
> +
>  	/* Check if certificate authentication is enabled and active */
>  	if (tlmi_priv.certificate_support && tlmi_priv.pwd_admin->cert_installed) {
>  		if (!tlmi_priv.pwd_admin->signature || !tlmi_priv.pwd_admin->save_signature) {
> @@ -1031,7 +1040,6 @@ static ssize_t current_value_store(struct kobject *kobj,
>  			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]) {
> @@ -1071,6 +1079,7 @@ static ssize_t current_value_store(struct kobject *kobj,
>  		kobject_uevent(&tlmi_priv.class_dev->kobj, KOBJ_CHANGE);
>  	}
>  out:
> +	mutex_unlock(&tlmi_mutex);
>  	kfree(auth_str);
>  	kfree(set_str);
>  	kfree(new_setting);
> 

  reply	other threads:[~2023-05-29 12:24 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-26 17:16 [PATCH v3 1/5] platform/x86: think-lmi: Enable opcode support on BIOS settings Mark Pearson
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 [this message]
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=27c7824e-ec90-c68f-3e76-92525ed7e393@linux.intel.com \
    --to=ilpo.jarvinen@linux.intel.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=mpearson-lenovo@squebb.ca \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®