mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
accessibility: speakup: refactor deprecated strncpy
`strncpy` is deprecated for use on NUL-terminated destination strings [1]. Let's refactor this function to just use synth_write(). Link: www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings[1] Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2] Link: https://github.com/KSPP/linux/issues/90 Cc: linux-hardening@vger.kernel.org Signed-off-by: Justin Stitt <justinstitt@google.com> Suggested-by: Kees Cook <keescook@chromium.org> Reviewed-by: Kees Cook <keescook@chromium.org> Tested-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Link: https://lore.kernel.org/r/20230918-strncpy-drivers-accessibility-speakup-kobjects-c-v2-1-d5b1976c5dbf@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2953fa0306
commit
19e3e6cdfd
1 changed files with 11 additions and 14 deletions
|
@ -413,27 +413,24 @@ static ssize_t synth_direct_store(struct kobject *kobj,
|
||||||
struct kobj_attribute *attr,
|
struct kobj_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
u_char tmp[256];
|
char *unescaped;
|
||||||
int len;
|
|
||||||
int bytes;
|
|
||||||
const char *ptr = buf;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
if (!synth)
|
if (!synth)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
len = strlen(buf);
|
unescaped = kstrdup(buf, GFP_KERNEL);
|
||||||
|
if (!unescaped)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
string_unescape_any_inplace(unescaped);
|
||||||
|
|
||||||
spin_lock_irqsave(&speakup_info.spinlock, flags);
|
spin_lock_irqsave(&speakup_info.spinlock, flags);
|
||||||
while (len > 0) {
|
synth_write(unescaped, strlen(unescaped));
|
||||||
bytes = min_t(size_t, len, 250);
|
|
||||||
strncpy(tmp, ptr, bytes);
|
|
||||||
tmp[bytes] = '\0';
|
|
||||||
string_unescape_any_inplace(tmp);
|
|
||||||
synth_printf("%s", tmp);
|
|
||||||
ptr += bytes;
|
|
||||||
len -= bytes;
|
|
||||||
}
|
|
||||||
spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
spin_unlock_irqrestore(&speakup_info.spinlock, flags);
|
||||||
|
|
||||||
|
kfree(unescaped);
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue