BACKPORT: treewide: Fix function prototypes for module_param_call()
Several function prototypes for the set/get functions defined by
module_param_call() have a slightly wrong argument types. This fixes
those in an effort to clean up the calls when running under type-enforced
compiler instrumentation for CFI. This is the result of running the
following semantic patch:
@match_module_param_call_function@
declarer name module_param_call;
identifier _name, _set_func, _get_func;
expression _arg, _mode;
@@
module_param_call(_name, _set_func, _get_func, _arg, _mode);
@fix_set_prototype
depends on match_module_param_call_function@
identifier match_module_param_call_function._set_func;
identifier _val, _param;
type _val_type, _param_type;
@@
int _set_func(
-_val_type _val
+const char * _val
,
-_param_type _param
+const struct kernel_param * _param
) { ... }
@fix_get_prototype
depends on match_module_param_call_function@
identifier match_module_param_call_function._get_func;
identifier _val, _param;
type _val_type, _param_type;
@@
int _get_func(
-_val_type _val
+char * _val
,
-_param_type _param
+const struct kernel_param * _param
) { ... }
Two additional by-hand changes are included for places where the above
Coccinelle script didn't notice them:
drivers/platform/x86/thinkpad_acpi.c
fs/lockd/svc.c
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Jessica Yu <jeyu@kernel.org>
Bug: 67506682
Change-Id: I2c9c0ee8ed28065e63270a52c155e5e7d2791295
(cherry picked from commit e4dca7b7aa08b22893c45485d222b5807c1375ae)
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
This commit is contained in:
parent
38cbecf2ae
commit
24da2c84bd
42 changed files with 87 additions and 72 deletions
|
|
@ -708,7 +708,7 @@ static void cmm_exit(void)
|
|||
* Return value:
|
||||
* 0 on success / other on failure
|
||||
**/
|
||||
static int cmm_set_disable(const char *val, struct kernel_param *kp)
|
||||
static int cmm_set_disable(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int disable = simple_strtoul(val, NULL, 10);
|
||||
|
||||
|
|
|
|||
|
|
@ -615,7 +615,7 @@ enum __force_cpu_type {
|
|||
|
||||
static int force_cpu_type;
|
||||
|
||||
static int set_cpu_type(const char *str, struct kernel_param *kp)
|
||||
static int set_cpu_type(const char *str, const struct kernel_param *kp)
|
||||
{
|
||||
if (!strcmp(str, "timer")) {
|
||||
force_cpu_type = timer;
|
||||
|
|
|
|||
|
|
@ -556,7 +556,8 @@ static int acpi_button_remove(struct acpi_device *device)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int param_set_lid_init_state(const char *val, struct kernel_param *kp)
|
||||
static int param_set_lid_init_state(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
|
|
@ -574,7 +575,8 @@ static int param_set_lid_init_state(const char *val, struct kernel_param *kp)
|
|||
return result;
|
||||
}
|
||||
|
||||
static int param_get_lid_init_state(char *buffer, struct kernel_param *kp)
|
||||
static int param_get_lid_init_state(char *buffer,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
switch (lid_init_state) {
|
||||
case ACPI_BUTTON_LID_INIT_OPEN:
|
||||
|
|
|
|||
|
|
@ -1891,7 +1891,8 @@ static const struct dev_pm_ops acpi_ec_pm = {
|
|||
SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume)
|
||||
};
|
||||
|
||||
static int param_set_event_clearing(const char *val, struct kernel_param *kp)
|
||||
static int param_set_event_clearing(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
|
|
@ -1909,7 +1910,8 @@ static int param_set_event_clearing(const char *val, struct kernel_param *kp)
|
|||
return result;
|
||||
}
|
||||
|
||||
static int param_get_event_clearing(char *buffer, struct kernel_param *kp)
|
||||
static int param_get_event_clearing(char *buffer,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
switch (ec_event_clearing) {
|
||||
case ACPI_EC_EVT_TIMING_STATUS:
|
||||
|
|
|
|||
|
|
@ -227,7 +227,8 @@ module_param_cb(trace_method_name, ¶m_ops_trace_method, &trace_method_name,
|
|||
module_param_cb(trace_debug_layer, ¶m_ops_trace_attrib, &acpi_gbl_trace_dbg_layer, 0644);
|
||||
module_param_cb(trace_debug_level, ¶m_ops_trace_attrib, &acpi_gbl_trace_dbg_level, 0644);
|
||||
|
||||
static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
||||
static int param_set_trace_state(const char *val,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
acpi_status status;
|
||||
const char *method = trace_method_name;
|
||||
|
|
@ -263,7 +264,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int param_get_trace_state(char *buffer, struct kernel_param *kp)
|
||||
static int param_get_trace_state(char *buffer, const struct kernel_param *kp)
|
||||
{
|
||||
if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED))
|
||||
return sprintf(buffer, "disable");
|
||||
|
|
@ -292,7 +293,8 @@ MODULE_PARM_DESC(aml_debug_output,
|
|||
"To enable/disable the ACPI Debug Object output.");
|
||||
|
||||
/* /sys/module/acpi/parameters/acpica_version */
|
||||
static int param_get_acpica_version(char *buffer, struct kernel_param *kp)
|
||||
static int param_get_acpica_version(char *buffer,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
int result;
|
||||
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait);
|
|||
static int binder_stop_on_user_error;
|
||||
|
||||
static int binder_set_stop_on_user_error(const char *val,
|
||||
struct kernel_param *kp)
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ static void (*specific_poweroff_func)(ipmi_user_t user);
|
|||
/* Holds the old poweroff function so we can restore it on removal. */
|
||||
static void (*old_poweroff_func)(void);
|
||||
|
||||
static int set_param_ifnum(const char *val, struct kernel_param *kp)
|
||||
static int set_param_ifnum(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int rv = param_set_int(val, kp);
|
||||
if (rv)
|
||||
|
|
|
|||
|
|
@ -1344,7 +1344,7 @@ static unsigned int num_slave_addrs;
|
|||
#define IPMI_MEM_ADDR_SPACE 1
|
||||
static const char * const addr_space_to_str[] = { "i/o", "mem" };
|
||||
|
||||
static int hotmod_handler(const char *val, struct kernel_param *kp);
|
||||
static int hotmod_handler(const char *val, const struct kernel_param *kp);
|
||||
|
||||
module_param_call(hotmod, hotmod_handler, NULL, NULL, 0200);
|
||||
MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See"
|
||||
|
|
@ -1814,7 +1814,7 @@ static struct smi_info *smi_info_alloc(void)
|
|||
return info;
|
||||
}
|
||||
|
||||
static int hotmod_handler(const char *val, struct kernel_param *kp)
|
||||
static int hotmod_handler(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
char *str = kstrdup(val, GFP_KERNEL);
|
||||
int rv;
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ int edac_mc_get_poll_msec(void)
|
|||
return edac_mc_poll_msec;
|
||||
}
|
||||
|
||||
static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
|
||||
static int edac_set_poll_msec(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
unsigned long l;
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
|
||||
#ifdef CONFIG_EDAC_DEBUG
|
||||
|
||||
static int edac_set_debug_level(const char *buf, struct kernel_param *kp)
|
||||
static int edac_set_debug_level(const char *buf,
|
||||
const struct kernel_param *kp)
|
||||
{
|
||||
unsigned long val;
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ module_param(emulate_scroll_wheel, bool, 0644);
|
|||
MODULE_PARM_DESC(emulate_scroll_wheel, "Emulate a scroll wheel");
|
||||
|
||||
static unsigned int scroll_speed = 32;
|
||||
static int param_set_scroll_speed(const char *val, struct kernel_param *kp) {
|
||||
static int param_set_scroll_speed(const char *val,
|
||||
const struct kernel_param *kp) {
|
||||
unsigned long speed;
|
||||
if (!val || kstrtoul(val, 0, &speed) || speed > 63)
|
||||
return -EINVAL;
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ struct chs_geom {
|
|||
static unsigned int ide_disks;
|
||||
static struct chs_geom ide_disks_chs[MAX_HWIFS * MAX_DRIVES];
|
||||
|
||||
static int ide_set_disk_chs(const char *str, struct kernel_param *kp)
|
||||
static int ide_set_disk_chs(const char *str, const struct kernel_param *kp)
|
||||
{
|
||||
unsigned int a, b, c = 0, h = 0, s = 0, i, j = 1;
|
||||
|
||||
|
|
@ -328,7 +328,7 @@ static void ide_dev_apply_params(ide_drive_t *drive, u8 unit)
|
|||
|
||||
static unsigned int ide_ignore_cable;
|
||||
|
||||
static int ide_set_ignore_cable(const char *s, struct kernel_param *kp)
|
||||
static int ide_set_ignore_cable(const char *s, const struct kernel_param *kp)
|
||||
{
|
||||
int i, j = 1;
|
||||
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ static struct kparam_string kp_txselect = {
|
|||
.string = txselect_list,
|
||||
.maxlen = MAX_ATTEN_LEN
|
||||
};
|
||||
static int setup_txselect(const char *, struct kernel_param *);
|
||||
static int setup_txselect(const char *, const struct kernel_param *);
|
||||
module_param_call(txselect, setup_txselect, param_get_string,
|
||||
&kp_txselect, S_IWUSR | S_IRUGO);
|
||||
MODULE_PARM_DESC(txselect,
|
||||
|
|
@ -6177,7 +6177,7 @@ static void set_no_qsfp_atten(struct qib_devdata *dd, int change)
|
|||
}
|
||||
|
||||
/* handle the txselect parameter changing */
|
||||
static int setup_txselect(const char *str, struct kernel_param *kp)
|
||||
static int setup_txselect(const char *str, const struct kernel_param *kp)
|
||||
{
|
||||
struct qib_devdata *dd;
|
||||
unsigned long val;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ module_param(srpt_srq_size, int, 0444);
|
|||
MODULE_PARM_DESC(srpt_srq_size,
|
||||
"Shared receive queue (SRQ) size.");
|
||||
|
||||
static int srpt_get_u64_x(char *buffer, struct kernel_param *kp)
|
||||
static int srpt_get_u64_x(char *buffer, const struct kernel_param *kp)
|
||||
{
|
||||
return sprintf(buffer, "0x%016llx", *(u64 *)kp->arg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ _set_debug(struct fritzcard *card)
|
|||
}
|
||||
|
||||
static int
|
||||
set_debug(const char *val, struct kernel_param *kp)
|
||||
set_debug(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
struct fritzcard *card;
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ _set_debug(struct inf_hw *card)
|
|||
}
|
||||
|
||||
static int
|
||||
set_debug(const char *val, struct kernel_param *kp)
|
||||
set_debug(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
struct inf_hw *card;
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ _set_debug(struct tiger_hw *card)
|
|||
}
|
||||
|
||||
static int
|
||||
set_debug(const char *val, struct kernel_param *kp)
|
||||
set_debug(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
struct tiger_hw *card;
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ _set_debug(struct sfax_hw *card)
|
|||
}
|
||||
|
||||
static int
|
||||
set_debug(const char *val, struct kernel_param *kp)
|
||||
set_debug(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
struct sfax_hw *card;
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ _set_debug(struct w6692_hw *card)
|
|||
}
|
||||
|
||||
static int
|
||||
set_debug(const char *val, struct kernel_param *kp)
|
||||
set_debug(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
int ret;
|
||||
struct w6692_hw *card;
|
||||
|
|
|
|||
|
|
@ -5095,7 +5095,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int add_named_array(const char *val, struct kernel_param *kp)
|
||||
static int add_named_array(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
/* val must be "md_*" where * is not all digits.
|
||||
* We allocate an array with a large free minor number, and
|
||||
|
|
@ -8965,11 +8965,11 @@ static __exit void md_exit(void)
|
|||
subsys_initcall(md_init);
|
||||
module_exit(md_exit)
|
||||
|
||||
static int get_ro(char *buffer, struct kernel_param *kp)
|
||||
static int get_ro(char *buffer, const struct kernel_param *kp)
|
||||
{
|
||||
return sprintf(buffer, "%d", start_readonly);
|
||||
}
|
||||
static int set_ro(const char *val, struct kernel_param *kp)
|
||||
static int set_ro(const char *val, const struct kernel_param *kp)
|
||||
{
|
||||
return kstrtouint(val, 10, (unsigned int *)&start_readonly);
|
||||
}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue