mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
params: Do not go over the limit when getting the string length
We can use strnlen() even on early stages and it prevents from going over the string boundaries in case it's already too long. Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20231120151419.1661807-3-andriy.shevchenko@linux.intel.com Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
12cd3cd8c7
commit
fd0cd057a1
@ -260,7 +260,10 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);
|
||||
|
||||
int param_set_charp(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
if (strlen(val) > 1024) {
|
||||
size_t len, maxlen = 1024;
|
||||
|
||||
len = strnlen(val, maxlen + 1);
|
||||
if (len == maxlen + 1) {
|
||||
pr_err("%s: string parameter too long\n", kp->name);
|
||||
return -ENOSPC;
|
||||
}
|
||||
@ -270,7 +273,7 @@ int param_set_charp(const char *val, const struct kernel_param *kp)
|
||||
/* This is a hack. We can't kmalloc in early boot, and we
|
||||
* don't need to; this mangled commandline is preserved. */
|
||||
if (slab_is_available()) {
|
||||
*(char **)kp->arg = kmalloc_parameter(strlen(val)+1);
|
||||
*(char **)kp->arg = kmalloc_parameter(len + 1);
|
||||
if (!*(char **)kp->arg)
|
||||
return -ENOMEM;
|
||||
strcpy(*(char **)kp->arg, val);
|
||||
@ -508,7 +511,7 @@ int param_set_copystring(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
const struct kparam_string *kps = kp->str;
|
||||
|
||||
if (strlen(val)+1 > kps->maxlen) {
|
||||
if (strnlen(val, kps->maxlen) == kps->maxlen) {
|
||||
pr_err("%s: string doesn't fit in %u chars.\n",
|
||||
kp->name, kps->maxlen-1);
|
||||
return -ENOSPC;
|
||||
|
Loading…
Reference in New Issue
Block a user