From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>
Cc: Russ Weight <russell.h.weight@intel.com>,
Luis Chamberlain <mcgrof@kernel.org>,
linux-kernel@vger.kernel.org,
Cezary Rojewski <cezary.rojewski@intel.com>,
"Rafael J . Wysocki" <rafael.j.wysocki@intel.com>
Subject: Re: [PATCH v5] firmware_loader: Add debug message with checksum for FW file
Date: Wed, 29 Mar 2023 12:22:33 +0200 [thread overview]
Message-ID: <ZCQRad48nMs0TEAk@kroah.com> (raw)
In-Reply-To: <20230317224729.1025879-1-amadeuszx.slawinski@linux.intel.com>
On Fri, Mar 17, 2023 at 11:47:29PM +0100, Amadeusz Sławiński wrote:
> Enable dynamic-debug logging of firmware filenames and SHA256 checksums
> to clearly identify the firmware files that are loaded by the system.
>
> Example output:
> [ 34.944619] firmware_class:_request_firmware: i915 0000:00:02.0: Loaded FW: i915/kbl_dmc_ver1_04.bin, sha256: 2cde41c3e5ad181423bcc3e98ff9c49f743c88f18646af4d0b3c3a9664b831a1
> [ 48.155884] firmware_class:_request_firmware: snd_soc_avs 0000:00:1f.3: Loaded FW: intel/avs/cnl/dsp_basefw.bin, sha256: 43f6ac1b066e9bd0423d914960fbbdccb391af27d2b1da1085eee3ea8df0f357
> [ 49.579540] firmware_class:_request_firmware: snd_soc_avs 0000:00:1f.3: Loaded FW: intel/avs/rt274-tplg.bin, sha256: 4b3580da96dc3d2c443ba20c6728d8b665fceb3ed57223c3a57582bbad8e2413
> [ 49.798196] firmware_class:_request_firmware: snd_soc_avs 0000:00:1f.3: Loaded FW: intel/avs/hda-8086280c-tplg.bin, sha256: 5653172579b2be1b51fd69f5cf46e2bac8d63f2a1327924311c13b2f1fe6e601
> [ 49.859627] firmware_class:_request_firmware: snd_soc_avs 0000:00:1f.3: Loaded FW: intel/avs/dmic-tplg.bin, sha256: 00fb7fbdb74683333400d7e46925dae60db448b88638efcca0b30215db9df63f
>
> Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
> Reviewed-by: Russ Weight <russell.h.weight@intel.com>
> Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
> ---
>
> Changes in v5:
> * remove unnecessary select in Kconfig (Greg)
>
> Changes in v4:
> * update menuconfig prompt and help message (Russ)
>
> Changes in v3:
> * add DYNAMIC_DEBUG and FW_LOADER as dependencies before option can be
> enabled (kernel test robot)
>
> Changes in v2:
> * allocate buffers (Greg)
> * introduce CONFIG_ option to allow for CONFIG_CRYPTO and CONFIG_CRYPTO_SHA256
> dependencies without introducing circular dependency (Greg)
> * add new line between includes and function name (Cezary)
>
> ---
> drivers/base/firmware_loader/Kconfig | 12 +++++++
> drivers/base/firmware_loader/main.c | 48 +++++++++++++++++++++++++++-
> 2 files changed, 59 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/base/firmware_loader/Kconfig b/drivers/base/firmware_loader/Kconfig
> index 5166b323a0f8..0cabc783d67a 100644
> --- a/drivers/base/firmware_loader/Kconfig
> +++ b/drivers/base/firmware_loader/Kconfig
> @@ -24,6 +24,18 @@ config FW_LOADER
> You also want to be sure to enable this built-in if you are going to
> enable built-in firmware (CONFIG_EXTRA_FIRMWARE).
>
> +config FW_LOADER_DEBUG
> + bool "Log filenames and checksums for loaded firmware"
> + depends on DYNAMIC_DEBUG
> + depends on FW_LOADER
> + depends on CRYPTO
> + depends on CRYPTO_SHA256
> + default FW_LOADER
> + help
> + Select this option to use dynamic debug to log firmware filenames and
> + SHA256 checksums to the kernel log for each firmware file that is
> + loaded.
> +
> if FW_LOADER
>
> config FW_LOADER_PAGED_BUF
> diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
> index 017c4cdb219e..b2c292ca95e8 100644
> --- a/drivers/base/firmware_loader/main.c
> +++ b/drivers/base/firmware_loader/main.c
> @@ -791,6 +791,50 @@ static void fw_abort_batch_reqs(struct firmware *fw)
> mutex_unlock(&fw_lock);
> }
>
> +#if defined(CONFIG_FW_LOADER_DEBUG)
> +#include <crypto/hash.h>
> +#include <crypto/sha2.h>
> +
> +static void fw_log_firmware_info(const struct firmware *fw, const char *name, struct device *device)
> +{
> + struct shash_desc *shash;
> + struct crypto_shash *alg;
> + u8 *sha256buf;
> + char *outbuf;
> +
> + alg = crypto_alloc_shash("sha256", 0, 0);
> + if (!alg)
> + return;
> +
> + sha256buf = kmalloc(SHA256_DIGEST_SIZE, GFP_KERNEL);
> + outbuf = kmalloc(SHA256_BLOCK_SIZE + 1, GFP_KERNEL);
> + shash = kmalloc(sizeof(*shash) + crypto_shash_descsize(alg), GFP_KERNEL);
> + if (!sha256buf || !outbuf || !shash)
> + goto out_free;
> +
> + shash->tfm = alg;
> +
> + if (crypto_shash_digest(shash, fw->data, fw->size, sha256buf) < 0)
> + goto out_shash;
> +
> + for (int i = 0; i < SHA256_DIGEST_SIZE; i++)
> + sprintf(&outbuf[i * 2], "%02x", sha256buf[i]);
> + outbuf[SHA256_BLOCK_SIZE] = 0;
> + dev_dbg(device, "Loaded FW: %s, sha256: %s\n", name, outbuf);
> +
> +out_shash:
> + crypto_free_shash(alg);
> +out_free:
> + kfree(shash);
> + kfree(outbuf);
> + kfree(sha256buf);
> +}
> +#else
> +static void fw_log_firmware_info(const struct firmware *fw, const char *name,
> + struct device *device)
> +{}
> +#endif
> +
> /* called from request_firmware() and request_firmware_work_func() */
> static int
> _request_firmware(const struct firmware **firmware_p, const char *name,
> @@ -861,11 +905,13 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
> revert_creds(old_cred);
> put_cred(kern_cred);
>
> - out:
> +out:
Nit, this change shouldn't have been needed. But it cleans up the file,
so I'll take it :)
thanks,
greg k-h
prev parent reply other threads:[~2023-03-29 10:22 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-17 22:47 [PATCH v5] firmware_loader: Add debug message with checksum for FW file Amadeusz Sławiński
2023-03-29 10:22 ` Greg Kroah-Hartman [this message]
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=ZCQRad48nMs0TEAk@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=amadeuszx.slawinski@linux.intel.com \
--cc=cezary.rojewski@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=rafael.j.wysocki@intel.com \
--cc=russell.h.weight@intel.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.