diff options
Diffstat (limited to 'kernel/params.c')
| -rw-r--r-- | kernel/params.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/kernel/params.c b/kernel/params.c index 9da58eabdcb2..95ef27cf8e82 100644 --- a/kernel/params.c +++ b/kernel/params.c | |||
| @@ -218,13 +218,9 @@ int param_set_charp(const char *val, struct kernel_param *kp) | |||
| 218 | return -ENOSPC; | 218 | return -ENOSPC; |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | if (kp->flags & KPARAM_KMALLOCED) | ||
| 222 | kfree(*(char **)kp->arg); | ||
| 223 | |||
| 224 | /* This is a hack. We can't need to strdup in early boot, and we | 221 | /* This is a hack. We can't need to strdup in early boot, and we |
| 225 | * don't need to; this mangled commandline is preserved. */ | 222 | * don't need to; this mangled commandline is preserved. */ |
| 226 | if (slab_is_available()) { | 223 | if (slab_is_available()) { |
| 227 | kp->flags |= KPARAM_KMALLOCED; | ||
| 228 | *(char **)kp->arg = kstrdup(val, GFP_KERNEL); | 224 | *(char **)kp->arg = kstrdup(val, GFP_KERNEL); |
| 229 | if (!kp->arg) | 225 | if (!kp->arg) |
| 230 | return -ENOMEM; | 226 | return -ENOMEM; |
| @@ -605,11 +601,7 @@ void module_param_sysfs_remove(struct module *mod) | |||
| 605 | 601 | ||
| 606 | void destroy_params(const struct kernel_param *params, unsigned num) | 602 | void destroy_params(const struct kernel_param *params, unsigned num) |
| 607 | { | 603 | { |
| 608 | unsigned int i; | 604 | /* FIXME: This should free kmalloced charp parameters. It doesn't. */ |
| 609 | |||
| 610 | for (i = 0; i < num; i++) | ||
| 611 | if (params[i].flags & KPARAM_KMALLOCED) | ||
| 612 | kfree(*(char **)params[i].arg); | ||
| 613 | } | 605 | } |
| 614 | 606 | ||
| 615 | static void __init kernel_add_sysfs_param(const char *name, | 607 | static void __init kernel_add_sysfs_param(const char *name, |
