Commit e14ebde5 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: pcm: Fix error checks of default read/write copy ops



copy_from/to_iter() returns the actually copied bytes, and the more
correct check should be to compare with the given bytes, instead of
zero-check.

Fixes: cf393bab ("ALSA: pcm: Add copy ops with iov_iter")
Reported-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Closes: https://lore.kernel.org/r/20230902053044.GJ3390869@ZenIV
Link: https://lore.kernel.org/r/20230902061044.19366-1-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent ef98a488
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1992,8 +1992,8 @@ static int default_write_copy(struct snd_pcm_substream *substream,
			      int channel, unsigned long hwoff,
			      struct iov_iter *iter, unsigned long bytes)
{
	if (!copy_from_iter(get_dma_ptr(substream->runtime, channel, hwoff),
			    bytes, iter))
	if (copy_from_iter(get_dma_ptr(substream->runtime, channel, hwoff),
			   bytes, iter) != bytes)
		return -EFAULT;
	return 0;
}
@@ -2025,8 +2025,8 @@ static int default_read_copy(struct snd_pcm_substream *substream,
			     int channel, unsigned long hwoff,
			     struct iov_iter *iter, unsigned long bytes)
{
	if (!copy_to_iter(get_dma_ptr(substream->runtime, channel, hwoff),
			  bytes, iter))
	if (copy_to_iter(get_dma_ptr(substream->runtime, channel, hwoff),
			 bytes, iter) != bytes)
		return -EFAULT;
	return 0;
}