]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: rt5645: NULL pointer access when removing jack
authorBrent Lu <brent.lu@intel.com>
Mon, 4 Sep 2023 10:40:46 +0000 (18:40 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 4 Sep 2023 12:32:58 +0000 (13:32 +0100)
Machine driver calls snd_soc_component_set_jack() function with NULL
jack and data parameters when removing jack in codec exit function.
Do not access data when jack is NULL.

Signed-off-by: Brent Lu <brent.lu@intel.com>
Link: https://lore.kernel.org/r/20230904104046.4150208-1-brent.lu@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5645.c

index 038d93e208838014a4158f45e49b7b6b603aa8e7..1a137ca3f496473b34cd26f688d2c22bb042b821 100644 (file)
@@ -3269,13 +3269,17 @@ static int rt5645_component_set_jack(struct snd_soc_component *component,
 {
        struct snd_soc_jack *mic_jack = NULL;
        struct snd_soc_jack *btn_jack = NULL;
-       int *type = (int *)data;
+       int type;
 
-       if (*type & SND_JACK_MICROPHONE)
-               mic_jack = hs_jack;
-       if (*type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
-               SND_JACK_BTN_2 | SND_JACK_BTN_3))
-               btn_jack = hs_jack;
+       if (hs_jack) {
+               type = *(int *)data;
+
+               if (type & SND_JACK_MICROPHONE)
+                       mic_jack = hs_jack;
+               if (type & (SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+                       SND_JACK_BTN_2 | SND_JACK_BTN_3))
+                       btn_jack = hs_jack;
+       }
 
        return rt5645_set_jack_detect(component, hs_jack, mic_jack, btn_jack);
 }