mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-09-18 12:44:18 +00:00
param: fix lots of bugs with writing charp params from sysfs, by leaking mem.
commit 65afac7d80ab3bc9f81e75eafb71eeb92a3ebdef upstream.
e180a6b775 "param: fix charp parameters set via sysfs" fixed the case
where charp parameters written via sysfs were freed, leaving drivers
accessing random memory.
Unfortunately, storing a flag in the kparam struct was a bad idea: it's
rodata so setting it causes an oops on some archs. But that's not all:
1) module_param_array() on charp doesn't work reliably, since we use an
uninitialized temporary struct kernel_param.
2) there's a fundamental race if a module uses this parameter and then
it's changed: they will still access the old, freed, memory.
The simplest fix (ie. for 2.6.32) is to never free the memory. This
prevents all these problems, at cost of a memory leak. In practice, there
are only 18 places where a charp is writable via sysfs, and all are
root-only writable.
Reported-by: Takashi Iwai <tiwai@suse.de>
Cc: Sitsofe Wheeler <sitsofe@yahoo.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
05fe6c842a
commit
9f00eee2ff
@@ -37,7 +37,6 @@ typedef int (*param_set_fn)(const char *val, struct kernel_param *kp);
|
||||
typedef int (*param_get_fn)(char *buffer, struct kernel_param *kp);
|
||||
|
||||
/* Flag bits for kernel_param.flags */
|
||||
#define KPARAM_KMALLOCED 1
|
||||
#define KPARAM_ISBOOL 2
|
||||
|
||||
struct kernel_param {
|
||||
|
||||
Reference in New Issue
Block a user