]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: Intel: bytcht_es8316: Fix invalid quirk input mapping
authorTakashi Iwai <tiwai@suse.de>
Tue, 2 Sep 2025 17:18:19 +0000 (19:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2025 09:56:33 +0000 (11:56 +0200)
[ Upstream commit b20eb0e8de383116f1e1470d74da2a3c83c4e345 ]

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: 249d2fc9e55c ("ASoC: Intel: bytcht_es8316: Set card long_name based on quirks")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Message-ID: <20250902171826.27329-2-tiwai@suse.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/intel/boards/bytcht_es8316.c

index 4dd37848b30e3f8bfeb14b2181526719ec757ad7..fa2c3981dacac96701a78e49e3462c0a65b88d2f 100644 (file)
@@ -46,7 +46,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)
@@ -59,10 +60,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)