Commit b9628e10 authored by Linus Torvalds's avatar Linus Torvalds

Merge

parents 948ff1ba 09619fdb
......@@ -569,10 +569,19 @@ static int param_set_byte(const char *val, struct kernel_param *kp)
return 0;
}
/* Bounds checking done below */
static int obsparm_copy_string(const char *val, struct kernel_param *kp)
{
strcpy(kp->arg, val);
return 0;
}
extern int set_obsolete(const char *val, struct kernel_param *kp)
{
unsigned int min, max;
char *p, *endp;
unsigned int size, maxsize;
char *endp;
const char *p;
struct obsolete_modparm *obsparm = kp->arg;
if (!val) {
......@@ -606,9 +615,30 @@ extern int set_obsolete(const char *val, struct kernel_param *kp)
case 's':
return param_array(kp->name, val, min, max, obsparm->addr,
sizeof(char *), param_set_charp);
case 'c':
/* Undocumented: 1-5c50 means 1-5 strings of up to 49 chars,
and the decl is "char xxx[5][50];" */
p = endp+1;
maxsize = simple_strtol(p, &endp, 10);
/* We check lengths here (yes, this is a hack). */
p = val;
while (p[size = strcspn(p, ",")]) {
if (size >= maxsize)
goto oversize;
p += size+1;
}
if (size >= maxsize)
goto oversize;
return param_array(kp->name, val, min, max, obsparm->addr,
maxsize, obsparm_copy_string);
}
printk(KERN_ERR "Unknown obsolete parameter type %s\n", obsparm->type);
return -EINVAL;
oversize:
printk(KERN_ERR
"Parameter %s doesn't fit in %u chars.\n", kp->name, maxsize);
return -EINVAL;
}
static int obsolete_params(const char *name,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment