ASoC: soc-pcm: don't use soc_pcm_ret() on .prepare callback
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 13 Dec 2024 01:21:10 +0000 (01:21 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 16 Dec 2024 12:31:28 +0000 (12:31 +0000)
commit 1f5664351410 ("ASoC: lower "no backend DAIs enabled for ... Port"
log severity") ignores -EINVAL error message on common soc_pcm_ret().
It is used from many functions, ignoring -EINVAL is over-kill.

The reason why -EINVAL was ignored was it really should only be used
upon invalid parameters coming from userspace and in that case we don't
want to log an error since we do not want to give userspace a way to do
a denial-of-service attack on the syslog / diskspace.

So don't use soc_pcm_ret() on .prepare callback is better idea.

Link: https://lore.kernel.org/r/87v7vptzap.wl-kuninori.morimoto.gx@renesas.com
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/87bjxg8jju.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-pcm.c

index 1150455619aa49dfb29bc0ae4fe152ed92141bf2..88b3ad5a255205019e2689d6797fab7143d380cc 100644 (file)
@@ -38,7 +38,6 @@ static inline int _soc_pcm_ret(struct snd_soc_pcm_runtime *rtd,
        switch (ret) {
        case -EPROBE_DEFER:
        case -ENOTSUPP:
-       case -EINVAL:
                break;
        default:
                dev_err(rtd->dev,
@@ -986,7 +985,13 @@ static int __soc_pcm_prepare(struct snd_soc_pcm_runtime *rtd,
        }
 
 out:
-       return soc_pcm_ret(rtd, ret);
+       /*
+        * Don't use soc_pcm_ret() on .prepare callback to lower error log severity
+        *
+        * We don't want to log an error since we do not want to give userspace a way to do a
+        * denial-of-service attack on the syslog / diskspace.
+        */
+       return ret;
 }
 
 /* PCM prepare ops for non-DPCM streams */
@@ -998,6 +1003,13 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
        snd_soc_dpcm_mutex_lock(rtd);
        ret = __soc_pcm_prepare(rtd, substream);
        snd_soc_dpcm_mutex_unlock(rtd);
+
+       /*
+        * Don't use soc_pcm_ret() on .prepare callback to lower error log severity
+        *
+        * We don't want to log an error since we do not want to give userspace a way to do a
+        * denial-of-service attack on the syslog / diskspace.
+        */
        return ret;
 }
 
@@ -2539,7 +2551,13 @@ int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
                be->dpcm[stream].state = SND_SOC_DPCM_STATE_PREPARE;
        }
 
-       return soc_pcm_ret(fe, ret);
+       /*
+        * Don't use soc_pcm_ret() on .prepare callback to lower error log severity
+        *
+        * We don't want to log an error since we do not want to give userspace a way to do a
+        * denial-of-service attack on the syslog / diskspace.
+        */
+       return ret;
 }
 
 static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
@@ -2579,7 +2597,13 @@ out:
        dpcm_set_fe_update_state(fe, stream, SND_SOC_DPCM_UPDATE_NO);
        snd_soc_dpcm_mutex_unlock(fe);
 
-       return soc_pcm_ret(fe, ret);
+       /*
+        * Don't use soc_pcm_ret() on .prepare callback to lower error log severity
+        *
+        * We don't want to log an error since we do not want to give userspace a way to do a
+        * denial-of-service attack on the syslog / diskspace.
+        */
+       return ret;
 }
 
 static int dpcm_run_update_shutdown(struct snd_soc_pcm_runtime *fe, int stream)