Unverified Commit b20eb0e8 authored by Takashi Iwai's avatar Takashi Iwai Committed by Mark Brown
Browse files

ASoC: Intel: bytcht_es8316: Fix invalid quirk input mapping



When an invalid value is passed via quirk option, currently
bytcht_es8316 driver just ignores and leaves as is, which may lead to
unepxected results like OOB access.

This patch adds the sanity check and corrects the input mapping to the
certain default value if an invalid value is passed.

Fixes: 249d2fc9 ("ASoC: Intel: bytcht_es8316: Set card long_name based on quirks")
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Message-ID: <20250902171826.27329-2-tiwai@suse.de>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9e5eb8b4
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -47,7 +47,8 @@ enum {
	BYT_CHT_ES8316_INTMIC_IN2_MAP,
};

#define BYT_CHT_ES8316_MAP(quirk)		((quirk) & GENMASK(3, 0))
#define BYT_CHT_ES8316_MAP_MASK			GENMASK(3, 0)
#define BYT_CHT_ES8316_MAP(quirk)		((quirk) & BYT_CHT_ES8316_MAP_MASK)
#define BYT_CHT_ES8316_SSP0			BIT(16)
#define BYT_CHT_ES8316_MONO_SPEAKER		BIT(17)
#define BYT_CHT_ES8316_JD_INVERTED		BIT(18)
@@ -60,10 +61,23 @@ MODULE_PARM_DESC(quirk, "Board-specific quirk override");

static void log_quirks(struct device *dev)
{
	if (BYT_CHT_ES8316_MAP(quirk) == BYT_CHT_ES8316_INTMIC_IN1_MAP)
	int map;

	map = BYT_CHT_ES8316_MAP(quirk);
	switch (map) {
	case BYT_CHT_ES8316_INTMIC_IN1_MAP:
		dev_info(dev, "quirk IN1_MAP enabled");
	if (BYT_CHT_ES8316_MAP(quirk) == BYT_CHT_ES8316_INTMIC_IN2_MAP)
		break;
	case BYT_CHT_ES8316_INTMIC_IN2_MAP:
		dev_info(dev, "quirk IN2_MAP enabled");
		break;
	default:
		dev_warn_once(dev, "quirk sets invalid input map: 0x%x, default to INTMIC_IN1_MAP\n", map);
		quirk &= ~BYT_CHT_ES8316_MAP_MASK;
		quirk |= BYT_CHT_ES8316_INTMIC_IN1_MAP;
		break;
	}

	if (quirk & BYT_CHT_ES8316_SSP0)
		dev_info(dev, "quirk SSP0 enabled");
	if (quirk & BYT_CHT_ES8316_MONO_SPEAKER)