Commit bafeafea authored by Rusty Russell's avatar Rusty Russell

module_param: check type correctness for module_param_array

module_param_array(), unlike its non-array cousins, didn't check the type
of the variable.  Fixing this found two bugs.

Cc: Luca Risolia <luca.risolia@studio.unibo.it>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Eric Piel <eric.piel@tremplin-utc.net>
Cc: linux-media@vger.kernel.org
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent e49ce141
...@@ -76,8 +76,8 @@ MODULE_PARM_DESC(video_nr, ...@@ -76,8 +76,8 @@ MODULE_PARM_DESC(video_nr,
"\none and for every other camera." "\none and for every other camera."
"\n"); "\n");
static short force_munmap[] = {[0 ... ET61X251_MAX_DEVICES-1] = static bool force_munmap[] = {[0 ... ET61X251_MAX_DEVICES-1] =
ET61X251_FORCE_MUNMAP}; ET61X251_FORCE_MUNMAP};
module_param_array(force_munmap, bool, NULL, 0444); module_param_array(force_munmap, bool, NULL, 0444);
MODULE_PARM_DESC(force_munmap, MODULE_PARM_DESC(force_munmap,
"\n<0|1[,...]> Force the application to unmap previously" "\n<0|1[,...]> Force the application to unmap previously"
......
...@@ -75,8 +75,8 @@ MODULE_PARM_DESC(video_nr, ...@@ -75,8 +75,8 @@ MODULE_PARM_DESC(video_nr,
"\none and for every other camera." "\none and for every other camera."
"\n"); "\n");
static short force_munmap[] = {[0 ... SN9C102_MAX_DEVICES-1] = static bool force_munmap[] = {[0 ... SN9C102_MAX_DEVICES-1] =
SN9C102_FORCE_MUNMAP}; SN9C102_FORCE_MUNMAP};
module_param_array(force_munmap, bool, NULL, 0444); module_param_array(force_munmap, bool, NULL, 0444);
MODULE_PARM_DESC(force_munmap, MODULE_PARM_DESC(force_munmap,
" <0|1[,...]>" " <0|1[,...]>"
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
/* Module Parameters */ /* Module Parameters */
static unsigned int num_modules = CMODIO_MAX_MODULES; static unsigned int num_modules = CMODIO_MAX_MODULES;
static unsigned char *modules[CMODIO_MAX_MODULES] = { static char *modules[CMODIO_MAX_MODULES] = {
"empty", "empty", "empty", "empty", "empty", "empty", "empty", "empty",
}; };
......
...@@ -111,6 +111,8 @@ static struct kernel_param_ops param_ops_axis = { ...@@ -111,6 +111,8 @@ static struct kernel_param_ops param_ops_axis = {
.get = param_get_int, .get = param_get_int,
}; };
#define param_check_axis(name, p) param_check_int(name, p)
module_param_array_named(axes, lis3_dev.ac.as_array, axis, NULL, 0644); module_param_array_named(axes, lis3_dev.ac.as_array, axis, NULL, 0644);
MODULE_PARM_DESC(axes, "Axis-mapping for x,y,z directions"); MODULE_PARM_DESC(axes, "Axis-mapping for x,y,z directions");
......
...@@ -395,6 +395,7 @@ extern int param_get_invbool(char *buffer, const struct kernel_param *kp); ...@@ -395,6 +395,7 @@ extern int param_get_invbool(char *buffer, const struct kernel_param *kp);
* module_param_named() for why this might be necessary. * module_param_named() for why this might be necessary.
*/ */
#define module_param_array_named(name, array, type, nump, perm) \ #define module_param_array_named(name, array, type, nump, perm) \
param_check_##type(name, &(array)[0]); \
static const struct kparam_array __param_arr_##name \ static const struct kparam_array __param_arr_##name \
= { .max = ARRAY_SIZE(array), .num = nump, \ = { .max = ARRAY_SIZE(array), .num = nump, \
.ops = &param_ops_##type, \ .ops = &param_ops_##type, \
......
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