ALSA: pcm: Fix missing fixup call in compat hw_refine ioctl

commit 358040e380 upstream.

The update of rate_num/den and msbits were factored out to
fixup_unreferenced_params() function to be called explicitly after the
hw_refine or hw_params procedure.  It's called from
snd_pcm_hw_refine_user(), but it's forgotten in the PCM compat ioctl.
This ended up with the incomplete rate_num/den and msbits parameters
when 32bit compat ioctl is used.

This patch adds the missing call in snd_pcm_ioctl_hw_params_compat().

Reported-by: Meng_Cai@novatek.com.cn
Fixes: f9a076bff0 ("ALSA: pcm: calculate non-mask/non-interval parameters always when possible")
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20230829134344.31588-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Takashi Iwai 2023-08-29 15:43:44 +02:00 committed by Greg Kroah-Hartman
parent 8918025feb
commit 8ad2e7efb2
1 changed files with 6 additions and 2 deletions

View File

@ -253,10 +253,14 @@ static int snd_pcm_ioctl_hw_params_compat(struct snd_pcm_substream *substream,
goto error; goto error;
} }
if (refine) if (refine) {
err = snd_pcm_hw_refine(substream, data); err = snd_pcm_hw_refine(substream, data);
else if (err < 0)
goto error;
err = fixup_unreferenced_params(substream, data);
} else {
err = snd_pcm_hw_params(substream, data); err = snd_pcm_hw_params(substream, data);
}
if (err < 0) if (err < 0)
goto error; goto error;
if (copy_to_user(data32, data, sizeof(*data32)) || if (copy_to_user(data32, data, sizeof(*data32)) ||