aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-10-30 17:13:19 -0400
committerTakashi Iwai <tiwai@suse.de>2016-11-08 08:37:26 -0500
commit6809cd682b82dfff47943850d1a8c714f971b5ca (patch)
tree343beda600798c0c06e10e49e3f8402a42a72413
parent027a9fe6835620422b6713892175716f3613dd9d (diff)
ALSA: info: Return error for invalid read/write
Currently the ALSA proc handler allows read or write even if the proc file were write-only or read-only. It's mostly harmless, does thing but allocating memory and ignores the input/output. But it doesn't tell user about the invalid use, and it's confusing and inconsistent in comparison with other proc files. This patch adds some sanity checks and let the proc handler returning an -EIO error when the invalid read/write is performed. Cc: <stable@vger.kernel.org> # v4.2+ Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/core/info.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sound/core/info.c b/sound/core/info.c
index 291d6ed80d80..8ab72e0f5932 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -325,6 +325,8 @@ static ssize_t snd_info_text_entry_write(struct file *file,
325 size_t next; 325 size_t next;
326 int err = 0; 326 int err = 0;
327 327
328 if (!entry->c.text.write)
329 return -EIO;
328 pos = *offset; 330 pos = *offset;
329 if (!valid_pos(pos, count)) 331 if (!valid_pos(pos, count))
330 return -EIO; 332 return -EIO;
@@ -369,7 +371,9 @@ static int snd_info_seq_show(struct seq_file *seq, void *p)
369 struct snd_info_private_data *data = seq->private; 371 struct snd_info_private_data *data = seq->private;
370 struct snd_info_entry *entry = data->entry; 372 struct snd_info_entry *entry = data->entry;
371 373
372 if (entry->c.text.read) { 374 if (!entry->c.text.read) {
375 return -EIO;
376 } else {
373 data->rbuffer->buffer = (char *)seq; /* XXX hack! */ 377 data->rbuffer->buffer = (char *)seq; /* XXX hack! */
374 entry->c.text.read(entry, data->rbuffer); 378 entry->c.text.read(entry, data->rbuffer);
375 } 379 }