Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

firmware: cs_dsp: test_bin_error: Fix uninitialized data used as fw version

Call cs_dsp_mock_xm_header_get_fw_version() to get the firmware version
from the dummy XM header data in cs_dsp_bin_err_test_common_init().

Make the same change to cs_dsp_bin_test_common_init() and remove the
cs_dsp_mock_xm_header_get_fw_version_from_regmap() function.

The code in cs_dsp_test_bin.c was correctly calling
cs_dsp_mock_xm_header_get_fw_version_from_regmap() to fetch the fw version
from a dummy header it wrote to XM registers. However in
cs_dsp_test_bin_error.c the test doesn't stuff a dummy header into XM, it
populates it the normal way using a wmfw file. It should have called
cs_dsp_mock_xm_header_get_fw_version() to get the data from its blob
buffer, but was calling cs_dsp_mock_xm_header_get_fw_version_from_regmap().
As nothing had been written to the registers this returned the value of
uninitialized data.

The only other use of cs_dsp_mock_xm_header_get_fw_version_from_regmap()
was cs_dsp_test_bin.c, but it doesn't need to use it. It already has a
blob buffer containing the dummy XM header so it can use
cs_dsp_mock_xm_header_get_fw_version() to read from that.

Fixes: cd8c058499b6 ("firmware: cs_dsp: Add KUnit testing of bin error cases")
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20250410132129.1312541-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Richard Fitzgerald and committed by
Mark Brown
285b2c74 6bbb2b12

+2 -33
-30
drivers/firmware/cirrus/test/cs_dsp_mock_mem_maps.c
··· 462 462 EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_alg_base_in_words, "FW_CS_DSP_KUNIT_TEST_UTILS"); 463 463 464 464 /** 465 - * cs_dsp_mock_xm_header_get_fw_version_from_regmap() - Firmware version. 466 - * 467 - * @priv: Pointer to struct cs_dsp_test. 468 - * 469 - * Return: Firmware version word value. 470 - */ 471 - unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv) 472 - { 473 - unsigned int xm = cs_dsp_mock_base_addr_for_mem(priv, WMFW_ADSP2_XM); 474 - union { 475 - struct wmfw_id_hdr adsp2; 476 - struct wmfw_v3_id_hdr halo; 477 - } hdr; 478 - 479 - switch (priv->dsp->type) { 480 - case WMFW_ADSP2: 481 - regmap_raw_read(priv->dsp->regmap, xm, &hdr.adsp2, sizeof(hdr.adsp2)); 482 - return be32_to_cpu(hdr.adsp2.ver); 483 - case WMFW_HALO: 484 - regmap_raw_read(priv->dsp->regmap, xm, &hdr.halo, sizeof(hdr.halo)); 485 - return be32_to_cpu(hdr.halo.ver); 486 - default: 487 - KUNIT_FAIL(priv->test, NULL); 488 - return 0; 489 - } 490 - } 491 - EXPORT_SYMBOL_NS_GPL(cs_dsp_mock_xm_header_get_fw_version_from_regmap, 492 - "FW_CS_DSP_KUNIT_TEST_UTILS"); 493 - 494 - /** 495 465 * cs_dsp_mock_xm_header_get_fw_version() - Firmware version. 496 466 * 497 467 * @header: Pointer to struct cs_dsp_mock_xm_header.
+1 -1
drivers/firmware/cirrus/test/cs_dsp_test_bin.c
··· 2198 2198 2199 2199 priv->local->bin_builder = 2200 2200 cs_dsp_mock_bin_init(priv, 1, 2201 - cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv)); 2201 + cs_dsp_mock_xm_header_get_fw_version(xm_hdr)); 2202 2202 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->local->bin_builder); 2203 2203 2204 2204 /* We must provide a dummy wmfw to load */
+1 -1
drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c
··· 451 451 452 452 local->bin_builder = 453 453 cs_dsp_mock_bin_init(priv, 1, 454 - cs_dsp_mock_xm_header_get_fw_version_from_regmap(priv)); 454 + cs_dsp_mock_xm_header_get_fw_version(local->xm_header)); 455 455 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, local->bin_builder); 456 456 457 457 /* Init cs_dsp */
-1
include/linux/firmware/cirrus/cs_dsp_test_utils.h
··· 104 104 unsigned int cs_dsp_mock_xm_header_get_alg_base_in_words(struct cs_dsp_test *priv, 105 105 unsigned int alg_id, 106 106 int mem_type); 107 - unsigned int cs_dsp_mock_xm_header_get_fw_version_from_regmap(struct cs_dsp_test *priv); 108 107 unsigned int cs_dsp_mock_xm_header_get_fw_version(struct cs_dsp_mock_xm_header *header); 109 108 void cs_dsp_mock_xm_header_drop_from_regmap_cache(struct cs_dsp_test *priv); 110 109 int cs_dsp_mock_xm_header_write_to_regmap(struct cs_dsp_mock_xm_header *header);