mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
of: module: prevent NULL pointer dereference in vsnprintf()
commit a1aa5390cc
upstream.
In of_modalias(), we can get passed the str and len parameters which would
cause a kernel oops in vsnprintf() since it only allows passing a NULL ptr
when the length is also 0. Also, we need to filter out the negative values
of the len parameter as these will result in a really huge buffer since
snprintf() takes size_t parameter while ours is ssize_t...
Found by Linux Verification Center (linuxtesting.org) with the Svace static
analysis tool.
Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/1d211023-3923-685b-20f0-f3f90ea56e1f@omp.ru
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ae6d76e4f0
commit
544561dc56
@ -16,6 +16,14 @@ ssize_t of_modalias(const struct device_node *np, char *str, ssize_t len)
|
||||
ssize_t csize;
|
||||
ssize_t tsize;
|
||||
|
||||
/*
|
||||
* Prevent a kernel oops in vsnprintf() -- it only allows passing a
|
||||
* NULL ptr when the length is also 0. Also filter out the negative
|
||||
* lengths...
|
||||
*/
|
||||
if ((len > 0 && !str) || len < 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* Name & Type */
|
||||
/* %p eats all alphanum characters, so %c must be used here */
|
||||
csize = snprintf(str, len, "of:N%pOFn%c%s", np, 'T',
|
||||
|
Loading…
Reference in New Issue
Block a user