All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <keescook@chromium.org>
To: "Luis R. Rodriguez" <mcgrof@kernel.org>
Cc: "Greg KH" <gregkh@linuxfoundation.org>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Shuah Khan" <shuah@kernel.org>,
	"Martin Fuzzey" <mfuzzey@parkeon.com>,
	"Mimi Zohar" <zohar@linux.vnet.ibm.com>,
	"David Howells" <dhowells@redhat.com>,
	pali.rohar@gmail.com, "Takashi Iwai" <tiwai@suse.de>,
	arend.vanspriel@broadcom.com, "Rafał Miłecki" <zajec5@gmail.com>,
	nbroeking@me.com, "Vikram Mulukutla" <markivx@codeaurora.org>,
	stephen.boyd@linaro.org, "Mark Brown" <broonie@kernel.org>,
	"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
	"David Woodhouse" <dwmw2@infradead.org>,
	"Linus Torvalds" <torvalds@linux-foundation.org>,
	Abhay_Salunke@dell.com, bjorn.andersson@linaro.org,
	jewalt@lgsinnovations.com, LKML <linux-kernel@vger.kernel.org>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH v2 06/11] firmware: move loading timeout under struct firmware_fallback_config
Date: Tue, 27 Feb 2018 15:21:19 -0800	[thread overview]
Message-ID: <CAGXu5jK-S=LsDZgzemHREC_bf99xWXqZtr25CDrEL-QgW=1Ziw@mail.gmail.com> (raw)
In-Reply-To: <20180224024613.24078-7-mcgrof@kernel.org>

On Fri, Feb 23, 2018 at 6:46 PM, Luis R. Rodriguez <mcgrof@kernel.org> wrote:
> The timeout is a fallback construct, so we can just stuff the
> timeout configuration under struct firmware_fallback_config.
>
> While at it, add a few helpers which vets the use of getting or
> setting the timeout as an int. The main use of the timeout is
> to set a timeout for completion, and that is used as an unsigned
> long. There a few cases however where it makes sense to get or
> set the timeout as an int, the helpers annotate these use cases
> have been properly vetted for.
>
> Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>

Acked-by: Kees Cook <keescook@chromium.org>

-Kees

> ---
>  drivers/base/firmware_loader.c | 46 ++++++++++++++++++++++++++++++------------
>  1 file changed, 33 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/base/firmware_loader.c b/drivers/base/firmware_loader.c
> index 2d819875348d..9757f9fff01e 100644
> --- a/drivers/base/firmware_loader.c
> +++ b/drivers/base/firmware_loader.c
> @@ -266,21 +266,38 @@ static inline bool fw_state_is_aborted(struct fw_priv *fw_priv)
>   *
>   * @force_sysfs_fallback: force the sysfs fallback mechanism to be used
>   *     as if one had enabled CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y.
> + * @old_timeout: for internal use
> + * @loading_timeout: the timeout to wait for the fallback mechanism before
> + *     giving up, in seconds.
>   */
>  struct firmware_fallback_config {
> -       bool force_sysfs_fallback;
> +       const bool force_sysfs_fallback;
> +       int old_timeout;
> +       int loading_timeout;
>  };
>
> -static const struct firmware_fallback_config fw_fallback_config = {
> +static struct firmware_fallback_config fw_fallback_config = {
>         .force_sysfs_fallback = IS_ENABLED(CONFIG_FW_LOADER_USER_HELPER_FALLBACK),
> +       .loading_timeout = 60,
> +       .old_timeout = 60,
>  };
>
> -static int old_timeout;
> -static int loading_timeout = 60;       /* In seconds */
> +/* These getters are vetted to use int properly */
> +static inline int __firmware_loading_timeout(void)
> +{
> +       return fw_fallback_config.loading_timeout;
> +}
> +
> +/* These setters are vetted to use int properly */
> +static void __fw_fallback_set_timeout(int timeout)
> +{
> +       fw_fallback_config.loading_timeout = timeout;
> +}
>
>  static inline long firmware_loading_timeout(void)
>  {
> -       return loading_timeout > 0 ? loading_timeout * HZ : MAX_JIFFY_OFFSET;
> +       return __firmware_loading_timeout() > 0 ?
> +               __firmware_loading_timeout() * HZ : MAX_JIFFY_OFFSET;
>  }
>
>  /*
> @@ -291,14 +308,14 @@ static inline long firmware_loading_timeout(void)
>   */
>  static void fw_fallback_set_cache_timeout(void)
>  {
> -       old_timeout = loading_timeout;
> -       loading_timeout = 10;
> +       fw_fallback_config.old_timeout = __firmware_loading_timeout();
> +       __fw_fallback_set_timeout(10);
>  }
>
>  /* Restores the timeout to the value last configured during normal operation */
>  static void fw_fallback_set_default_timeout(void)
>  {
> -       loading_timeout =  old_timeout;
> +       __fw_fallback_set_timeout(fw_fallback_config.old_timeout);
>  }
>
>  static inline bool fw_sysfs_done(struct fw_priv *fw_priv)
> @@ -677,7 +694,7 @@ static void kill_pending_fw_fallback_reqs(bool only_kill_custom)
>  static ssize_t timeout_show(struct class *class, struct class_attribute *attr,
>                             char *buf)
>  {
> -       return sprintf(buf, "%d\n", loading_timeout);
> +       return sprintf(buf, "%d\n", __firmware_loading_timeout());
>  }
>
>  /**
> @@ -696,9 +713,12 @@ static ssize_t timeout_show(struct class *class, struct class_attribute *attr,
>  static ssize_t timeout_store(struct class *class, struct class_attribute *attr,
>                              const char *buf, size_t count)
>  {
> -       loading_timeout = simple_strtol(buf, NULL, 10);
> -       if (loading_timeout < 0)
> -               loading_timeout = 0;
> +       int tmp_loading_timeout = simple_strtol(buf, NULL, 10);
> +
> +       if (tmp_loading_timeout < 0)
> +               tmp_loading_timeout = 0;
> +
> +       __fw_fallback_set_timeout(tmp_loading_timeout);
>
>         return count;
>  }
> @@ -721,7 +741,7 @@ static int do_firmware_uevent(struct fw_sysfs *fw_sysfs, struct kobj_uevent_env
>  {
>         if (add_uevent_var(env, "FIRMWARE=%s", fw_sysfs->fw_priv->fw_name))
>                 return -ENOMEM;
> -       if (add_uevent_var(env, "TIMEOUT=%i", loading_timeout))
> +       if (add_uevent_var(env, "TIMEOUT=%i", __firmware_loading_timeout()))
>                 return -ENOMEM;
>         if (add_uevent_var(env, "ASYNC=%d", fw_sysfs->nowait))
>                 return -ENOMEM;
> --
> 2.16.2
>



-- 
Kees Cook
Pixel Security

  reply	other threads:[~2018-02-27 23:21 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-24  2:46 [PATCH v2 00/11] firmware: cleanup for v4.17 Luis R. Rodriguez
2018-02-24  2:46 ` [PATCH v2 01/11] test_firmware: enable custom fallback testing on limited kernel configs Luis R. Rodriguez
2018-02-27 23:07   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 02/11] test_firmware: replace syfs fallback check with kconfig_has helper Luis R. Rodriguez
2018-02-27 23:09   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 03/11] firmware: enable to split firmware_class into separate target files Luis R. Rodriguez
2018-02-24  2:46 ` [PATCH v2 04/11] firmware: simplify CONFIG_FW_LOADER_USER_HELPER_FALLBACK further Luis R. Rodriguez
2018-02-27 23:20   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 05/11] firmware: use helpers for setting up a temporary cache timeout Luis R. Rodriguez
2018-02-27 23:20   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 06/11] firmware: move loading timeout under struct firmware_fallback_config Luis R. Rodriguez
2018-02-27 23:21   ` Kees Cook [this message]
2018-02-24  2:46 ` [PATCH v2 07/11] firmware: split firmware fallback functionality into its own file Luis R. Rodriguez
2018-02-27 23:14   ` Kees Cook
2018-02-28  1:28     ` Luis R. Rodriguez
2018-02-28  5:33       ` Kees Cook
2018-02-28  7:11         ` Greg KH
2018-03-08  3:44           ` Luis R. Rodriguez
2018-02-24  2:46 ` [PATCH v2 08/11] firmware: enable run time change of forcing fallback loader Luis R. Rodriguez
2018-02-27 23:22   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 09/11] firmware: enable to force disable the fallback mechanism at run time Luis R. Rodriguez
2018-02-27 23:23   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 10/11] test_firmware: add a library for shared helpers Luis R. Rodriguez
2018-02-27 23:16   ` Kees Cook
2018-02-24  2:46 ` [PATCH v2 11/11] test_firmware: test three firmware kernel configs using a proc knob Luis R. Rodriguez
2018-02-27 23:18   ` Kees Cook
2018-02-28  1:32     ` Luis R. Rodriguez
2018-02-28  9:07       ` Josh Triplett
2018-02-28 18:26         ` Luis R. Rodriguez
2018-03-01  0:00           ` Josh Triplett
2018-03-01  0:38             ` Luis R. Rodriguez
2018-03-01  2:25               ` Josh Triplett
2018-03-01 17:33                 ` Luis R. Rodriguez
  -- strict thread matches above, loose matches on Subject: below --
2018-02-14  0:41 [PATCH v2 00/11] firmware: cleanup for v4.17 Luis R. Rodriguez
2018-02-14  0:41 ` [PATCH v2 06/11] firmware: move loading timeout under struct firmware_fallback_config Luis R. Rodriguez

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='CAGXu5jK-S=LsDZgzemHREC_bf99xWXqZtr25CDrEL-QgW=1Ziw@mail.gmail.com' \
    --to=keescook@chromium.org \
    --cc=Abhay_Salunke@dell.com \
    --cc=akpm@linux-foundation.org \
    --cc=arend.vanspriel@broadcom.com \
    --cc=bjorn.andersson@linaro.org \
    --cc=broonie@kernel.org \
    --cc=dhowells@redhat.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jewalt@lgsinnovations.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markivx@codeaurora.org \
    --cc=mcgrof@kernel.org \
    --cc=mfuzzey@parkeon.com \
    --cc=nbroeking@me.com \
    --cc=pali.rohar@gmail.com \
    --cc=shuah@kernel.org \
    --cc=stephen.boyd@linaro.org \
    --cc=tiwai@suse.de \
    --cc=torvalds@linux-foundation.org \
    --cc=zajec5@gmail.com \
    --cc=zohar@linux.vnet.ibm.com \
    /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.