lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <tencent_8A7C0C985AE1A1975C25D8DE24010D8B2007@qq.com>
Date: Mon, 11 Mar 2024 15:05:48 +0800
From: xuhanwu <2433926602@...com>
To: lgirdwood@...il.com,
	broonie@...nel.org,
	perex@...ex.cz,
	tiwai@...e.com
Cc: linux-sound@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	xuhanwu <xu.hanwu@...lec.com>
Subject: [PATCH] ASoC: soc-pcm: add a check for unsupported commands to the soc_pcm_trigger

From: xuhanwu <xu.hanwu@...lec.com>

The function soc_pcm_trigger needs to return an error(-EINVAL)
if the cmd parameter is not supported.

Signed-off-by: xuhanwu <xu.hanwu@...lec.com>
---
Dear Brown

Thank you for your guidance.
The issue with characters exceeding 80 has been resolved.

>	As can be seen from inspection of the immediately
>	preceeding handling of start, we're deliberately
>        ignoring half the values in each switch.

In kernel version 6.2, when the soc_pcm_trigger function receives a
command parameter cmd set to SNDRV_PCM_TRIGGER_DRAIN,
it returns a value of -EINVAL.The function snd_pcm_drain checks
the returned error value and exits accordingly.

kernel-version6.2 Function call relationship
		  snd_pcm_drain->
			snd_pcm_action->
				snd_pcm_do_drain_init->
					    soc_pcm_trigger->

    snd_pcm_drain
	result = snd_pcm_action(&snd_pcm_action_drain_init, substream,
				ACTION_ARG_IGNORE);
	if (result < 0)
		goto unlock;

     snd_pcm_do_drain_init
	if (runtime->state == SNDRV_PCM_STATE_DRAINING &&
	    runtime->trigger_master == substream &&
	    (runtime->hw.info & SNDRV_PCM_INFO_DRAIN_TRIGGER))
		return substream->ops->trigger(substream,
					       SNDRV_PCM_TRIGGER_DRAIN);

In the latest code, when the cmd parameter is set to SNDRV_PCM_TRIGGER_DRAIN,
the return value is 0. If snd_pcm_drain finds that the return value is 0,
it will not execute the goto unlock;

The above is my understanding of the code, please help me correct it.

Thanks
Xuhanwu
---
 sound/soc/soc-pcm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 77ee103b7..eba737729 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -1173,6 +1173,9 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
 			if (r < 0)
 				break;
 		}
+		break;
+	default:
+		return -EINVAL;
 	}
 
 	/*
-- 
2.17.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ