summaryrefslogtreecommitdiffstats
path: root/sound/core
diff options
context:
space:
mode:
authorZubin Mithra <zsm@chromium.org>2019-04-04 14:33:55 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-27 09:30:26 +0200
commit96d59a75b37b40a7e3f8b839b3cb871236b3b098 (patch)
tree7f3994a63757e852e7ffddbd7c80b0a20cb35412 /sound/core
parenteab63566720f2a78d9aba43bfe21babd2daf980e (diff)
downloadlinux-stable-96d59a75b37b40a7e3f8b839b3cb871236b3b098.tar.gz
linux-stable-96d59a75b37b40a7e3f8b839b3cb871236b3b098.tar.bz2
linux-stable-96d59a75b37b40a7e3f8b839b3cb871236b3b098.zip
ALSA: seq: Fix OOB-reads from strlcpy
commit 212ac181c158c09038c474ba68068be49caecebb upstream. When ioctl calls are made with non-null-terminated userspace strings, strlcpy causes an OOB-read from within strlen. Fix by changing to use strscpy instead. Signed-off-by: Zubin Mithra <zsm@chromium.org> Reviewed-by: Guenter Roeck <groeck@chromium.org> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'sound/core')
-rw-r--r--sound/core/seq/seq_clientmgr.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index b813ecc6322d..686e577912be 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -1249,7 +1249,7 @@ static int snd_seq_ioctl_set_client_info(struct snd_seq_client *client,
/* fill the info fields */
if (client_info.name[0])
- strlcpy(client->name, client_info.name, sizeof(client->name));
+ strscpy(client->name, client_info.name, sizeof(client->name));
client->filter = client_info.filter;
client->event_lost = client_info.event_lost;
@@ -1564,7 +1564,7 @@ static int snd_seq_ioctl_create_queue(struct snd_seq_client *client,
/* set queue name */
if (! info.name[0])
snprintf(info.name, sizeof(info.name), "Queue-%d", q->queue);
- strlcpy(q->name, info.name, sizeof(q->name));
+ strscpy(q->name, info.name, sizeof(q->name));
queuefree(q);
if (copy_to_user(arg, &info, sizeof(info)))
@@ -1642,7 +1642,7 @@ static int snd_seq_ioctl_set_queue_info(struct snd_seq_client *client,
queuefree(q);
return -EPERM;
}
- strlcpy(q->name, info.name, sizeof(q->name));
+ strscpy(q->name, info.name, sizeof(q->name));
queuefree(q);
return 0;