@@ -260,7 +260,10 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);
260
260
261
261
int param_set_charp (const char * val , const struct kernel_param * kp )
262
262
{
263
- if (strlen (val ) > 1024 ) {
263
+ size_t len , maxlen = 1024 ;
264
+
265
+ len = strnlen (val , maxlen + 1 );
266
+ if (len == maxlen + 1 ) {
264
267
pr_err ("%s: string parameter too long\n" , kp -> name );
265
268
return - ENOSPC ;
266
269
}
@@ -270,7 +273,7 @@ int param_set_charp(const char *val, const struct kernel_param *kp)
270
273
/* This is a hack. We can't kmalloc in early boot, and we
271
274
* don't need to; this mangled commandline is preserved. */
272
275
if (slab_is_available ()) {
273
- * (char * * )kp -> arg = kmalloc_parameter (strlen ( val ) + 1 );
276
+ * (char * * )kp -> arg = kmalloc_parameter (len + 1 );
274
277
if (!* (char * * )kp -> arg )
275
278
return - ENOMEM ;
276
279
strcpy (* (char * * )kp -> arg , val );
@@ -508,7 +511,7 @@ int param_set_copystring(const char *val, const struct kernel_param *kp)
508
511
{
509
512
const struct kparam_string * kps = kp -> str ;
510
513
511
- if (strlen (val ) + 1 > kps -> maxlen ) {
514
+ if (strnlen (val , kps -> maxlen ) == kps -> maxlen ) {
512
515
pr_err ("%s: string doesn't fit in %u chars.\n" ,
513
516
kp -> name , kps -> maxlen - 1 );
514
517
return - ENOSPC ;
0 commit comments