summaryrefslogtreecommitdiff
path: root/kernel/module.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2002-12-29 21:29:39 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-12-29 21:29:39 -0800
commitb9628e101ffdd8c0889e102a4b33a5348f42c8e4 (patch)
treec63e2ef703c11376a9e04594bce6bf86783239a5 /kernel/module.c
parent948ff1ba8357658eed1c353f3a949cd2c18fa5f0 (diff)
parent09619fdbe8b07911722e2ed8894f193160cdd1a8 (diff)
Merge
Diffstat (limited to 'kernel/module.c')
-rw-r--r--kernel/module.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/kernel/module.c b/kernel/module.c
index c33aac2d23b9..6d2e66e9bf37 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -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,