ALSA: info - Check file position validity in common layer
Check the validity of the file position in the common info layer before calling read or write callbacks in assumption that entry->size is set up properly to indicate the max file size. Removed the redundant checks from the callbacks as well. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
@@ -1144,17 +1144,11 @@ static ssize_t snd_cs4281_BA0_read(struct snd_info_entry *entry,
|
||||
struct file *file, char __user *buf,
|
||||
size_t count, loff_t pos)
|
||||
{
|
||||
long size;
|
||||
struct cs4281 *chip = entry->private_data;
|
||||
|
||||
size = count;
|
||||
if (pos + size > CS4281_BA0_SIZE)
|
||||
size = (long)CS4281_BA0_SIZE - pos;
|
||||
if (size > 0) {
|
||||
if (copy_to_user_fromio(buf, chip->ba0 + pos, size))
|
||||
return -EFAULT;
|
||||
}
|
||||
return size;
|
||||
if (copy_to_user_fromio(buf, chip->ba0 + pos, count))
|
||||
return -EFAULT;
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t snd_cs4281_BA1_read(struct snd_info_entry *entry,
|
||||
@@ -1162,17 +1156,11 @@ static ssize_t snd_cs4281_BA1_read(struct snd_info_entry *entry,
|
||||
struct file *file, char __user *buf,
|
||||
size_t count, loff_t pos)
|
||||
{
|
||||
long size;
|
||||
struct cs4281 *chip = entry->private_data;
|
||||
|
||||
size = count;
|
||||
if (pos + size > CS4281_BA1_SIZE)
|
||||
size = (long)CS4281_BA1_SIZE - pos;
|
||||
if (size > 0) {
|
||||
if (copy_to_user_fromio(buf, chip->ba1 + pos, size))
|
||||
return -EFAULT;
|
||||
}
|
||||
return size;
|
||||
if (copy_to_user_fromio(buf, chip->ba1 + pos, count))
|
||||
return -EFAULT;
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct snd_info_entry_ops snd_cs4281_proc_ops_BA0 = {
|
||||
|
Reference in New Issue
Block a user