| From: Takashi Iwai <tiwai@suse.de> |
| Date: Thu, 4 Jan 2018 16:39:27 +0100 |
| Subject: ALSA: pcm: Add missing error checks in OSS emulation plugin builder |
| |
| commit 6708913750344a900f2e73bfe4a4d6dbbce4fe8d upstream. |
| |
| In the OSS emulation plugin builder where the frame size is parsed in |
| the plugin chain, some places miss the possible errors returned from |
| the plugin src_ or dst_frames callback. |
| |
| This patch papers over such places. |
| |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| sound/core/oss/pcm_plugin.c | 14 +++++++++++--- |
| 1 file changed, 11 insertions(+), 3 deletions(-) |
| |
| --- a/sound/core/oss/pcm_plugin.c |
| +++ b/sound/core/oss/pcm_plugin.c |
| @@ -591,18 +591,26 @@ snd_pcm_sframes_t snd_pcm_plug_write_tra |
| snd_pcm_sframes_t frames = size; |
| |
| plugin = snd_pcm_plug_first(plug); |
| - while (plugin && frames > 0) { |
| + while (plugin) { |
| + if (frames <= 0) |
| + return frames; |
| if ((next = plugin->next) != NULL) { |
| snd_pcm_sframes_t frames1 = frames; |
| - if (plugin->dst_frames) |
| + if (plugin->dst_frames) { |
| frames1 = plugin->dst_frames(plugin, frames); |
| + if (frames1 <= 0) |
| + return frames1; |
| + } |
| if ((err = next->client_channels(next, frames1, &dst_channels)) < 0) { |
| return err; |
| } |
| if (err != frames1) { |
| frames = err; |
| - if (plugin->src_frames) |
| + if (plugin->src_frames) { |
| frames = plugin->src_frames(plugin, frames1); |
| + if (frames <= 0) |
| + return frames; |
| + } |
| } |
| } else |
| dst_channels = NULL; |