diff options
Diffstat (limited to 'kernel/params.c')
| -rw-r--r-- | kernel/params.c | 17 | 
1 files changed, 6 insertions, 11 deletions
diff --git a/kernel/params.c b/kernel/params.c index 9da58eabdcb..d656c276508 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -218,15 +218,11 @@ int param_set_charp(const char *val, struct kernel_param *kp)  		return -ENOSPC;  	} -	if (kp->flags & KPARAM_KMALLOCED) -		kfree(*(char **)kp->arg); -  	/* This is a hack.  We can't need to strdup in early boot, and we  	 * don't need to; this mangled commandline is preserved. */  	if (slab_is_available()) { -		kp->flags |= KPARAM_KMALLOCED;  		*(char **)kp->arg = kstrdup(val, GFP_KERNEL); -		if (!kp->arg) +		if (!*(char **)kp->arg)  			return -ENOMEM;  	} else  		*(const char **)kp->arg = val; @@ -304,6 +300,7 @@ static int param_array(const char *name,  		       unsigned int min, unsigned int max,  		       void *elem, int elemsize,  		       int (*set)(const char *, struct kernel_param *kp), +		       u16 flags,  		       unsigned int *num)  {  	int ret; @@ -313,6 +310,7 @@ static int param_array(const char *name,  	/* Get the name right for errors. */  	kp.name = name;  	kp.arg = elem; +	kp.flags = flags;  	/* No equals sign? */  	if (!val) { @@ -358,7 +356,8 @@ int param_array_set(const char *val, struct kernel_param *kp)  	unsigned int temp_num;  	return param_array(kp->name, val, 1, arr->max, arr->elem, -			   arr->elemsize, arr->set, arr->num ?: &temp_num); +			   arr->elemsize, arr->set, kp->flags, +			   arr->num ?: &temp_num);  }  int param_array_get(char *buffer, struct kernel_param *kp) @@ -605,11 +604,7 @@ void module_param_sysfs_remove(struct module *mod)  void destroy_params(const struct kernel_param *params, unsigned num)  { -	unsigned int i; - -	for (i = 0; i < num; i++) -		if (params[i].flags & KPARAM_KMALLOCED) -			kfree(*(char **)params[i].arg); +	/* FIXME: This should free kmalloced charp parameters.  It doesn't. */  }  static void __init kernel_add_sysfs_param(const char *name,  | 
