mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 22:25:03 +00:00
speakup: Add spinlock in synth_direct_store
All operations with synth buffer should be protected, as there are global pointers, which should be modified atomically. Found by Linux Driver Verification project (linuxtesting.org) Signed-off-by: Pavel Andrianov <andrianov@ispras.ru> Acked-by: Vaishali Thakkar <vaishali.thakkar@oracle.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
da25a8ec6b
commit
777953182e
1 changed files with 3 additions and 0 deletions
|
@ -411,11 +411,13 @@ static ssize_t synth_direct_store(struct kobject *kobj,
|
|||
int len;
|
||||
int bytes;
|
||||
const char *ptr = buf;
|
||||
unsigned long flags;
|
||||
|
||||
if (!synth)
|
||||
return -EPERM;
|
||||
|
||||
len = strlen(buf);
|
||||
spin_lock_irqsave(&speakup_info.spinlock, flags);
|
||||
while (len > 0) {
|
||||
bytes = min_t(size_t, len, 250);
|
||||
strncpy(tmp, ptr, bytes);
|
||||
|
@ -425,6 +427,7 @@ static ssize_t synth_direct_store(struct kobject *kobj,
|
|||
ptr += bytes;
|
||||
len -= bytes;
|
||||
}
|
||||
spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue