* [PATCH][RFC] security: constify seq_operations @ 2009-08-11 13:52 ` James Morris 0 siblings, 0 replies; 14+ messages in thread From: James Morris @ 2009-08-11 13:52 UTC (permalink / raw) To: Andrew Morton Cc: linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors I think it'd be a good idea to constify more of the various operations structs in the kernel -- our coverage of this is spotty. The patch below should provide coverage for all of the eligible seq_operations structs in the kernel. It's derived from the grsecurity patch (which I was reading and noticed how many of these we're missing). It's possible something's been missed, or that there are problems in code which I can't test. Please review/comment/test. If it looks ok, I suggest pushing this via -mm. Note that there are quite a few other similar ops to be constified, such as file_operations, so if anyone would like to pitch in, please do so. --- Subject: [PATCH 1/1] security: constify seq_operations Make all seq_operations structs const, to help mitigate against revectoring user-triggerable function pointers. This is derived from the grsecurity patch, although generated from scratch because it's simpler than extracting the changes from there. Signed-off-by: James Morris <jmorris@namei.org> --- arch/mn10300/kernel/setup.c | 2 +- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/platforms/pseries/hvCall_inst.c | 2 +- arch/x86/mm/pat.c | 2 +- drivers/block/cciss.c | 2 +- drivers/char/misc.c | 2 +- drivers/char/tpm/tpm_bios.c | 4 ++-- drivers/isdn/capi/kcapi_proc.c | 10 +++++----- drivers/scsi/sg.c | 6 +++--- drivers/staging/rtl8192su/ieee80211/proc.c | 2 +- fs/afs/proc.c | 8 ++++---- fs/dlm/debug_fs.c | 12 ++++++------ fs/ext4/mballoc.c | 4 ++-- fs/jbd2/journal.c | 4 ++-- fs/nfs/client.c | 4 ++-- fs/nfsd/export.c | 2 +- fs/ocfs2/cluster/netdebug.c | 4 ++-- fs/ocfs2/dlm/dlmdebug.c | 2 +- fs/proc/nommu.c | 2 +- include/linux/nfsd/nfsd.h | 2 +- ipc/util.c | 2 +- kernel/cgroup.c | 2 +- kernel/kprobes.c | 2 +- kernel/lockdep_proc.c | 2 +- kernel/trace/ftrace.c | 4 ++-- kernel/trace/trace.c | 4 ++-- net/ipv6/ip6mr.c | 4 ++-- net/key/af_key.c | 2 +- security/integrity/ima/ima_fs.c | 4 ++-- security/smack/smackfs.c | 6 +++--- 30 files changed, 55 insertions(+), 55 deletions(-) diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c index 79890ed..3f24c29 100644 --- a/arch/mn10300/kernel/setup.c +++ b/arch/mn10300/kernel/setup.c @@ -285,7 +285,7 @@ static void c_stop(struct seq_file *m, void *v) { } -struct seq_operations cpuinfo_op = { +const struct seq_operations cpuinfo_op = { .start = c_start, .next = c_next, .stop = c_stop, diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 02fed27..1d5570a 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -328,7 +328,7 @@ static void c_stop(struct seq_file *m, void *v) { } -struct seq_operations cpuinfo_op = { +const struct seq_operations cpuinfo_op = { .start =c_start, .next = c_next, .stop = c_stop, diff --git a/arch/powerpc/platforms/pseries/hvCall_inst.c b/arch/powerpc/platforms/pseries/hvCall_inst.c index eae51ef..3631a4f 100644 --- a/arch/powerpc/platforms/pseries/hvCall_inst.c +++ b/arch/powerpc/platforms/pseries/hvCall_inst.c @@ -71,7 +71,7 @@ static int hc_show(struct seq_file *m, void *p) return 0; } -static struct seq_operations hcall_inst_seq_ops = { +static const struct seq_operations hcall_inst_seq_ops = { .start = hc_start, .next = hc_next, .stop = hc_stop, diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index e6718bb..e2900a3 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -826,7 +826,7 @@ static int memtype_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations memtype_seq_ops = { +static const struct seq_operations memtype_seq_ops = { .start = memtype_seq_start, .next = memtype_seq_next, .stop = memtype_seq_stop, diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index a52cc7f..7404f83 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -363,7 +363,7 @@ static void cciss_seq_stop(struct seq_file *seq, void *v) h->busy_configuring = 0; } -static struct seq_operations cciss_seq_ops = { +static const struct seq_operations cciss_seq_ops = { .start = cciss_seq_start, .show = cciss_seq_show, .next = cciss_seq_next, diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 62c99fa..9eaf8c4 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c @@ -91,7 +91,7 @@ static int misc_seq_show(struct seq_file *seq, void *v) } -static struct seq_operations misc_seq_ops = { +static const struct seq_operations misc_seq_ops = { .start = misc_seq_start, .next = misc_seq_next, .stop = misc_seq_stop, diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c index 0c2f55a..bf2170f 100644 --- a/drivers/char/tpm/tpm_bios.c +++ b/drivers/char/tpm/tpm_bios.c @@ -343,14 +343,14 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations tpm_ascii_b_measurments_seqops = { +static const struct seq_operations tpm_ascii_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, .show = tpm_ascii_bios_measurements_show, }; -static struct seq_operations tpm_binary_b_measurments_seqops = { +static const struct seq_operations tpm_binary_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, diff --git a/drivers/isdn/capi/kcapi_proc.c b/drivers/isdn/capi/kcapi_proc.c index 50ed778..09d4db7 100644 --- a/drivers/isdn/capi/kcapi_proc.c +++ b/drivers/isdn/capi/kcapi_proc.c @@ -89,14 +89,14 @@ static int contrstats_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_controller_ops = { +static const struct seq_operations seq_controller_ops = { .start = controller_start, .next = controller_next, .stop = controller_stop, .show = controller_show, }; -static struct seq_operations seq_contrstats_ops = { +static const struct seq_operations seq_contrstats_ops = { .start = controller_start, .next = controller_next, .stop = controller_stop, @@ -194,14 +194,14 @@ applstats_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_applications_ops = { +static const struct seq_operations seq_applications_ops = { .start = applications_start, .next = applications_next, .stop = applications_stop, .show = applications_show, }; -static struct seq_operations seq_applstats_ops = { +static const struct seq_operations seq_applstats_ops = { .start = applications_start, .next = applications_next, .stop = applications_stop, @@ -264,7 +264,7 @@ static int capi_driver_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_capi_driver_ops = { +static const struct seq_operations seq_capi_driver_ops = { .start = capi_driver_start, .next = capi_driver_next, .stop = capi_driver_stop, diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 9230402..7eee714 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -2233,7 +2233,7 @@ static struct file_operations dev_fops = { .open = sg_proc_open_dev, .release = seq_release, }; -static struct seq_operations dev_seq_ops = { +static const struct seq_operations dev_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, @@ -2246,7 +2246,7 @@ static struct file_operations devstrs_fops = { .open = sg_proc_open_devstrs, .release = seq_release, }; -static struct seq_operations devstrs_seq_ops = { +static const struct seq_operations devstrs_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, @@ -2259,7 +2259,7 @@ static struct file_operations debug_fops = { .open = sg_proc_open_debug, .release = seq_release, }; -static struct seq_operations debug_seq_ops = { +static const struct seq_operations debug_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, diff --git a/drivers/staging/rtl8192su/ieee80211/proc.c b/drivers/staging/rtl8192su/ieee80211/proc.c index 4f3f9ed..df96ad5 100644 --- a/drivers/staging/rtl8192su/ieee80211/proc.c +++ b/drivers/staging/rtl8192su/ieee80211/proc.c @@ -87,7 +87,7 @@ static int c_show(struct seq_file *m, void *p) return 0; } -static struct seq_operations crypto_seq_ops = { +static const struct seq_operations crypto_seq_ops = { .start = c_start, .next = c_next, .stop = c_stop, diff --git a/fs/afs/proc.c b/fs/afs/proc.c index 8630615..852739d 100644 --- a/fs/afs/proc.c +++ b/fs/afs/proc.c @@ -28,7 +28,7 @@ static int afs_proc_cells_show(struct seq_file *m, void *v); static ssize_t afs_proc_cells_write(struct file *file, const char __user *buf, size_t size, loff_t *_pos); -static struct seq_operations afs_proc_cells_ops = { +static const struct seq_operations afs_proc_cells_ops = { .start = afs_proc_cells_start, .next = afs_proc_cells_next, .stop = afs_proc_cells_stop, @@ -70,7 +70,7 @@ static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, static void afs_proc_cell_volumes_stop(struct seq_file *p, void *v); static int afs_proc_cell_volumes_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_volumes_ops = { +static const struct seq_operations afs_proc_cell_volumes_ops = { .start = afs_proc_cell_volumes_start, .next = afs_proc_cell_volumes_next, .stop = afs_proc_cell_volumes_stop, @@ -95,7 +95,7 @@ static void *afs_proc_cell_vlservers_next(struct seq_file *p, void *v, static void afs_proc_cell_vlservers_stop(struct seq_file *p, void *v); static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_vlservers_ops = { +static const struct seq_operations afs_proc_cell_vlservers_ops = { .start = afs_proc_cell_vlservers_start, .next = afs_proc_cell_vlservers_next, .stop = afs_proc_cell_vlservers_stop, @@ -119,7 +119,7 @@ static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, static void afs_proc_cell_servers_stop(struct seq_file *p, void *v); static int afs_proc_cell_servers_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_servers_ops = { +static const struct seq_operations afs_proc_cell_servers_ops = { .start = afs_proc_cell_servers_start, .next = afs_proc_cell_servers_next, .stop = afs_proc_cell_servers_stop, diff --git a/fs/dlm/debug_fs.c b/fs/dlm/debug_fs.c index 1d1d274..1c8bb8c 100644 --- a/fs/dlm/debug_fs.c +++ b/fs/dlm/debug_fs.c @@ -386,9 +386,9 @@ static int table_seq_show(struct seq_file *seq, void *iter_ptr) return rv; } -static struct seq_operations format1_seq_ops; -static struct seq_operations format2_seq_ops; -static struct seq_operations format3_seq_ops; +static const struct seq_operations format1_seq_ops; +static const struct seq_operations format2_seq_ops; +static const struct seq_operations format3_seq_ops; static void *table_seq_start(struct seq_file *seq, loff_t *pos) { @@ -534,21 +534,21 @@ static void table_seq_stop(struct seq_file *seq, void *iter_ptr) } } -static struct seq_operations format1_seq_ops = { +static const struct seq_operations format1_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, .show = table_seq_show, }; -static struct seq_operations format2_seq_ops = { +static const struct seq_operations format2_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, .show = table_seq_show, }; -static struct seq_operations format3_seq_ops = { +static const struct seq_operations format3_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index cd25846..a891a06 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -2205,7 +2205,7 @@ static void ext4_mb_seq_history_stop(struct seq_file *seq, void *v) { } -static struct seq_operations ext4_mb_seq_history_ops = { +static const struct seq_operations ext4_mb_seq_history_ops = { .start = ext4_mb_seq_history_start, .next = ext4_mb_seq_history_next, .stop = ext4_mb_seq_history_stop, @@ -2366,7 +2366,7 @@ static void ext4_mb_seq_groups_stop(struct seq_file *seq, void *v) { } -static struct seq_operations ext4_mb_seq_groups_ops = { +static const struct seq_operations ext4_mb_seq_groups_ops = { .start = ext4_mb_seq_groups_start, .next = ext4_mb_seq_groups_next, .stop = ext4_mb_seq_groups_stop, diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index e378cb3..02b1092 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -768,7 +768,7 @@ static void jbd2_seq_history_stop(struct seq_file *seq, void *v) { } -static struct seq_operations jbd2_seq_history_ops = { +static const struct seq_operations jbd2_seq_history_ops = { .start = jbd2_seq_history_start, .next = jbd2_seq_history_next, .stop = jbd2_seq_history_stop, @@ -872,7 +872,7 @@ static void jbd2_seq_info_stop(struct seq_file *seq, void *v) { } -static struct seq_operations jbd2_seq_info_ops = { +static const struct seq_operations jbd2_seq_info_ops = { .start = jbd2_seq_info_start, .next = jbd2_seq_info_next, .stop = jbd2_seq_info_stop, diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 8d25ccb..238d850 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -1533,7 +1533,7 @@ static void *nfs_server_list_next(struct seq_file *p, void *v, loff_t *pos); static void nfs_server_list_stop(struct seq_file *p, void *v); static int nfs_server_list_show(struct seq_file *m, void *v); -static struct seq_operations nfs_server_list_ops = { +static const struct seq_operations nfs_server_list_ops = { .start = nfs_server_list_start, .next = nfs_server_list_next, .stop = nfs_server_list_stop, @@ -1554,7 +1554,7 @@ static void *nfs_volume_list_next(struct seq_file *p, void *v, loff_t *pos); static void nfs_volume_list_stop(struct seq_file *p, void *v); static int nfs_volume_list_show(struct seq_file *m, void *v); -static struct seq_operations nfs_volume_list_ops = { +static const struct seq_operations nfs_volume_list_ops = { .start = nfs_volume_list_start, .next = nfs_volume_list_next, .stop = nfs_volume_list_stop, diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index b92a276..a5e516b 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -1505,7 +1505,7 @@ static int e_show(struct seq_file *m, void *p) return svc_export_show(m, &svc_export_cache, cp); } -struct seq_operations nfs_exports_op = { +const struct seq_operations nfs_exports_op = { .start = e_start, .next = e_next, .stop = e_stop, diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c index f842487..cfb2be7 100644 --- a/fs/ocfs2/cluster/netdebug.c +++ b/fs/ocfs2/cluster/netdebug.c @@ -163,7 +163,7 @@ static void nst_seq_stop(struct seq_file *seq, void *v) { } -static struct seq_operations nst_seq_ops = { +static const struct seq_operations nst_seq_ops = { .start = nst_seq_start, .next = nst_seq_next, .stop = nst_seq_stop, @@ -344,7 +344,7 @@ static void sc_seq_stop(struct seq_file *seq, void *v) { } -static struct seq_operations sc_seq_ops = { +static const struct seq_operations sc_seq_ops = { .start = sc_seq_start, .next = sc_seq_next, .stop = sc_seq_stop, diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index df52f70..c5c8812 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c @@ -683,7 +683,7 @@ static int lockres_seq_show(struct seq_file *s, void *v) return 0; } -static struct seq_operations debug_lockres_ops = { +static const struct seq_operations debug_lockres_ops = { .start = lockres_seq_start, .stop = lockres_seq_stop, .next = lockres_seq_next, diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c index 7e14d1a..9fe7d7e 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c @@ -109,7 +109,7 @@ static void *nommu_region_list_next(struct seq_file *m, void *v, loff_t *pos) return rb_next((struct rb_node *) v); } -static struct seq_operations proc_nommu_region_list_seqop = { +static const struct seq_operations proc_nommu_region_list_seqop = { .start = nommu_region_list_start, .next = nommu_region_list_next, .stop = nommu_region_list_stop, diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index 2b49d67..99a0b07 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h @@ -57,7 +57,7 @@ extern u32 nfsd_supported_minorversion; extern struct mutex nfsd_mutex; extern struct svc_serv *nfsd_serv; -extern struct seq_operations nfs_exports_op; +extern const struct seq_operations nfs_exports_op; /* * Function prototypes. diff --git a/ipc/util.c b/ipc/util.c index b8e4ba9..79ce84e 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -942,7 +942,7 @@ static int sysvipc_proc_show(struct seq_file *s, void *it) return iface->show(s, it); } -static struct seq_operations sysvipc_proc_seqops = { +static const struct seq_operations sysvipc_proc_seqops = { .start = sysvipc_proc_start, .stop = sysvipc_proc_stop, .next = sysvipc_proc_next, diff --git a/kernel/cgroup.c b/kernel/cgroup.c index b6eadfe..f96c026 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2313,7 +2313,7 @@ static int cgroup_tasks_show(struct seq_file *s, void *v) return seq_printf(s, "%d\n", *(int *)v); } -static struct seq_operations cgroup_tasks_seq_operations = { +static const struct seq_operations cgroup_tasks_seq_operations = { .start = cgroup_tasks_start, .stop = cgroup_tasks_stop, .next = cgroup_tasks_next, diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 0540948..013736c 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -1329,7 +1329,7 @@ static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) return 0; } -static struct seq_operations kprobes_seq_ops = { +static const struct seq_operations kprobes_seq_ops = { .start = kprobe_seq_start, .next = kprobe_seq_next, .stop = kprobe_seq_stop, diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index e94caa6..0700c1d 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c @@ -670,7 +670,7 @@ static int ls_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations lockstat_ops = { +static const struct seq_operations lockstat_ops = { .start = ls_start, .next = ls_next, .stop = ls_stop, diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 1e1d23c..4b07920 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -1567,7 +1567,7 @@ static int t_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations show_ftrace_seq_ops = { +static const struct seq_operations show_ftrace_seq_ops = { .start = t_start, .next = t_next, .stop = t_stop, @@ -2560,7 +2560,7 @@ static int g_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ftrace_graph_seq_ops = { +static const struct seq_operations ftrace_graph_seq_ops = { .start = g_start, .next = g_next, .stop = g_stop, diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index c22b40f..2eb8ee0 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1885,7 +1885,7 @@ static int s_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations tracer_seq_ops = { +static const struct seq_operations tracer_seq_ops = { .start = s_start, .next = s_next, .stop = s_stop, @@ -2097,7 +2097,7 @@ static int t_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations show_traces_seq_ops = { +static const struct seq_operations show_traces_seq_ops = { .start = t_start, .next = t_next, .stop = t_stop, diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index c769f15..e17588b 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -204,7 +204,7 @@ static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations ip6mr_vif_seq_ops = { +static const struct seq_operations ip6mr_vif_seq_ops = { .start = ip6mr_vif_seq_start, .next = ip6mr_vif_seq_next, .stop = ip6mr_vif_seq_stop, @@ -328,7 +328,7 @@ static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations ipmr_mfc_seq_ops = { +static const struct seq_operations ipmr_mfc_seq_ops = { .start = ipmr_mfc_seq_start, .next = ipmr_mfc_seq_next, .stop = ipmr_mfc_seq_stop, diff --git a/net/key/af_key.c b/net/key/af_key.c index dba9abd..7b1e99b 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -3705,7 +3705,7 @@ static void pfkey_seq_stop(struct seq_file *f, void *v) read_unlock(&pfkey_table_lock); } -static struct seq_operations pfkey_seq_ops = { +static const struct seq_operations pfkey_seq_ops = { .start = pfkey_seq_start, .next = pfkey_seq_next, .stop = pfkey_seq_stop, diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c index 6bfc7ea..8e9777b 100644 --- a/security/integrity/ima/ima_fs.c +++ b/security/integrity/ima/ima_fs.c @@ -146,7 +146,7 @@ static int ima_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ima_measurments_seqops = { +static const struct seq_operations ima_measurments_seqops = { .start = ima_measurements_start, .next = ima_measurements_next, .stop = ima_measurements_stop, @@ -221,7 +221,7 @@ static int ima_ascii_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ima_ascii_measurements_seqops = { +static const struct seq_operations ima_ascii_measurements_seqops = { .start = ima_measurements_start, .next = ima_measurements_next, .stop = ima_measurements_stop, diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index f83a809..aeead75 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -187,7 +187,7 @@ static void load_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations load_seq_ops = { +static const struct seq_operations load_seq_ops = { .start = load_seq_start, .next = load_seq_next, .show = load_seq_show, @@ -503,7 +503,7 @@ static void cipso_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations cipso_seq_ops = { +static const struct seq_operations cipso_seq_ops = { .start = cipso_seq_start, .stop = cipso_seq_stop, .next = cipso_seq_next, @@ -697,7 +697,7 @@ static void netlbladdr_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations netlbladdr_seq_ops = { +static const struct seq_operations netlbladdr_seq_ops = { .start = netlbladdr_seq_start, .stop = netlbladdr_seq_stop, .next = netlbladdr_seq_next, -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH][RFC] security: constify seq_operations @ 2009-08-11 13:52 ` James Morris 0 siblings, 0 replies; 14+ messages in thread From: James Morris @ 2009-08-11 13:52 UTC (permalink / raw) To: Andrew Morton Cc: linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors I think it'd be a good idea to constify more of the various operations structs in the kernel -- our coverage of this is spotty. The patch below should provide coverage for all of the eligible seq_operations structs in the kernel. It's derived from the grsecurity patch (which I was reading and noticed how many of these we're missing). It's possible something's been missed, or that there are problems in code which I can't test. Please review/comment/test. If it looks ok, I suggest pushing this via -mm. Note that there are quite a few other similar ops to be constified, such as file_operations, so if anyone would like to pitch in, please do so. --- Subject: [PATCH 1/1] security: constify seq_operations Make all seq_operations structs const, to help mitigate against revectoring user-triggerable function pointers. This is derived from the grsecurity patch, although generated from scratch because it's simpler than extracting the changes from there. Signed-off-by: James Morris <jmorris@namei.org> --- arch/mn10300/kernel/setup.c | 2 +- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/platforms/pseries/hvCall_inst.c | 2 +- arch/x86/mm/pat.c | 2 +- drivers/block/cciss.c | 2 +- drivers/char/misc.c | 2 +- drivers/char/tpm/tpm_bios.c | 4 ++-- drivers/isdn/capi/kcapi_proc.c | 10 +++++----- drivers/scsi/sg.c | 6 +++--- drivers/staging/rtl8192su/ieee80211/proc.c | 2 +- fs/afs/proc.c | 8 ++++---- fs/dlm/debug_fs.c | 12 ++++++------ fs/ext4/mballoc.c | 4 ++-- fs/jbd2/journal.c | 4 ++-- fs/nfs/client.c | 4 ++-- fs/nfsd/export.c | 2 +- fs/ocfs2/cluster/netdebug.c | 4 ++-- fs/ocfs2/dlm/dlmdebug.c | 2 +- fs/proc/nommu.c | 2 +- include/linux/nfsd/nfsd.h | 2 +- ipc/util.c | 2 +- kernel/cgroup.c | 2 +- kernel/kprobes.c | 2 +- kernel/lockdep_proc.c | 2 +- kernel/trace/ftrace.c | 4 ++-- kernel/trace/trace.c | 4 ++-- net/ipv6/ip6mr.c | 4 ++-- net/key/af_key.c | 2 +- security/integrity/ima/ima_fs.c | 4 ++-- security/smack/smackfs.c | 6 +++--- 30 files changed, 55 insertions(+), 55 deletions(-) diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c index 79890ed..3f24c29 100644 --- a/arch/mn10300/kernel/setup.c +++ b/arch/mn10300/kernel/setup.c @@ -285,7 +285,7 @@ static void c_stop(struct seq_file *m, void *v) { } -struct seq_operations cpuinfo_op = { +const struct seq_operations cpuinfo_op = { .start = c_start, .next = c_next, .stop = c_stop, diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 02fed27..1d5570a 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -328,7 +328,7 @@ static void c_stop(struct seq_file *m, void *v) { } -struct seq_operations cpuinfo_op = { +const struct seq_operations cpuinfo_op = { .start =c_start, .next = c_next, .stop = c_stop, diff --git a/arch/powerpc/platforms/pseries/hvCall_inst.c b/arch/powerpc/platforms/pseries/hvCall_inst.c index eae51ef..3631a4f 100644 --- a/arch/powerpc/platforms/pseries/hvCall_inst.c +++ b/arch/powerpc/platforms/pseries/hvCall_inst.c @@ -71,7 +71,7 @@ static int hc_show(struct seq_file *m, void *p) return 0; } -static struct seq_operations hcall_inst_seq_ops = { +static const struct seq_operations hcall_inst_seq_ops = { .start = hc_start, .next = hc_next, .stop = hc_stop, diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index e6718bb..e2900a3 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -826,7 +826,7 @@ static int memtype_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations memtype_seq_ops = { +static const struct seq_operations memtype_seq_ops = { .start = memtype_seq_start, .next = memtype_seq_next, .stop = memtype_seq_stop, diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index a52cc7f..7404f83 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -363,7 +363,7 @@ static void cciss_seq_stop(struct seq_file *seq, void *v) h->busy_configuring = 0; } -static struct seq_operations cciss_seq_ops = { +static const struct seq_operations cciss_seq_ops = { .start = cciss_seq_start, .show = cciss_seq_show, .next = cciss_seq_next, diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 62c99fa..9eaf8c4 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c @@ -91,7 +91,7 @@ static int misc_seq_show(struct seq_file *seq, void *v) } -static struct seq_operations misc_seq_ops = { +static const struct seq_operations misc_seq_ops = { .start = misc_seq_start, .next = misc_seq_next, .stop = misc_seq_stop, diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c index 0c2f55a..bf2170f 100644 --- a/drivers/char/tpm/tpm_bios.c +++ b/drivers/char/tpm/tpm_bios.c @@ -343,14 +343,14 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations tpm_ascii_b_measurments_seqops = { +static const struct seq_operations tpm_ascii_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, .show = tpm_ascii_bios_measurements_show, }; -static struct seq_operations tpm_binary_b_measurments_seqops = { +static const struct seq_operations tpm_binary_b_measurments_seqops = { .start = tpm_bios_measurements_start, .next = tpm_bios_measurements_next, .stop = tpm_bios_measurements_stop, diff --git a/drivers/isdn/capi/kcapi_proc.c b/drivers/isdn/capi/kcapi_proc.c index 50ed778..09d4db7 100644 --- a/drivers/isdn/capi/kcapi_proc.c +++ b/drivers/isdn/capi/kcapi_proc.c @@ -89,14 +89,14 @@ static int contrstats_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_controller_ops = { +static const struct seq_operations seq_controller_ops = { .start = controller_start, .next = controller_next, .stop = controller_stop, .show = controller_show, }; -static struct seq_operations seq_contrstats_ops = { +static const struct seq_operations seq_contrstats_ops = { .start = controller_start, .next = controller_next, .stop = controller_stop, @@ -194,14 +194,14 @@ applstats_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_applications_ops = { +static const struct seq_operations seq_applications_ops = { .start = applications_start, .next = applications_next, .stop = applications_stop, .show = applications_show, }; -static struct seq_operations seq_applstats_ops = { +static const struct seq_operations seq_applstats_ops = { .start = applications_start, .next = applications_next, .stop = applications_stop, @@ -264,7 +264,7 @@ static int capi_driver_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations seq_capi_driver_ops = { +static const struct seq_operations seq_capi_driver_ops = { .start = capi_driver_start, .next = capi_driver_next, .stop = capi_driver_stop, diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index 9230402..7eee714 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c @@ -2233,7 +2233,7 @@ static struct file_operations dev_fops = { .open = sg_proc_open_dev, .release = seq_release, }; -static struct seq_operations dev_seq_ops = { +static const struct seq_operations dev_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, @@ -2246,7 +2246,7 @@ static struct file_operations devstrs_fops = { .open = sg_proc_open_devstrs, .release = seq_release, }; -static struct seq_operations devstrs_seq_ops = { +static const struct seq_operations devstrs_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, @@ -2259,7 +2259,7 @@ static struct file_operations debug_fops = { .open = sg_proc_open_debug, .release = seq_release, }; -static struct seq_operations debug_seq_ops = { +static const struct seq_operations debug_seq_ops = { .start = dev_seq_start, .next = dev_seq_next, .stop = dev_seq_stop, diff --git a/drivers/staging/rtl8192su/ieee80211/proc.c b/drivers/staging/rtl8192su/ieee80211/proc.c index 4f3f9ed..df96ad5 100644 --- a/drivers/staging/rtl8192su/ieee80211/proc.c +++ b/drivers/staging/rtl8192su/ieee80211/proc.c @@ -87,7 +87,7 @@ static int c_show(struct seq_file *m, void *p) return 0; } -static struct seq_operations crypto_seq_ops = { +static const struct seq_operations crypto_seq_ops = { .start = c_start, .next = c_next, .stop = c_stop, diff --git a/fs/afs/proc.c b/fs/afs/proc.c index 8630615..852739d 100644 --- a/fs/afs/proc.c +++ b/fs/afs/proc.c @@ -28,7 +28,7 @@ static int afs_proc_cells_show(struct seq_file *m, void *v); static ssize_t afs_proc_cells_write(struct file *file, const char __user *buf, size_t size, loff_t *_pos); -static struct seq_operations afs_proc_cells_ops = { +static const struct seq_operations afs_proc_cells_ops = { .start = afs_proc_cells_start, .next = afs_proc_cells_next, .stop = afs_proc_cells_stop, @@ -70,7 +70,7 @@ static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, static void afs_proc_cell_volumes_stop(struct seq_file *p, void *v); static int afs_proc_cell_volumes_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_volumes_ops = { +static const struct seq_operations afs_proc_cell_volumes_ops = { .start = afs_proc_cell_volumes_start, .next = afs_proc_cell_volumes_next, .stop = afs_proc_cell_volumes_stop, @@ -95,7 +95,7 @@ static void *afs_proc_cell_vlservers_next(struct seq_file *p, void *v, static void afs_proc_cell_vlservers_stop(struct seq_file *p, void *v); static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_vlservers_ops = { +static const struct seq_operations afs_proc_cell_vlservers_ops = { .start = afs_proc_cell_vlservers_start, .next = afs_proc_cell_vlservers_next, .stop = afs_proc_cell_vlservers_stop, @@ -119,7 +119,7 @@ static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, static void afs_proc_cell_servers_stop(struct seq_file *p, void *v); static int afs_proc_cell_servers_show(struct seq_file *m, void *v); -static struct seq_operations afs_proc_cell_servers_ops = { +static const struct seq_operations afs_proc_cell_servers_ops = { .start = afs_proc_cell_servers_start, .next = afs_proc_cell_servers_next, .stop = afs_proc_cell_servers_stop, diff --git a/fs/dlm/debug_fs.c b/fs/dlm/debug_fs.c index 1d1d274..1c8bb8c 100644 --- a/fs/dlm/debug_fs.c +++ b/fs/dlm/debug_fs.c @@ -386,9 +386,9 @@ static int table_seq_show(struct seq_file *seq, void *iter_ptr) return rv; } -static struct seq_operations format1_seq_ops; -static struct seq_operations format2_seq_ops; -static struct seq_operations format3_seq_ops; +static const struct seq_operations format1_seq_ops; +static const struct seq_operations format2_seq_ops; +static const struct seq_operations format3_seq_ops; static void *table_seq_start(struct seq_file *seq, loff_t *pos) { @@ -534,21 +534,21 @@ static void table_seq_stop(struct seq_file *seq, void *iter_ptr) } } -static struct seq_operations format1_seq_ops = { +static const struct seq_operations format1_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, .show = table_seq_show, }; -static struct seq_operations format2_seq_ops = { +static const struct seq_operations format2_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, .show = table_seq_show, }; -static struct seq_operations format3_seq_ops = { +static const struct seq_operations format3_seq_ops = { .start = table_seq_start, .next = table_seq_next, .stop = table_seq_stop, diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index cd25846..a891a06 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c @@ -2205,7 +2205,7 @@ static void ext4_mb_seq_history_stop(struct seq_file *seq, void *v) { } -static struct seq_operations ext4_mb_seq_history_ops = { +static const struct seq_operations ext4_mb_seq_history_ops = { .start = ext4_mb_seq_history_start, .next = ext4_mb_seq_history_next, .stop = ext4_mb_seq_history_stop, @@ -2366,7 +2366,7 @@ static void ext4_mb_seq_groups_stop(struct seq_file *seq, void *v) { } -static struct seq_operations ext4_mb_seq_groups_ops = { +static const struct seq_operations ext4_mb_seq_groups_ops = { .start = ext4_mb_seq_groups_start, .next = ext4_mb_seq_groups_next, .stop = ext4_mb_seq_groups_stop, diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c index e378cb3..02b1092 100644 --- a/fs/jbd2/journal.c +++ b/fs/jbd2/journal.c @@ -768,7 +768,7 @@ static void jbd2_seq_history_stop(struct seq_file *seq, void *v) { } -static struct seq_operations jbd2_seq_history_ops = { +static const struct seq_operations jbd2_seq_history_ops = { .start = jbd2_seq_history_start, .next = jbd2_seq_history_next, .stop = jbd2_seq_history_stop, @@ -872,7 +872,7 @@ static void jbd2_seq_info_stop(struct seq_file *seq, void *v) { } -static struct seq_operations jbd2_seq_info_ops = { +static const struct seq_operations jbd2_seq_info_ops = { .start = jbd2_seq_info_start, .next = jbd2_seq_info_next, .stop = jbd2_seq_info_stop, diff --git a/fs/nfs/client.c b/fs/nfs/client.c index 8d25ccb..238d850 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c @@ -1533,7 +1533,7 @@ static void *nfs_server_list_next(struct seq_file *p, void *v, loff_t *pos); static void nfs_server_list_stop(struct seq_file *p, void *v); static int nfs_server_list_show(struct seq_file *m, void *v); -static struct seq_operations nfs_server_list_ops = { +static const struct seq_operations nfs_server_list_ops = { .start = nfs_server_list_start, .next = nfs_server_list_next, .stop = nfs_server_list_stop, @@ -1554,7 +1554,7 @@ static void *nfs_volume_list_next(struct seq_file *p, void *v, loff_t *pos); static void nfs_volume_list_stop(struct seq_file *p, void *v); static int nfs_volume_list_show(struct seq_file *m, void *v); -static struct seq_operations nfs_volume_list_ops = { +static const struct seq_operations nfs_volume_list_ops = { .start = nfs_volume_list_start, .next = nfs_volume_list_next, .stop = nfs_volume_list_stop, diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index b92a276..a5e516b 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c @@ -1505,7 +1505,7 @@ static int e_show(struct seq_file *m, void *p) return svc_export_show(m, &svc_export_cache, cp); } -struct seq_operations nfs_exports_op = { +const struct seq_operations nfs_exports_op = { .start = e_start, .next = e_next, .stop = e_stop, diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c index f842487..cfb2be7 100644 --- a/fs/ocfs2/cluster/netdebug.c +++ b/fs/ocfs2/cluster/netdebug.c @@ -163,7 +163,7 @@ static void nst_seq_stop(struct seq_file *seq, void *v) { } -static struct seq_operations nst_seq_ops = { +static const struct seq_operations nst_seq_ops = { .start = nst_seq_start, .next = nst_seq_next, .stop = nst_seq_stop, @@ -344,7 +344,7 @@ static void sc_seq_stop(struct seq_file *seq, void *v) { } -static struct seq_operations sc_seq_ops = { +static const struct seq_operations sc_seq_ops = { .start = sc_seq_start, .next = sc_seq_next, .stop = sc_seq_stop, diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c index df52f70..c5c8812 100644 --- a/fs/ocfs2/dlm/dlmdebug.c +++ b/fs/ocfs2/dlm/dlmdebug.c @@ -683,7 +683,7 @@ static int lockres_seq_show(struct seq_file *s, void *v) return 0; } -static struct seq_operations debug_lockres_ops = { +static const struct seq_operations debug_lockres_ops = { .start = lockres_seq_start, .stop = lockres_seq_stop, .next = lockres_seq_next, diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c index 7e14d1a..9fe7d7e 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c @@ -109,7 +109,7 @@ static void *nommu_region_list_next(struct seq_file *m, void *v, loff_t *pos) return rb_next((struct rb_node *) v); } -static struct seq_operations proc_nommu_region_list_seqop = { +static const struct seq_operations proc_nommu_region_list_seqop = { .start = nommu_region_list_start, .next = nommu_region_list_next, .stop = nommu_region_list_stop, diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h index 2b49d67..99a0b07 100644 --- a/include/linux/nfsd/nfsd.h +++ b/include/linux/nfsd/nfsd.h @@ -57,7 +57,7 @@ extern u32 nfsd_supported_minorversion; extern struct mutex nfsd_mutex; extern struct svc_serv *nfsd_serv; -extern struct seq_operations nfs_exports_op; +extern const struct seq_operations nfs_exports_op; /* * Function prototypes. diff --git a/ipc/util.c b/ipc/util.c index b8e4ba9..79ce84e 100644 --- a/ipc/util.c +++ b/ipc/util.c @@ -942,7 +942,7 @@ static int sysvipc_proc_show(struct seq_file *s, void *it) return iface->show(s, it); } -static struct seq_operations sysvipc_proc_seqops = { +static const struct seq_operations sysvipc_proc_seqops = { .start = sysvipc_proc_start, .stop = sysvipc_proc_stop, .next = sysvipc_proc_next, diff --git a/kernel/cgroup.c b/kernel/cgroup.c index b6eadfe..f96c026 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -2313,7 +2313,7 @@ static int cgroup_tasks_show(struct seq_file *s, void *v) return seq_printf(s, "%d\n", *(int *)v); } -static struct seq_operations cgroup_tasks_seq_operations = { +static const struct seq_operations cgroup_tasks_seq_operations = { .start = cgroup_tasks_start, .stop = cgroup_tasks_stop, .next = cgroup_tasks_next, diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 0540948..013736c 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -1329,7 +1329,7 @@ static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) return 0; } -static struct seq_operations kprobes_seq_ops = { +static const struct seq_operations kprobes_seq_ops = { .start = kprobe_seq_start, .next = kprobe_seq_next, .stop = kprobe_seq_stop, diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c index e94caa6..0700c1d 100644 --- a/kernel/lockdep_proc.c +++ b/kernel/lockdep_proc.c @@ -670,7 +670,7 @@ static int ls_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations lockstat_ops = { +static const struct seq_operations lockstat_ops = { .start = ls_start, .next = ls_next, .stop = ls_stop, diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 1e1d23c..4b07920 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -1567,7 +1567,7 @@ static int t_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations show_ftrace_seq_ops = { +static const struct seq_operations show_ftrace_seq_ops = { .start = t_start, .next = t_next, .stop = t_stop, @@ -2560,7 +2560,7 @@ static int g_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ftrace_graph_seq_ops = { +static const struct seq_operations ftrace_graph_seq_ops = { .start = g_start, .next = g_next, .stop = g_stop, diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index c22b40f..2eb8ee0 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -1885,7 +1885,7 @@ static int s_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations tracer_seq_ops = { +static const struct seq_operations tracer_seq_ops = { .start = s_start, .next = s_next, .stop = s_stop, @@ -2097,7 +2097,7 @@ static int t_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations show_traces_seq_ops = { +static const struct seq_operations show_traces_seq_ops = { .start = t_start, .next = t_next, .stop = t_stop, diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index c769f15..e17588b 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -204,7 +204,7 @@ static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations ip6mr_vif_seq_ops = { +static const struct seq_operations ip6mr_vif_seq_ops = { .start = ip6mr_vif_seq_start, .next = ip6mr_vif_seq_next, .stop = ip6mr_vif_seq_stop, @@ -328,7 +328,7 @@ static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) return 0; } -static struct seq_operations ipmr_mfc_seq_ops = { +static const struct seq_operations ipmr_mfc_seq_ops = { .start = ipmr_mfc_seq_start, .next = ipmr_mfc_seq_next, .stop = ipmr_mfc_seq_stop, diff --git a/net/key/af_key.c b/net/key/af_key.c index dba9abd..7b1e99b 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -3705,7 +3705,7 @@ static void pfkey_seq_stop(struct seq_file *f, void *v) read_unlock(&pfkey_table_lock); } -static struct seq_operations pfkey_seq_ops = { +static const struct seq_operations pfkey_seq_ops = { .start = pfkey_seq_start, .next = pfkey_seq_next, .stop = pfkey_seq_stop, diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c index 6bfc7ea..8e9777b 100644 --- a/security/integrity/ima/ima_fs.c +++ b/security/integrity/ima/ima_fs.c @@ -146,7 +146,7 @@ static int ima_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ima_measurments_seqops = { +static const struct seq_operations ima_measurments_seqops = { .start = ima_measurements_start, .next = ima_measurements_next, .stop = ima_measurements_stop, @@ -221,7 +221,7 @@ static int ima_ascii_measurements_show(struct seq_file *m, void *v) return 0; } -static struct seq_operations ima_ascii_measurements_seqops = { +static const struct seq_operations ima_ascii_measurements_seqops = { .start = ima_measurements_start, .next = ima_measurements_next, .stop = ima_measurements_stop, diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index f83a809..aeead75 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c @@ -187,7 +187,7 @@ static void load_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations load_seq_ops = { +static const struct seq_operations load_seq_ops = { .start = load_seq_start, .next = load_seq_next, .show = load_seq_show, @@ -503,7 +503,7 @@ static void cipso_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations cipso_seq_ops = { +static const struct seq_operations cipso_seq_ops = { .start = cipso_seq_start, .stop = cipso_seq_stop, .next = cipso_seq_next, @@ -697,7 +697,7 @@ static void netlbladdr_seq_stop(struct seq_file *s, void *v) /* No-op */ } -static struct seq_operations netlbladdr_seq_ops = { +static const struct seq_operations netlbladdr_seq_ops = { .start = netlbladdr_seq_start, .stop = netlbladdr_seq_stop, .next = netlbladdr_seq_next, -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 13:52 ` James Morris @ 2009-08-11 14:36 ` Serge E. Hallyn -1 siblings, 0 replies; 14+ messages in thread From: Serge E. Hallyn @ 2009-08-11 14:36 UTC (permalink / raw) To: James Morris Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors Quoting James Morris (jmorris@namei.org): > I think it'd be a good idea to constify more of the various operations > structs in the kernel -- our coverage of this is spotty. > > The patch below should provide coverage for all of the eligible > seq_operations structs in the kernel. It's derived from the grsecurity > patch (which I was reading and noticed how many of these we're missing). > > It's possible something's been missed, or that there are problems in code > which I can't test. Please review/comment/test. > > If it looks ok, I suggest pushing this via -mm. > > Note that there are quite a few other similar ops to be constified, such > as file_operations, so if anyone would like to pitch in, please do so. > > --- > > Subject: [PATCH 1/1] security: constify seq_operations > > Make all seq_operations structs const, to help mitigate > against revectoring user-triggerable function pointers. > > This is derived from the grsecurity patch, although generated > from scratch because it's simpler than extracting the changes > from there. > > Signed-off-by: James Morris <jmorris@namei.org> I think it's a good idea. I suppose we could add a script to check for any new seq_ops structs not constified... something as simple as find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep -v const Though what you have here hits all of those and more. Acked-by: Serge Hallyn <serue@us.ibm.com> thanks, -serge ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-11 14:36 ` Serge E. Hallyn 0 siblings, 0 replies; 14+ messages in thread From: Serge E. Hallyn @ 2009-08-11 14:36 UTC (permalink / raw) To: James Morris Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors Quoting James Morris (jmorris@namei.org): > I think it'd be a good idea to constify more of the various operations > structs in the kernel -- our coverage of this is spotty. > > The patch below should provide coverage for all of the eligible > seq_operations structs in the kernel. It's derived from the grsecurity > patch (which I was reading and noticed how many of these we're missing). > > It's possible something's been missed, or that there are problems in code > which I can't test. Please review/comment/test. > > If it looks ok, I suggest pushing this via -mm. > > Note that there are quite a few other similar ops to be constified, such > as file_operations, so if anyone would like to pitch in, please do so. > > --- > > Subject: [PATCH 1/1] security: constify seq_operations > > Make all seq_operations structs const, to help mitigate > against revectoring user-triggerable function pointers. > > This is derived from the grsecurity patch, although generated > from scratch because it's simpler than extracting the changes > from there. > > Signed-off-by: James Morris <jmorris@namei.org> I think it's a good idea. I suppose we could add a script to check for any new seq_ops structs not constified... something as simple as find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep -v const Though what you have here hits all of those and more. Acked-by: Serge Hallyn <serue@us.ibm.com> thanks, -serge ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 14:36 ` Serge E. Hallyn @ 2009-08-11 15:32 ` James Morris -1 siblings, 0 replies; 14+ messages in thread From: James Morris @ 2009-08-11 15:32 UTC (permalink / raw) To: Serge E. Hallyn Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors On Tue, 11 Aug 2009, Serge E. Hallyn wrote: > seq_ops structs not constified... something as simple as > find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep -v const > Though what you have here hits all of those and more. There might be some docs to update to get people to think about it. > Acked-by: Serge Hallyn <serue@us.ibm.com> Christoph kind of acked it off-list, but wasn't sure about the security: tag. I suppose it could be seq_file: ? -- James Morris <jmorris@namei.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-11 15:32 ` James Morris 0 siblings, 0 replies; 14+ messages in thread From: James Morris @ 2009-08-11 15:32 UTC (permalink / raw) To: Serge E. Hallyn Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors On Tue, 11 Aug 2009, Serge E. Hallyn wrote: > seq_ops structs not constified... something as simple as > find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep -v const > Though what you have here hits all of those and more. There might be some docs to update to get people to think about it. > Acked-by: Serge Hallyn <serue@us.ibm.com> Christoph kind of acked it off-list, but wasn't sure about the security: tag. I suppose it could be seq_file: ? -- James Morris <jmorris@namei.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 15:32 ` James Morris @ 2009-08-11 19:47 ` Julia Lawall -1 siblings, 0 replies; 14+ messages in thread From: Julia Lawall @ 2009-08-11 19:47 UTC (permalink / raw) To: James Morris Cc: Serge E. Hallyn, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors A while ago I made a semantic patch to introduce const on file_operations and and input_device_id types. I tested it on 142 files in which the change had already been made and got the same result in each case. I have run it on linux-next and obtained the attached result. However, I have not checked any of these results, so this is not meant as a submitted patch, but as a starting point for someone who wants to look further into the problem. julia ------------------- semantic patch (http://coccinelle.lip6.fr) @ rule1 @ struct file_operations x; identifier fld; expression E; @@ x.fld = E @ rule2 depends on !rule1 disable optional_qualifier @ @@ + const struct file_operations @ rule3 @ struct input_device_id x; identifier fld; expression E; @@ x.fld = E @ rule4 depends on !rule3 disable optional_qualifier @ @@ + const struct input_device_id // The following rules are not super nice, because we are cleaning up bad // things we have made ourselves. And the first one is a problem because // in general there can be any number of stars. This is indeed part of why // we can't just enumerate the positive possibilities. @@ expression E; @@ ( (const struct file_operations *) NULL | ( - const struct file_operations *) E | sizeof ( - const struct file_operations) ) @@ @@ - const struct file_operations; @@ expression E; @@ ( (const struct input_device_id *) NULL | ( - const struct input_device_id *) E | sizeof ( - const struct input_device_id) ) @@ @@ - const struct input_device_id; ------------------- the generated patch, based on linux-next, b142f4b663cbd2d359eb9e7733e7136f8205434d diff -u -p a/arch/arm/mach-ns9xxx/clock.c b/arch/arm/mach-ns9xxx/clock.c --- a/arch/arm/mach-ns9xxx/clock.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/arm/mach-ns9xxx/clock.c 2009-08-11 22:41:55.000000000 +0200 @@ -195,7 +195,7 @@ static int clk_debugfs_open(struct inode return single_open(file, clk_debugfs_show, NULL); } -static struct file_operations clk_debugfs_operations = { +static const struct file_operations clk_debugfs_operations = { .open = clk_debugfs_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/arch/blackfin/mach-bf561/coreb.c b/arch/blackfin/mach-bf561/coreb.c --- a/arch/blackfin/mach-bf561/coreb.c 2009-06-15 17:50:04.000000000 +0200 +++ b/arch/blackfin/mach-bf561/coreb.c 2009-08-11 22:42:01.000000000 +0200 @@ -48,7 +48,7 @@ coreb_ioctl(struct inode *inode, struct return ret; } -static struct file_operations coreb_fops = { +static const struct file_operations coreb_fops = { .owner = THIS_MODULE, .ioctl = coreb_ioctl, }; diff -u -p a/arch/cris/arch-v10/drivers/sync_serial.c b/arch/cris/arch-v10/drivers/sync_serial.c --- a/arch/cris/arch-v10/drivers/sync_serial.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/cris/arch-v10/drivers/sync_serial.c 2009-08-11 22:41:50.000000000 +0200 @@ -244,7 +244,7 @@ static unsigned sync_serial_prescale_sha #define NUMBER_OF_PORTS 2 -static struct file_operations sync_serial_fops = { +static const struct file_operations sync_serial_fops = { .owner = THIS_MODULE, .write = sync_serial_write, .read = sync_serial_read, diff -u -p a/arch/cris/arch-v32/drivers/mach-fs/gpio.c b/arch/cris/arch-v32/drivers/mach-fs/gpio.c --- a/arch/cris/arch-v32/drivers/mach-fs/gpio.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/cris/arch-v32/drivers/mach-fs/gpio.c 2009-08-11 22:41:51.000000000 +0200 @@ -855,7 +855,7 @@ gpio_leds_ioctl(unsigned int cmd, unsign return 0; } -struct file_operations gpio_fops = { +const struct file_operations gpio_fops = { .owner = THIS_MODULE, .poll = gpio_poll, .ioctl = gpio_ioctl, diff -u -p a/arch/powerpc/kvm/timing.c b/arch/powerpc/kvm/timing.c --- a/arch/powerpc/kvm/timing.c 2009-01-06 15:34:28.000000000 +0100 +++ b/arch/powerpc/kvm/timing.c 2009-08-11 22:41:42.000000000 +0200 @@ -201,7 +201,7 @@ static int kvmppc_exit_timing_open(struc return single_open(file, kvmppc_exit_timing_show, inode->i_private); } -static struct file_operations kvmppc_exit_timing_fops = { +static const struct file_operations kvmppc_exit_timing_fops = { .owner = THIS_MODULE, .open = kvmppc_exit_timing_open, .read = seq_read, diff -u -p a/arch/powerpc/platforms/pseries/dtl.c b/arch/powerpc/platforms/pseries/dtl.c --- a/arch/powerpc/platforms/pseries/dtl.c 2009-04-23 17:28:18.000000000 +0200 +++ b/arch/powerpc/platforms/pseries/dtl.c 2009-08-11 22:41:43.000000000 +0200 @@ -209,7 +209,7 @@ static ssize_t dtl_file_read(struct file return n_read * sizeof(struct dtl_entry); } -static struct file_operations dtl_fops = { +static const struct file_operations dtl_fops = { .open = dtl_file_open, .release = dtl_file_release, .read = dtl_file_read, diff -u -p a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c --- a/arch/x86/kernel/cpu/mcheck/mce.c 2009-08-11 22:10:21.000000000 +0200 +++ b/arch/x86/kernel/cpu/mcheck/mce.c 2009-08-11 22:41:57.000000000 +0200 @@ -1531,7 +1531,7 @@ static long mce_ioctl(struct file *f, un } /* Modified in mce-inject.c, so not static or const */ -struct file_operations mce_chrdev_ops = { +const struct file_operations mce_chrdev_ops = { .open = mce_open, .release = mce_release, .read = mce_read, diff -u -p a/arch/x86/xen/debugfs.c b/arch/x86/xen/debugfs.c --- a/arch/x86/xen/debugfs.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/x86/xen/debugfs.c 2009-08-11 22:41:59.000000000 +0200 @@ -100,7 +100,7 @@ static int xen_array_release(struct inod return 0; } -static struct file_operations u32_array_fops = { +static const struct file_operations u32_array_fops = { .owner = THIS_MODULE, .open = u32_array_open, .release= xen_array_release, diff -u -p a/drivers/acpi/battery.c b/drivers/acpi/battery.c --- a/drivers/acpi/battery.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/acpi/battery.c 2009-08-11 22:41:41.000000000 +0200 @@ -743,7 +743,7 @@ DECLARE_FILE_FUNCTIONS(alarm); } static struct battery_file { - struct file_operations ops; + const struct file_operations ops; mode_t mode; const char *name; } acpi_battery_file[] = { diff -u -p a/drivers/acpi/video.c b/drivers/acpi/video.c --- a/drivers/acpi/video.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/acpi/video.c 2009-08-11 22:41:43.000000000 +0200 @@ -285,7 +285,7 @@ static int acpi_video_device_brightness_ struct file *file); static ssize_t acpi_video_device_write_brightness(struct file *file, const char __user *buffer, size_t count, loff_t *data); -static struct file_operations acpi_video_device_brightness_fops = { +static const struct file_operations acpi_video_device_brightness_fops = { .owner = THIS_MODULE, .open = acpi_video_device_brightness_open_fs, .read = seq_read, diff -u -p a/drivers/block/cciss.c b/drivers/block/cciss.c --- a/drivers/block/cciss.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/cciss.c 2009-08-11 22:41:54.000000000 +0200 @@ -432,7 +432,7 @@ out: return err; } -static struct file_operations cciss_proc_fops = { +static const struct file_operations cciss_proc_fops = { .owner = THIS_MODULE, .open = cciss_seq_open, .read = seq_read, diff -u -p a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h --- a/drivers/block/drbd/drbd_int.h 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/drbd/drbd_int.h 2009-08-11 22:41:59.000000000 +0200 @@ -1485,7 +1485,7 @@ void drbd_bump_write_ordering(struct drb /* drbd_proc.c */ extern struct proc_dir_entry *drbd_proc; -extern struct file_operations drbd_proc_fops; +extern const struct file_operations drbd_proc_fops; extern const char *drbd_conn_str(enum drbd_conns s); extern const char *drbd_role_str(enum drbd_role s); diff -u -p a/drivers/block/drbd/drbd_proc.c b/drivers/block/drbd/drbd_proc.c --- a/drivers/block/drbd/drbd_proc.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/drbd/drbd_proc.c 2009-08-11 22:42:00.000000000 +0200 @@ -39,7 +39,7 @@ static int drbd_proc_open(struct inode * struct proc_dir_entry *drbd_proc; -struct file_operations drbd_proc_fops = { +const struct file_operations drbd_proc_fops = { .owner = THIS_MODULE, .open = drbd_proc_open, .read = seq_read, diff -u -p a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c --- a/drivers/char/apm-emulation.c 2008-12-07 19:29:06.000000000 +0100 +++ b/drivers/char/apm-emulation.c 2009-08-11 22:41:42.000000000 +0200 @@ -393,7 +393,7 @@ static int apm_open(struct inode * inode return as ? 0 : -ENOMEM; } -static struct file_operations apm_bios_fops = { +static const struct file_operations apm_bios_fops = { .owner = THIS_MODULE, .read = apm_read, .poll = apm_poll, diff -u -p a/drivers/char/bfin-otp.c b/drivers/char/bfin-otp.c --- a/drivers/char/bfin-otp.c 2008-12-07 19:29:06.000000000 +0100 +++ b/drivers/char/bfin-otp.c 2009-08-11 22:42:07.000000000 +0200 @@ -133,7 +133,7 @@ static ssize_t bfin_otp_write(struct fil # define bfin_otp_write NULL #endif -static struct file_operations bfin_otp_fops = { +static const struct file_operations bfin_otp_fops = { .owner = THIS_MODULE, .read = bfin_otp_read, .write = bfin_otp_write, diff -u -p a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/char/tty_io.c 2009-08-11 22:41:53.000000000 +0200 @@ -3041,7 +3041,7 @@ struct tty_struct *get_current_tty(void) } EXPORT_SYMBOL_GPL(get_current_tty); -void tty_default_fops(struct file_operations *fops) +void tty_default_fops(const struct file_operations *fops) { *fops = tty_fops; } diff -u -p a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c 2008-12-19 10:51:57.000000000 +0100 +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c 2009-08-11 22:42:07.000000000 +0200 @@ -559,7 +559,7 @@ static int hwicap_release(struct inode * return status; } -static struct file_operations hwicap_fops = { +static const struct file_operations hwicap_fops = { .owner = THIS_MODULE, .write = hwicap_write, .read = hwicap_read, diff -u -p a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c --- a/drivers/gpio/gpiolib.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/gpio/gpiolib.c 2009-08-11 22:42:03.000000000 +0200 @@ -1244,7 +1244,7 @@ static int gpiolib_open(struct inode *in return single_open(file, gpiolib_show, NULL); } -static struct file_operations gpiolib_operations = { +static const struct file_operations gpiolib_operations = { .open = gpiolib_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c --- a/drivers/hwmon/fschmd.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/hwmon/fschmd.c 2009-08-11 22:42:06.000000000 +0200 @@ -915,7 +915,7 @@ static int watchdog_ioctl(struct inode * return ret; } -static struct file_operations watchdog_fops = { +static const struct file_operations watchdog_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .open = watchdog_open, diff -u -p a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c --- a/drivers/lguest/lguest_user.c 2009-08-01 12:06:12.000000000 +0200 +++ b/drivers/lguest/lguest_user.c 2009-08-11 22:41:42.000000000 +0200 @@ -508,7 +508,7 @@ static int close(struct inode *inode, st * uses: reading and writing a character device called /dev/lguest. All the * work happens in the read(), write() and close() routines: */ -static struct file_operations lguest_fops = { +static const struct file_operations lguest_fops = { .owner = THIS_MODULE, .release = close, .write = write, diff -u -p a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c --- a/drivers/media/dvb/dvb-core/dmxdev.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/media/dvb/dvb-core/dmxdev.c 2009-08-11 22:42:24.000000000 +0200 @@ -1203,7 +1203,7 @@ static unsigned int dvb_dvr_poll(struct return mask; } -static struct file_operations dvb_dvr_fops = { +static const struct file_operations dvb_dvr_fops = { .owner = THIS_MODULE, .read = dvb_dvr_read, .write = dvb_dvr_write, diff -u -p a/drivers/media/dvb/firewire/firedtv-ci.c b/drivers/media/dvb/firewire/firedtv-ci.c --- a/drivers/media/dvb/firewire/firedtv-ci.c 2009-03-02 11:33:15.000000000 +0100 +++ b/drivers/media/dvb/firewire/firedtv-ci.c 2009-08-11 22:42:21.000000000 +0200 @@ -215,7 +215,7 @@ static unsigned int fdtv_ca_io_poll(stru return POLLIN; } -static struct file_operations fdtv_ca_fops = { +static const struct file_operations fdtv_ca_fops = { .owner = THIS_MODULE, .ioctl = dvb_generic_ioctl, .open = dvb_generic_open, diff -u -p a/drivers/misc/phantom.c b/drivers/misc/phantom.c --- a/drivers/misc/phantom.c 2009-01-09 22:41:02.000000000 +0100 +++ b/drivers/misc/phantom.c 2009-08-11 22:41:49.000000000 +0200 @@ -271,7 +271,7 @@ static unsigned int phantom_poll(struct return mask; } -static struct file_operations phantom_file_ops = { +static const struct file_operations phantom_file_ops = { .open = phantom_open, .release = phantom_release, .unlocked_ioctl = phantom_ioctl, diff -u -p a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c --- a/drivers/misc/sgi-gru/grufile.c 2009-07-18 21:09:26.000000000 +0200 +++ b/drivers/misc/sgi-gru/grufile.c 2009-08-11 22:41:49.000000000 +0200 @@ -53,7 +53,7 @@ struct gru_stats_s gru_stats; /* Guaranteed user available resources on each node */ static int max_user_cbrs, max_user_dsr_bytes; -static struct file_operations gru_fops; +static const struct file_operations gru_fops; static struct miscdevice gru_miscdev; @@ -426,7 +426,7 @@ static void __exit gru_exit(void) gru_proc_exit(); } -static struct file_operations gru_fops = { +static const struct file_operations gru_fops = { .owner = THIS_MODULE, .unlocked_ioctl = gru_file_unlocked_ioctl, .mmap = gru_file_mmap, diff -u -p a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c --- a/drivers/mmc/core/debugfs.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/mmc/core/debugfs.c 2009-08-11 22:41:42.000000000 +0200 @@ -240,7 +240,7 @@ static int mmc_ext_csd_release(struct in return 0; } -static struct file_operations mmc_dbg_ext_csd_fops = { +static const struct file_operations mmc_dbg_ext_csd_fops = { .open = mmc_ext_csd_open, .read = mmc_ext_csd_read, .release = mmc_ext_csd_release, diff -u -p a/drivers/net/wireless/b43/debugfs.c b/drivers/net/wireless/b43/debugfs.c --- a/drivers/net/wireless/b43/debugfs.c 2009-03-28 23:34:54.000000000 +0100 +++ b/drivers/net/wireless/b43/debugfs.c 2009-08-11 22:41:55.000000000 +0200 @@ -43,7 +43,7 @@ static struct dentry *rootdir; struct b43_debugfs_fops { ssize_t (*read)(struct b43_wldev *dev, char *buf, size_t bufsize); int (*write)(struct b43_wldev *dev, const char *buf, size_t count); - struct file_operations fops; + const struct file_operations fops; /* Offset of struct b43_dfs_file in struct b43_dfsentry */ size_t file_struct_offset; /* Take wl->irq_lock before calling read/write? */ diff -u -p a/drivers/net/wireless/b43legacy/debugfs.c b/drivers/net/wireless/b43legacy/debugfs.c --- a/drivers/net/wireless/b43legacy/debugfs.c 2009-01-03 11:31:03.000000000 +0100 +++ b/drivers/net/wireless/b43legacy/debugfs.c 2009-08-11 22:42:05.000000000 +0200 @@ -44,7 +44,7 @@ static struct dentry *rootdir; struct b43legacy_debugfs_fops { ssize_t (*read)(struct b43legacy_wldev *dev, char *buf, size_t bufsize); int (*write)(struct b43legacy_wldev *dev, const char *buf, size_t count); - struct file_operations fops; + const struct file_operations fops; /* Offset of struct b43legacy_dfs_file in struct b43legacy_dfsentry */ size_t file_struct_offset; /* Take wl->irq_lock before calling read/write? */ diff -u -p a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c --- a/drivers/net/wireless/libertas/debugfs.c 2009-06-24 21:18:49.000000000 +0200 +++ b/drivers/net/wireless/libertas/debugfs.c 2009-08-11 22:41:57.000000000 +0200 @@ -682,7 +682,7 @@ out_unlock: struct lbs_debugfs_files { const char *name; int perm; - struct file_operations fops; + const struct file_operations fops; }; static const struct lbs_debugfs_files debugfs_files[] = { diff -u -p a/drivers/s390/cio/qdio_debug.c b/drivers/s390/cio/qdio_debug.c --- a/drivers/s390/cio/qdio_debug.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/s390/cio/qdio_debug.c 2009-08-11 22:42:26.000000000 +0200 @@ -125,7 +125,7 @@ static int qstat_seq_open(struct inode * filp->f_path.dentry->d_inode->i_private); } -static struct file_operations debugfs_fops = { +static const struct file_operations debugfs_fops = { .owner = THIS_MODULE, .open = qstat_seq_open, .read = seq_read, diff -u -p a/drivers/s390/cio/qdio_perf.c b/drivers/s390/cio/qdio_perf.c --- a/drivers/s390/cio/qdio_perf.c 2009-06-15 17:50:05.000000000 +0200 +++ b/drivers/s390/cio/qdio_perf.c 2009-08-11 22:42:26.000000000 +0200 @@ -84,7 +84,7 @@ static int qdio_perf_seq_open(struct ino return single_open(filp, qdio_perf_proc_show, NULL); } -static struct file_operations qdio_perf_proc_fops = { +static const struct file_operations qdio_perf_proc_fops = { .owner = THIS_MODULE, .open = qdio_perf_seq_open, .read = seq_read, diff -u -p a/drivers/spi/spidev.c b/drivers/spi/spidev.c --- a/drivers/spi/spidev.c 2009-07-04 21:27:34.000000000 +0200 +++ b/drivers/spi/spidev.c 2009-08-11 22:41:48.000000000 +0200 @@ -537,7 +537,7 @@ static int spidev_release(struct inode * return status; } -static struct file_operations spidev_fops = { +static const struct file_operations spidev_fops = { .owner = THIS_MODULE, /* REVISIT switch to aio primitives, so that userspace * gets more complete API coverage. It'll simplify things diff -u -p a/drivers/staging/b3dfg/b3dfg.c b/drivers/staging/b3dfg/b3dfg.c --- a/drivers/staging/b3dfg/b3dfg.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/b3dfg/b3dfg.c 2009-08-11 22:42:22.000000000 +0200 @@ -847,7 +847,7 @@ static int b3dfg_mmap(struct file *filp, return r; } -static struct file_operations b3dfg_fops = { +static const struct file_operations b3dfg_fops = { .owner = THIS_MODULE, .open = b3dfg_open, .release = b3dfg_release, diff -u -p a/drivers/staging/cpc-usb/cpc-usb_drv.c b/drivers/staging/cpc-usb/cpc-usb_drv.c --- a/drivers/staging/cpc-usb/cpc-usb_drv.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/cpc-usb/cpc-usb_drv.c 2009-08-11 22:42:39.000000000 +0200 @@ -103,7 +103,7 @@ static void cpcusb_read_interrupt_callba static int cpcusb_setup_intrep(CPC_USB_T *card); -static struct file_operations cpcusb_fops = { +static const struct file_operations cpcusb_fops = { /* * The owner field is part of the module-locking * mechanism. The idea is that the kernel knows diff -u -p a/drivers/staging/dream/qdsp5/adsp_driver.c b/drivers/staging/dream/qdsp5/adsp_driver.c --- a/drivers/staging/dream/qdsp5/adsp_driver.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/adsp_driver.c 2009-08-11 22:42:36.000000000 +0200 @@ -576,7 +576,7 @@ static struct adsp_device *inode_to_devi static dev_t adsp_devno; static struct class *adsp_class; -static struct file_operations adsp_fops = { +static const struct file_operations adsp_fops = { .owner = THIS_MODULE, .open = adsp_open, .unlocked_ioctl = adsp_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_aac.c b/drivers/staging/dream/qdsp5/audio_aac.c --- a/drivers/staging/dream/qdsp5/audio_aac.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_aac.c 2009-08-11 22:42:37.000000000 +0200 @@ -1022,7 +1022,7 @@ done: return rc; } -static struct file_operations audio_aac_fops = { +static const struct file_operations audio_aac_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_amrnb.c b/drivers/staging/dream/qdsp5/audio_amrnb.c --- a/drivers/staging/dream/qdsp5/audio_amrnb.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_amrnb.c 2009-08-11 22:42:38.000000000 +0200 @@ -833,7 +833,7 @@ done: return rc; } -static struct file_operations audio_amrnb_fops = { +static const struct file_operations audio_amrnb_fops = { .owner = THIS_MODULE, .open = audamrnb_open, .release = audamrnb_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_evrc.c b/drivers/staging/dream/qdsp5/audio_evrc.c --- a/drivers/staging/dream/qdsp5/audio_evrc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_evrc.c 2009-08-11 22:42:36.000000000 +0200 @@ -805,7 +805,7 @@ dma_fail: return rc; } -static struct file_operations audio_evrc_fops = { +static const struct file_operations audio_evrc_fops = { .owner = THIS_MODULE, .open = audevrc_open, .release = audevrc_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_in.c b/drivers/staging/dream/qdsp5/audio_in.c --- a/drivers/staging/dream/qdsp5/audio_in.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_in.c 2009-08-11 22:42:37.000000000 +0200 @@ -913,7 +913,7 @@ static int audpre_open(struct inode *ino return 0; } -static struct file_operations audio_fops = { +static const struct file_operations audio_fops = { .owner = THIS_MODULE, .open = audio_in_open, .release = audio_in_release, @@ -922,7 +922,7 @@ static struct file_operations audio_fops .unlocked_ioctl = audio_in_ioctl, }; -static struct file_operations audpre_fops = { +static const struct file_operations audpre_fops = { .owner = THIS_MODULE, .open = audpre_open, .unlocked_ioctl = audpre_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_mp3.c b/drivers/staging/dream/qdsp5/audio_mp3.c --- a/drivers/staging/dream/qdsp5/audio_mp3.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_mp3.c 2009-08-11 22:42:36.000000000 +0200 @@ -941,7 +941,7 @@ done: return rc; } -static struct file_operations audio_mp3_fops = { +static const struct file_operations audio_mp3_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_out.c b/drivers/staging/dream/qdsp5/audio_out.c --- a/drivers/staging/dream/qdsp5/audio_out.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_out.c 2009-08-11 22:42:37.000000000 +0200 @@ -810,7 +810,7 @@ static int audpp_open(struct inode *inod return 0; } -static struct file_operations audio_fops = { +static const struct file_operations audio_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, @@ -819,7 +819,7 @@ static struct file_operations audio_fops .unlocked_ioctl = audio_ioctl, }; -static struct file_operations audpp_fops = { +static const struct file_operations audpp_fops = { .owner = THIS_MODULE, .open = audpp_open, .unlocked_ioctl = audpp_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_qcelp.c b/drivers/staging/dream/qdsp5/audio_qcelp.c --- a/drivers/staging/dream/qdsp5/audio_qcelp.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_qcelp.c 2009-08-11 22:42:37.000000000 +0200 @@ -816,7 +816,7 @@ err: return rc; } -static struct file_operations audio_qcelp_fops = { +static const struct file_operations audio_qcelp_fops = { .owner = THIS_MODULE, .open = audqcelp_open, .release = audqcelp_release, diff -u -p a/drivers/staging/dream/qdsp5/snd.c b/drivers/staging/dream/qdsp5/snd.c --- a/drivers/staging/dream/qdsp5/snd.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/snd.c 2009-08-11 22:42:36.000000000 +0200 @@ -242,7 +242,7 @@ err: return rc; } -static struct file_operations snd_fops = { +static const struct file_operations snd_fops = { .owner = THIS_MODULE, .open = snd_open, .release = snd_release, diff -u -p a/drivers/staging/dream/smd/smd_qmi.c b/drivers/staging/dream/smd/smd_qmi.c --- a/drivers/staging/dream/smd/smd_qmi.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/smd/smd_qmi.c 2009-08-11 22:42:38.000000000 +0200 @@ -793,7 +793,7 @@ static int qmi_release(struct inode *ip, return 0; } -static struct file_operations qmi_fops = { +static const struct file_operations qmi_fops = { .owner = THIS_MODULE, .read = qmi_read, .write = qmi_write, diff -u -p a/drivers/staging/dream/smd/smd_rpcrouter_device.c b/drivers/staging/dream/smd/smd_rpcrouter_device.c --- a/drivers/staging/dream/smd/smd_rpcrouter_device.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/smd/smd_rpcrouter_device.c 2009-08-11 22:42:38.000000000 +0200 @@ -214,7 +214,7 @@ static long rpcrouter_ioctl(struct file return rc; } -static struct file_operations rpcrouter_server_fops = { +static const struct file_operations rpcrouter_server_fops = { .owner = THIS_MODULE, .open = rpcrouter_open, .release = rpcrouter_release, @@ -224,7 +224,7 @@ static struct file_operations rpcrouter_ .unlocked_ioctl = rpcrouter_ioctl, }; -static struct file_operations rpcrouter_router_fops = { +static const struct file_operations rpcrouter_router_fops = { .owner = THIS_MODULE, .open = rpcrouter_open, .release = rpcrouter_release, diff -u -p a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c --- a/drivers/staging/panel/panel.c 2009-03-02 11:33:15.000000000 +0100 +++ b/drivers/staging/panel/panel.c 2009-08-11 22:42:38.000000000 +0200 @@ -1263,7 +1263,7 @@ static int lcd_release(struct inode *ino return 0; } -static struct file_operations lcd_fops = { +static const struct file_operations lcd_fops = { .write = lcd_write, .open = lcd_open, .release = lcd_release, @@ -1519,7 +1519,7 @@ static int keypad_release(struct inode * return 0; } -static struct file_operations keypad_fops = { +static const struct file_operations keypad_fops = { .read = keypad_read, /* read */ .open = keypad_open, /* open */ .release = keypad_release, /* close */ diff -u -p a/drivers/staging/poch/poch.c b/drivers/staging/poch/poch.c --- a/drivers/staging/poch/poch.c 2009-02-16 21:07:00.000000000 +0100 +++ b/drivers/staging/poch/poch.c 2009-08-11 22:42:33.000000000 +0200 @@ -1056,7 +1056,7 @@ static int poch_ioctl(struct inode *inod return 0; } -static struct file_operations poch_fops = { +static const struct file_operations poch_fops = { .owner = THIS_MODULE, .open = poch_open, .release = poch_release, diff -u -p a/drivers/staging/rtl8192e/ieee80211/proc.c b/drivers/staging/rtl8192e/ieee80211/proc.c --- a/drivers/staging/rtl8192e/ieee80211/proc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/rtl8192e/ieee80211/proc.c 2009-08-11 22:42:33.000000000 +0200 @@ -99,7 +99,7 @@ static int crypto_info_open(struct inode return seq_open(file, &crypto_seq_ops); } -static struct file_operations proc_crypto_ops = { +static const struct file_operations proc_crypto_ops = { .open = crypto_info_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c --- a/drivers/staging/vme/devices/vme_user.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/vme/devices/vme_user.c 2009-08-11 22:42:40.000000000 +0200 @@ -127,7 +127,7 @@ static int vme_user_ioctl(struct inode * static int __init vme_user_probe(struct device *dev); -static struct file_operations vme_user_fops = { +static const struct file_operations vme_user_fops = { .open = vme_user_open, .release = vme_user_release, .read = vme_user_read, diff -u -p a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c --- a/drivers/usb/class/usbtmc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/usb/class/usbtmc.c 2009-08-11 22:41:48.000000000 +0200 @@ -985,7 +985,7 @@ skip_io_on_zombie: return retval; } -static struct file_operations fops = { +static const struct file_operations fops = { .owner = THIS_MODULE, .read = usbtmc_read, .write = usbtmc_write, diff -u -p a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c --- a/drivers/usb/gadget/printer.c 2009-03-28 23:34:54.000000000 +0100 +++ b/drivers/usb/gadget/printer.c 2009-08-11 22:41:55.000000000 +0200 @@ -875,7 +875,7 @@ printer_ioctl(struct file *fd, unsigned } /* used after endpoint configuration */ -static struct file_operations printer_io_operations = { +static const struct file_operations printer_io_operations = { .owner = THIS_MODULE, .open = printer_open, .read = printer_read, diff -u -p a/drivers/usb/host/whci/debug.c b/drivers/usb/host/whci/debug.c --- a/drivers/usb/host/whci/debug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/drivers/usb/host/whci/debug.c 2009-08-11 22:41:46.000000000 +0200 @@ -134,7 +134,7 @@ static int pzl_open(struct inode *inode, return single_open(file, pzl_print, inode->i_private); } -static struct file_operations di_fops = { +static const struct file_operations di_fops = { .open = di_open, .read = seq_read, .llseek = seq_lseek, @@ -142,7 +142,7 @@ static struct file_operations di_fops = .owner = THIS_MODULE, }; -static struct file_operations asl_fops = { +static const struct file_operations asl_fops = { .open = asl_open, .read = seq_read, .llseek = seq_lseek, @@ -150,7 +150,7 @@ static struct file_operations asl_fops .owner = THIS_MODULE, }; -static struct file_operations pzl_fops = { +static const struct file_operations pzl_fops = { .open = pzl_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c --- a/drivers/usb/misc/rio500.c 2009-07-18 21:09:26.000000000 +0200 +++ b/drivers/usb/misc/rio500.c 2009-08-11 22:41:41.000000000 +0200 @@ -429,7 +429,7 @@ read_rio(struct file *file, char __user return read_count; } -static struct +static const struct file_operations usb_rio_fops = { .owner = THIS_MODULE, .read = read_rio, diff -u -p a/drivers/uwb/uwb-debug.c b/drivers/uwb/uwb-debug.c --- a/drivers/uwb/uwb-debug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/drivers/uwb/uwb-debug.c 2009-08-11 22:42:29.000000000 +0200 @@ -205,7 +205,7 @@ static ssize_t command_write(struct file return ret < 0 ? ret : len; } -static struct file_operations command_fops = { +static const struct file_operations command_fops = { .open = command_open, .write = command_write, .read = NULL, @@ -255,7 +255,7 @@ static int reservations_open(struct inod return single_open(file, reservations_print, inode->i_private); } -static struct file_operations reservations_fops = { +static const struct file_operations reservations_fops = { .open = reservations_open, .read = seq_read, .llseek = seq_lseek, @@ -283,7 +283,7 @@ static int drp_avail_open(struct inode * return single_open(file, drp_avail_print, inode->i_private); } -static struct file_operations drp_avail_fops = { +static const struct file_operations drp_avail_fops = { .open = drp_avail_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:14.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:18.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:20.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/file.c b/fs/btrfs/file.c --- a/fs/btrfs/file.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/btrfs/file.c 2009-08-11 22:42:19.000000000 +0200 @@ -1215,7 +1215,7 @@ static int btrfs_file_mmap(struct file * return 0; } -struct file_operations btrfs_file_operations = { +const struct file_operations btrfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .aio_read = generic_file_aio_read, diff -u -p a/fs/btrfs/inode.c b/fs/btrfs/inode.c --- a/fs/btrfs/inode.c 2009-08-11 22:10:18.000000000 +0200 +++ b/fs/btrfs/inode.c 2009-08-11 22:42:15.000000000 +0200 @@ -62,7 +62,7 @@ static struct inode_operations btrfs_spe static struct inode_operations btrfs_file_inode_operations; static struct address_space_operations btrfs_aops; static struct address_space_operations btrfs_symlink_aops; -static struct file_operations btrfs_dir_file_operations; +static const struct file_operations btrfs_dir_file_operations; static struct extent_io_ops btrfs_extent_io_ops; static struct kmem_cache *btrfs_inode_cachep; @@ -5216,7 +5216,7 @@ static struct inode_operations btrfs_dir .lookup = btrfs_lookup, .permission = btrfs_permission, }; -static struct file_operations btrfs_dir_file_operations = { +static const struct file_operations btrfs_dir_file_operations = { .llseek = generic_file_llseek, .read = generic_read_dir, .readdir = btrfs_real_readdir, diff -u -p a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c --- a/fs/ext4/mballoc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/ext4/mballoc.c 2009-08-11 22:42:15.000000000 +0200 @@ -2287,7 +2287,7 @@ static ssize_t ext4_mb_seq_history_write return count; } -static struct file_operations ext4_mb_seq_history_fops = { +static const struct file_operations ext4_mb_seq_history_fops = { .owner = THIS_MODULE, .open = ext4_mb_seq_history_open, .read = seq_read, @@ -2387,7 +2387,7 @@ static int ext4_mb_seq_groups_open(struc } -static struct file_operations ext4_mb_seq_groups_fops = { +static const struct file_operations ext4_mb_seq_groups_fops = { .owner = THIS_MODULE, .open = ext4_mb_seq_groups_open, .read = seq_read, diff -u -p a/fs/jbd2/journal.c b/fs/jbd2/journal.c --- a/fs/jbd2/journal.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/jbd2/journal.c 2009-08-11 22:41:42.000000000 +0200 @@ -818,7 +818,7 @@ static int jbd2_seq_history_release(stru return seq_release(inode, file); } -static struct file_operations jbd2_seq_history_fops = { +static const struct file_operations jbd2_seq_history_fops = { .owner = THIS_MODULE, .open = jbd2_seq_history_open, .read = seq_read, @@ -920,7 +920,7 @@ static int jbd2_seq_info_release(struct return seq_release(inode, file); } -static struct file_operations jbd2_seq_info_fops = { +static const struct file_operations jbd2_seq_info_fops = { .owner = THIS_MODULE, .open = jbd2_seq_info_open, .read = seq_read, diff -u -p a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c --- a/fs/nfsd/nfsctl.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/nfsd/nfsctl.c 2009-08-11 22:41:47.000000000 +0200 @@ -175,7 +175,7 @@ static const struct file_operations expo extern int nfsd_pool_stats_open(struct inode *inode, struct file *file); -static struct file_operations pool_stats_operations = { +static const struct file_operations pool_stats_operations = { .open = nfsd_pool_stats_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c --- a/fs/nilfs2/dir.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/nilfs2/dir.c 2009-08-11 22:42:25.000000000 +0200 @@ -697,7 +697,7 @@ not_empty: return 0; } -struct file_operations nilfs_dir_operations = { +const struct file_operations nilfs_dir_operations = { .llseek = generic_file_llseek, .read = generic_read_dir, .readdir = nilfs_readdir, diff -u -p a/fs/nilfs2/file.c b/fs/nilfs2/file.c --- a/fs/nilfs2/file.c 2009-04-13 16:04:31.000000000 +0200 +++ b/fs/nilfs2/file.c 2009-08-11 22:42:25.000000000 +0200 @@ -134,7 +134,7 @@ static int nilfs_file_mmap(struct file * * We have mostly NULL's here: the current defaults are ok for * the nilfs filesystem. */ -struct file_operations nilfs_file_operations = { +const struct file_operations nilfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .write = do_sync_write, diff -u -p a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c --- a/fs/nilfs2/mdt.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/nilfs2/mdt.c 2009-08-11 22:42:25.000000000 +0200 @@ -438,7 +438,7 @@ static struct address_space_operations d }; static struct inode_operations def_mdt_iops; -static struct file_operations def_mdt_fops; +static const struct file_operations def_mdt_fops; /* * NILFS2 uses pseudo inodes for meta data files such as DAT, cpfile, sufile, diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:25.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:25.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c --- a/fs/ocfs2/cluster/heartbeat.c 2009-06-15 17:50:05.000000000 +0200 +++ b/fs/ocfs2/cluster/heartbeat.c 2009-08-11 22:42:02.000000000 +0200 @@ -966,7 +966,7 @@ static ssize_t o2hb_debug_read(struct fi } #endif /* CONFIG_DEBUG_FS */ -static struct file_operations o2hb_debug_fops = { +static const struct file_operations o2hb_debug_fops = { .open = o2hb_debug_open, .release = o2hb_debug_release, .read = o2hb_debug_read, diff -u -p a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c --- a/fs/ocfs2/cluster/netdebug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/fs/ocfs2/cluster/netdebug.c 2009-08-11 22:42:02.000000000 +0200 @@ -207,7 +207,7 @@ static int nst_fop_release(struct inode return seq_release_private(inode, file); } -static struct file_operations nst_seq_fops = { +static const struct file_operations nst_seq_fops = { .open = nst_fop_open, .read = seq_read, .llseek = seq_lseek, @@ -388,7 +388,7 @@ static int sc_fop_release(struct inode * return seq_release_private(inode, file); } -static struct file_operations sc_seq_fops = { +static const struct file_operations sc_seq_fops = { .open = sc_fop_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c --- a/fs/ocfs2/dlm/dlmdebug.c 2009-04-13 16:04:31.000000000 +0200 +++ b/fs/ocfs2/dlm/dlmdebug.c 2009-08-11 22:42:04.000000000 +0200 @@ -479,7 +479,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_purgelist_fops = { +static const struct file_operations debug_purgelist_fops = { .open = debug_purgelist_open, .release = debug_buffer_release, .read = debug_buffer_read, @@ -539,7 +539,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_mle_fops = { +static const struct file_operations debug_mle_fops = { .open = debug_mle_open, .release = debug_buffer_release, .read = debug_buffer_read, @@ -742,7 +742,7 @@ static int debug_lockres_release(struct return seq_release_private(inode, file); } -static struct file_operations debug_lockres_fops = { +static const struct file_operations debug_lockres_fops = { .open = debug_lockres_open, .release = debug_lockres_release, .read = seq_read, @@ -926,7 +926,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_state_fops = { +static const struct file_operations debug_state_fops = { .open = debug_state_open, .release = debug_buffer_release, .read = debug_buffer_read, diff -u -p a/fs/ocfs2/super.c b/fs/ocfs2/super.c --- a/fs/ocfs2/super.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/ocfs2/super.c 2009-08-11 22:42:08.000000000 +0200 @@ -373,7 +373,7 @@ static ssize_t ocfs2_debug_read(struct f } #endif /* CONFIG_DEBUG_FS */ -static struct file_operations ocfs2_osb_debug_fops = { +static const struct file_operations ocfs2_osb_debug_fops = { .open = ocfs2_osb_debug_open, .release = ocfs2_debug_release, .read = ocfs2_debug_read, diff -u -p a/fs/omfs/dir.c b/fs/omfs/dir.c --- a/fs/omfs/dir.c 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/dir.c 2009-08-11 22:42:01.000000000 +0200 @@ -498,7 +498,7 @@ struct inode_operations omfs_dir_inops .rmdir = omfs_rmdir, }; -struct file_operations omfs_dir_operations = { +const struct file_operations omfs_dir_operations = { .read = generic_read_dir, .readdir = omfs_readdir, .llseek = generic_file_llseek, diff -u -p a/fs/omfs/file.c b/fs/omfs/file.c --- a/fs/omfs/file.c 2009-06-15 17:50:05.000000000 +0200 +++ b/fs/omfs/file.c 2009-08-11 22:42:01.000000000 +0200 @@ -322,7 +322,7 @@ static sector_t omfs_bmap(struct address return generic_block_bmap(mapping, block, omfs_get_block); } -struct file_operations omfs_file_operations = { +const struct file_operations omfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .write = do_sync_write, diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:00.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:00.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:01.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c --- a/fs/ubifs/xattr.c 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/ubifs/xattr.c 2009-08-11 22:42:24.000000000 +0200 @@ -80,7 +80,7 @@ enum { static struct inode_operations none_inode_operations; static struct address_space_operations none_address_operations; -static struct file_operations none_file_operations; +static const struct file_operations none_file_operations; /** * create_xattr - create an extended attribute. diff -u -p a/kernel/cgroup.c b/kernel/cgroup.c --- a/kernel/cgroup.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/cgroup.c 2009-08-11 22:41:53.000000000 +0200 @@ -597,7 +597,7 @@ static int cgroup_mkdir(struct inode *di static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry); static int cgroup_populate_dir(struct cgroup *cgrp); static struct inode_operations cgroup_dir_inode_operations; -static struct file_operations proc_cgroupstats_operations; +static const struct file_operations proc_cgroupstats_operations; static struct backing_dev_info cgroup_backing_dev_info = { .name = "cgroup", @@ -1644,7 +1644,7 @@ static int cgroup_seqfile_release(struct return single_release(inode, file); } -static struct file_operations cgroup_seqfile_operations = { +static const struct file_operations cgroup_seqfile_operations = { .read = seq_read, .write = cgroup_file_write, .llseek = seq_lseek, @@ -1703,7 +1703,7 @@ static int cgroup_rename(struct inode *o return simple_rename(old_dir, old_dentry, new_dir, new_dentry); } -static struct file_operations cgroup_file_operations = { +static const struct file_operations cgroup_file_operations = { .read = cgroup_file_read, .write = cgroup_file_write, .llseek = generic_file_llseek, @@ -2351,7 +2351,7 @@ static int cgroup_tasks_release(struct i return seq_release(inode, file); } -static struct file_operations cgroup_tasks_operations = { +static const struct file_operations cgroup_tasks_operations = { .read = seq_read, .llseek = seq_lseek, .write = cgroup_file_write, @@ -3017,7 +3017,7 @@ static int cgroup_open(struct inode *ino return single_open(file, proc_cgroup_show, pid); } -struct file_operations proc_cgroup_operations = { +const struct file_operations proc_cgroup_operations = { .open = cgroup_open, .read = seq_read, .llseek = seq_lseek, @@ -3046,7 +3046,7 @@ static int cgroupstats_open(struct inode return single_open(file, proc_cgroupstats_show, NULL); } -static struct file_operations proc_cgroupstats_operations = { +static const struct file_operations proc_cgroupstats_operations = { .open = cgroupstats_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/kernel/kprobes.c b/kernel/kprobes.c --- a/kernel/kprobes.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/kprobes.c 2009-08-11 22:42:18.000000000 +0200 @@ -1333,7 +1333,7 @@ static int __kprobes kprobes_open(struct return seq_open(filp, &kprobes_seq_ops); } -static struct file_operations debugfs_kprobes_operations = { +static const struct file_operations debugfs_kprobes_operations = { .open = kprobes_open, .read = seq_read, .llseek = seq_lseek, @@ -1515,7 +1515,7 @@ static ssize_t write_enabled_file_bool(s return count; } -static struct file_operations fops_kp = { +static const struct file_operations fops_kp = { .read = read_enabled_file_bool, .write = write_enabled_file_bool, }; diff -u -p a/kernel/rcupreempt_trace.c b/kernel/rcupreempt_trace.c --- a/kernel/rcupreempt_trace.c 2009-01-03 11:31:05.000000000 +0100 +++ b/kernel/rcupreempt_trace.c 2009-08-11 22:42:23.000000000 +0200 @@ -261,17 +261,17 @@ static ssize_t rcuctrs_read(struct file return bcount; } -static struct file_operations rcustats_fops = { +static const struct file_operations rcustats_fops = { .owner = THIS_MODULE, .read = rcustats_read, }; -static struct file_operations rcugp_fops = { +static const struct file_operations rcugp_fops = { .owner = THIS_MODULE, .read = rcugp_read, }; -static struct file_operations rcuctrs_fops = { +static const struct file_operations rcuctrs_fops = { .owner = THIS_MODULE, .read = rcuctrs_read, }; diff -u -p a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c --- a/kernel/rcutree_trace.c 2009-06-15 17:50:05.000000000 +0200 +++ b/kernel/rcutree_trace.c 2009-08-11 22:41:49.000000000 +0200 @@ -88,7 +88,7 @@ static int rcudata_open(struct inode *in return single_open(file, show_rcudata, NULL); } -static struct file_operations rcudata_fops = { +static const struct file_operations rcudata_fops = { .owner = THIS_MODULE, .open = rcudata_open, .read = seq_read, @@ -136,7 +136,7 @@ static int rcudata_csv_open(struct inode return single_open(file, show_rcudata_csv, NULL); } -static struct file_operations rcudata_csv_fops = { +static const struct file_operations rcudata_csv_fops = { .owner = THIS_MODULE, .open = rcudata_csv_open, .read = seq_read, @@ -183,7 +183,7 @@ static int rcuhier_open(struct inode *in return single_open(file, show_rcuhier, NULL); } -static struct file_operations rcuhier_fops = { +static const struct file_operations rcuhier_fops = { .owner = THIS_MODULE, .open = rcuhier_open, .read = seq_read, @@ -205,7 +205,7 @@ static int rcugp_open(struct inode *inod return single_open(file, show_rcugp, NULL); } -static struct file_operations rcugp_fops = { +static const struct file_operations rcugp_fops = { .owner = THIS_MODULE, .open = rcugp_open, .read = seq_read, @@ -255,7 +255,7 @@ static int rcu_pending_open(struct inode return single_open(file, show_rcu_pending, NULL); } -static struct file_operations rcu_pending_fops = { +static const struct file_operations rcu_pending_fops = { .owner = THIS_MODULE, .open = rcu_pending_open, .read = seq_read, diff -u -p a/kernel/sched.c b/kernel/sched.c --- a/kernel/sched.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/sched.c 2009-08-11 22:42:06.000000000 +0200 @@ -822,7 +822,7 @@ static int sched_feat_open(struct inode return single_open(filp, sched_feat_show, NULL); } -static struct file_operations sched_feat_fops = { +static const struct file_operations sched_feat_fops = { .open = sched_feat_open, .write = sched_feat_write, .read = seq_read, diff -u -p a/kernel/time/timer_list.c b/kernel/time/timer_list.c --- a/kernel/time/timer_list.c 2008-12-07 19:29:06.000000000 +0100 +++ b/kernel/time/timer_list.c 2009-08-11 22:41:49.000000000 +0200 @@ -275,7 +275,7 @@ static int timer_list_open(struct inode return single_open(filp, timer_list_show, NULL); } -static struct file_operations timer_list_fops = { +static const struct file_operations timer_list_fops = { .open = timer_list_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c --- a/kernel/time/timer_stats.c 2009-07-04 21:27:34.000000000 +0200 +++ b/kernel/time/timer_stats.c 2009-08-11 22:41:49.000000000 +0200 @@ -395,7 +395,7 @@ static int tstats_open(struct inode *ino return single_open(filp, tstats_show, NULL); } -static struct file_operations tstats_fops = { +static const struct file_operations tstats_fops = { .open = tstats_open, .read = seq_read, .write = tstats_write, diff -u -p a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c --- a/net/ipv6/ip6mr.c 2009-08-11 22:10:22.000000000 +0200 +++ b/net/ipv6/ip6mr.c 2009-08-11 22:41:43.000000000 +0200 @@ -217,7 +217,7 @@ static int ip6mr_vif_open(struct inode * sizeof(struct ipmr_vif_iter)); } -static struct file_operations ip6mr_vif_fops = { +static const struct file_operations ip6mr_vif_fops = { .owner = THIS_MODULE, .open = ip6mr_vif_open, .read = seq_read, @@ -341,7 +341,7 @@ static int ipmr_mfc_open(struct inode *i sizeof(struct ipmr_mfc_iter)); } -static struct file_operations ip6mr_mfc_fops = { +static const struct file_operations ip6mr_mfc_fops = { .owner = THIS_MODULE, .open = ipmr_mfc_open, .read = seq_read, diff -u -p a/net/irda/irproc.c b/net/irda/irproc.c --- a/net/irda/irproc.c 2009-04-13 16:04:31.000000000 +0200 +++ b/net/irda/irproc.c 2009-08-11 22:42:03.000000000 +0200 @@ -34,15 +34,15 @@ #include <net/irda/irlap.h> #include <net/irda/irlmp.h> -extern struct file_operations discovery_seq_fops; -extern struct file_operations irlap_seq_fops; -extern struct file_operations irlmp_seq_fops; -extern struct file_operations irttp_seq_fops; -extern struct file_operations irias_seq_fops; +extern const struct file_operations discovery_seq_fops; +extern const struct file_operations irlap_seq_fops; +extern const struct file_operations irlmp_seq_fops; +extern const struct file_operations irttp_seq_fops; +extern const struct file_operations irias_seq_fops; struct irda_entry { const char *name; - struct file_operations *fops; + const struct file_operations *fops; }; struct proc_dir_entry *proc_irda; diff -u -p a/net/key/af_key.c b/net/key/af_key.c --- a/net/key/af_key.c 2009-06-24 21:18:51.000000000 +0200 +++ b/net/key/af_key.c 2009-08-11 22:42:07.000000000 +0200 @@ -3718,7 +3718,7 @@ static int pfkey_seq_open(struct inode * sizeof(struct seq_net_private)); } -static struct file_operations pfkey_proc_ops = { +static const struct file_operations pfkey_proc_ops = { .open = pfkey_seq_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/net/mac80211/rc80211_minstrel_debugfs.c b/net/mac80211/rc80211_minstrel_debugfs.c --- a/net/mac80211/rc80211_minstrel_debugfs.c 2008-12-07 19:29:04.000000000 +0100 +++ b/net/mac80211/rc80211_minstrel_debugfs.c 2009-08-11 22:41:53.000000000 +0200 @@ -139,7 +139,7 @@ minstrel_stats_release(struct inode *ino return 0; } -static struct file_operations minstrel_stat_fops = { +static const struct file_operations minstrel_stat_fops = { .owner = THIS_MODULE, .open = minstrel_stats_open, .read = minstrel_stats_read, diff -u -p a/net/mac80211/rc80211_pid_debugfs.c b/net/mac80211/rc80211_pid_debugfs.c --- a/net/mac80211/rc80211_pid_debugfs.c 2009-01-03 11:31:05.000000000 +0100 +++ b/net/mac80211/rc80211_pid_debugfs.c 2009-08-11 22:41:54.000000000 +0200 @@ -198,7 +198,7 @@ static ssize_t rate_control_pid_events_r #undef RC_PID_PRINT_BUF_SIZE -static struct file_operations rc_pid_fop_events = { +static const struct file_operations rc_pid_fop_events = { .owner = THIS_MODULE, .read = rate_control_pid_events_read, .poll = rate_control_pid_events_poll, diff -u -p a/net/xfrm/xfrm_proc.c b/net/xfrm/xfrm_proc.c --- a/net/xfrm/xfrm_proc.c 2009-01-03 11:31:05.000000000 +0100 +++ b/net/xfrm/xfrm_proc.c 2009-08-11 22:42:30.000000000 +0200 @@ -60,7 +60,7 @@ static int xfrm_statistics_seq_open(stru return single_open_net(inode, file, xfrm_statistics_seq_show); } -static struct file_operations xfrm_statistics_seq_fops = { +static const struct file_operations xfrm_statistics_seq_fops = { .owner = THIS_MODULE, .open = xfrm_statistics_seq_open, .read = seq_read, diff -u -p a/samples/markers/marker-example.c b/samples/markers/marker-example.c --- a/samples/markers/marker-example.c 2009-01-09 22:41:02.000000000 +0100 +++ b/samples/markers/marker-example.c 2009-08-11 22:42:14.000000000 +0200 @@ -26,7 +26,7 @@ static int my_open(struct inode *inode, return -EPERM; } -static struct file_operations mark_ops = { +static const struct file_operations mark_ops = { .open = my_open, }; diff -u -p a/samples/tracepoints/tracepoint-sample.c b/samples/tracepoints/tracepoint-sample.c --- a/samples/tracepoints/tracepoint-sample.c 2009-04-13 16:04:31.000000000 +0200 +++ b/samples/tracepoints/tracepoint-sample.c 2009-08-11 22:42:14.000000000 +0200 @@ -28,7 +28,7 @@ static int my_open(struct inode *inode, return -EPERM; } -static struct file_operations mark_ops = { +static const struct file_operations mark_ops = { .open = my_open, }; diff -u -p a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c --- a/scripts/mod/file2alias.c 2009-06-15 17:50:05.000000000 +0200 +++ b/scripts/mod/file2alias.c 2009-08-11 22:42:15.000000000 +0200 @@ -530,7 +530,7 @@ static void do_input(char *alias, } /* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */ -static int do_input_entry(const char *filename, struct input_device_id *id, +static int do_input_entry(const char *filename, const struct input_device_id *id, char *alias) { sprintf(alias, "input:"); diff -u -p a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c --- a/security/integrity/ima/ima_fs.c 2009-06-15 17:50:05.000000000 +0200 +++ b/security/integrity/ima/ima_fs.c 2009-08-11 22:42:15.000000000 +0200 @@ -43,7 +43,7 @@ static ssize_t ima_show_htable_violation return ima_show_htable_value(buf, count, ppos, &ima_htable.violations); } -static struct file_operations ima_htable_violations_ops = { +static const struct file_operations ima_htable_violations_ops = { .read = ima_show_htable_violations }; @@ -55,7 +55,7 @@ static ssize_t ima_show_measurements_cou } -static struct file_operations ima_measurements_count_ops = { +static const struct file_operations ima_measurements_count_ops = { .read = ima_show_measurements_count }; @@ -158,7 +158,7 @@ static int ima_measurements_open(struct return seq_open(file, &ima_measurments_seqops); } -static struct file_operations ima_measurements_ops = { +static const struct file_operations ima_measurements_ops = { .open = ima_measurements_open, .read = seq_read, .llseek = seq_lseek, @@ -233,7 +233,7 @@ static int ima_ascii_measurements_open(s return seq_open(file, &ima_ascii_measurements_seqops); } -static struct file_operations ima_ascii_measurements_ops = { +static const struct file_operations ima_ascii_measurements_ops = { .open = ima_ascii_measurements_open, .read = seq_read, .llseek = seq_lseek, @@ -313,7 +313,7 @@ static int ima_release_policy(struct ino return 0; } -static struct file_operations ima_measure_policy_ops = { +static const struct file_operations ima_measure_policy_ops = { .open = ima_open_policy, .write = ima_write_policy, .release = ima_release_policy diff -u -p a/sound/oss/au1550_ac97.c b/sound/oss/au1550_ac97.c --- a/sound/oss/au1550_ac97.c 2009-03-28 23:34:55.000000000 +0100 +++ b/sound/oss/au1550_ac97.c 2009-08-11 22:42:25.000000000 +0200 @@ -831,7 +831,7 @@ au1550_ioctl_mixdev(struct inode *inode, return mixdev_ioctl(codec, cmd, arg); } -static /*const */ struct file_operations au1550_mixer_fops = { +static /*const */ const struct file_operations au1550_mixer_fops = { owner:THIS_MODULE, llseek:au1550_llseek, ioctl:au1550_ioctl_mixdev, @@ -1880,7 +1880,7 @@ au1550_release(struct inode *inode, stru return 0; } -static /*const */ struct file_operations au1550_audio_fops = { +static /*const */ const struct file_operations au1550_audio_fops = { owner: THIS_MODULE, llseek: au1550_llseek, read: au1550_read, ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-11 19:47 ` Julia Lawall 0 siblings, 0 replies; 14+ messages in thread From: Julia Lawall @ 2009-08-11 19:47 UTC (permalink / raw) To: James Morris Cc: Serge E. Hallyn, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors A while ago I made a semantic patch to introduce const on file_operations and and input_device_id types. I tested it on 142 files in which the change had already been made and got the same result in each case. I have run it on linux-next and obtained the attached result. However, I have not checked any of these results, so this is not meant as a submitted patch, but as a starting point for someone who wants to look further into the problem. julia ------------------- semantic patch (http://coccinelle.lip6.fr) @ rule1 @ struct file_operations x; identifier fld; expression E; @@ x.fld = E @ rule2 depends on !rule1 disable optional_qualifier @ @@ + const struct file_operations @ rule3 @ struct input_device_id x; identifier fld; expression E; @@ x.fld = E @ rule4 depends on !rule3 disable optional_qualifier @ @@ + const struct input_device_id // The following rules are not super nice, because we are cleaning up bad // things we have made ourselves. And the first one is a problem because // in general there can be any number of stars. This is indeed part of why // we can't just enumerate the positive possibilities. @@ expression E; @@ ( (const struct file_operations *) NULL | ( - const struct file_operations *) E | sizeof ( - const struct file_operations) ) @@ @@ - const struct file_operations; @@ expression E; @@ ( (const struct input_device_id *) NULL | ( - const struct input_device_id *) E | sizeof ( - const struct input_device_id) ) @@ @@ - const struct input_device_id; ------------------- the generated patch, based on linux-next, b142f4b663cbd2d359eb9e7733e7136f8205434d diff -u -p a/arch/arm/mach-ns9xxx/clock.c b/arch/arm/mach-ns9xxx/clock.c --- a/arch/arm/mach-ns9xxx/clock.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/arm/mach-ns9xxx/clock.c 2009-08-11 22:41:55.000000000 +0200 @@ -195,7 +195,7 @@ static int clk_debugfs_open(struct inode return single_open(file, clk_debugfs_show, NULL); } -static struct file_operations clk_debugfs_operations = { +static const struct file_operations clk_debugfs_operations = { .open = clk_debugfs_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/arch/blackfin/mach-bf561/coreb.c b/arch/blackfin/mach-bf561/coreb.c --- a/arch/blackfin/mach-bf561/coreb.c 2009-06-15 17:50:04.000000000 +0200 +++ b/arch/blackfin/mach-bf561/coreb.c 2009-08-11 22:42:01.000000000 +0200 @@ -48,7 +48,7 @@ coreb_ioctl(struct inode *inode, struct return ret; } -static struct file_operations coreb_fops = { +static const struct file_operations coreb_fops = { .owner = THIS_MODULE, .ioctl = coreb_ioctl, }; diff -u -p a/arch/cris/arch-v10/drivers/sync_serial.c b/arch/cris/arch-v10/drivers/sync_serial.c --- a/arch/cris/arch-v10/drivers/sync_serial.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/cris/arch-v10/drivers/sync_serial.c 2009-08-11 22:41:50.000000000 +0200 @@ -244,7 +244,7 @@ static unsigned sync_serial_prescale_sha #define NUMBER_OF_PORTS 2 -static struct file_operations sync_serial_fops = { +static const struct file_operations sync_serial_fops = { .owner = THIS_MODULE, .write = sync_serial_write, .read = sync_serial_read, diff -u -p a/arch/cris/arch-v32/drivers/mach-fs/gpio.c b/arch/cris/arch-v32/drivers/mach-fs/gpio.c --- a/arch/cris/arch-v32/drivers/mach-fs/gpio.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/cris/arch-v32/drivers/mach-fs/gpio.c 2009-08-11 22:41:51.000000000 +0200 @@ -855,7 +855,7 @@ gpio_leds_ioctl(unsigned int cmd, unsign return 0; } -struct file_operations gpio_fops = { +const struct file_operations gpio_fops = { .owner = THIS_MODULE, .poll = gpio_poll, .ioctl = gpio_ioctl, diff -u -p a/arch/powerpc/kvm/timing.c b/arch/powerpc/kvm/timing.c --- a/arch/powerpc/kvm/timing.c 2009-01-06 15:34:28.000000000 +0100 +++ b/arch/powerpc/kvm/timing.c 2009-08-11 22:41:42.000000000 +0200 @@ -201,7 +201,7 @@ static int kvmppc_exit_timing_open(struc return single_open(file, kvmppc_exit_timing_show, inode->i_private); } -static struct file_operations kvmppc_exit_timing_fops = { +static const struct file_operations kvmppc_exit_timing_fops = { .owner = THIS_MODULE, .open = kvmppc_exit_timing_open, .read = seq_read, diff -u -p a/arch/powerpc/platforms/pseries/dtl.c b/arch/powerpc/platforms/pseries/dtl.c --- a/arch/powerpc/platforms/pseries/dtl.c 2009-04-23 17:28:18.000000000 +0200 +++ b/arch/powerpc/platforms/pseries/dtl.c 2009-08-11 22:41:43.000000000 +0200 @@ -209,7 +209,7 @@ static ssize_t dtl_file_read(struct file return n_read * sizeof(struct dtl_entry); } -static struct file_operations dtl_fops = { +static const struct file_operations dtl_fops = { .open = dtl_file_open, .release = dtl_file_release, .read = dtl_file_read, diff -u -p a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c --- a/arch/x86/kernel/cpu/mcheck/mce.c 2009-08-11 22:10:21.000000000 +0200 +++ b/arch/x86/kernel/cpu/mcheck/mce.c 2009-08-11 22:41:57.000000000 +0200 @@ -1531,7 +1531,7 @@ static long mce_ioctl(struct file *f, un } /* Modified in mce-inject.c, so not static or const */ -struct file_operations mce_chrdev_ops = { +const struct file_operations mce_chrdev_ops = { .open = mce_open, .release = mce_release, .read = mce_read, diff -u -p a/arch/x86/xen/debugfs.c b/arch/x86/xen/debugfs.c --- a/arch/x86/xen/debugfs.c 2008-12-07 19:29:05.000000000 +0100 +++ b/arch/x86/xen/debugfs.c 2009-08-11 22:41:59.000000000 +0200 @@ -100,7 +100,7 @@ static int xen_array_release(struct inod return 0; } -static struct file_operations u32_array_fops = { +static const struct file_operations u32_array_fops = { .owner = THIS_MODULE, .open = u32_array_open, .release= xen_array_release, diff -u -p a/drivers/acpi/battery.c b/drivers/acpi/battery.c --- a/drivers/acpi/battery.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/acpi/battery.c 2009-08-11 22:41:41.000000000 +0200 @@ -743,7 +743,7 @@ DECLARE_FILE_FUNCTIONS(alarm); } static struct battery_file { - struct file_operations ops; + const struct file_operations ops; mode_t mode; const char *name; } acpi_battery_file[] = { diff -u -p a/drivers/acpi/video.c b/drivers/acpi/video.c --- a/drivers/acpi/video.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/acpi/video.c 2009-08-11 22:41:43.000000000 +0200 @@ -285,7 +285,7 @@ static int acpi_video_device_brightness_ struct file *file); static ssize_t acpi_video_device_write_brightness(struct file *file, const char __user *buffer, size_t count, loff_t *data); -static struct file_operations acpi_video_device_brightness_fops = { +static const struct file_operations acpi_video_device_brightness_fops = { .owner = THIS_MODULE, .open = acpi_video_device_brightness_open_fs, .read = seq_read, diff -u -p a/drivers/block/cciss.c b/drivers/block/cciss.c --- a/drivers/block/cciss.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/cciss.c 2009-08-11 22:41:54.000000000 +0200 @@ -432,7 +432,7 @@ out: return err; } -static struct file_operations cciss_proc_fops = { +static const struct file_operations cciss_proc_fops = { .owner = THIS_MODULE, .open = cciss_seq_open, .read = seq_read, diff -u -p a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h --- a/drivers/block/drbd/drbd_int.h 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/drbd/drbd_int.h 2009-08-11 22:41:59.000000000 +0200 @@ -1485,7 +1485,7 @@ void drbd_bump_write_ordering(struct drb /* drbd_proc.c */ extern struct proc_dir_entry *drbd_proc; -extern struct file_operations drbd_proc_fops; +extern const struct file_operations drbd_proc_fops; extern const char *drbd_conn_str(enum drbd_conns s); extern const char *drbd_role_str(enum drbd_role s); diff -u -p a/drivers/block/drbd/drbd_proc.c b/drivers/block/drbd/drbd_proc.c --- a/drivers/block/drbd/drbd_proc.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/block/drbd/drbd_proc.c 2009-08-11 22:42:00.000000000 +0200 @@ -39,7 +39,7 @@ static int drbd_proc_open(struct inode * struct proc_dir_entry *drbd_proc; -struct file_operations drbd_proc_fops = { +const struct file_operations drbd_proc_fops = { .owner = THIS_MODULE, .open = drbd_proc_open, .read = seq_read, diff -u -p a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c --- a/drivers/char/apm-emulation.c 2008-12-07 19:29:06.000000000 +0100 +++ b/drivers/char/apm-emulation.c 2009-08-11 22:41:42.000000000 +0200 @@ -393,7 +393,7 @@ static int apm_open(struct inode * inode return as ? 0 : -ENOMEM; } -static struct file_operations apm_bios_fops = { +static const struct file_operations apm_bios_fops = { .owner = THIS_MODULE, .read = apm_read, .poll = apm_poll, diff -u -p a/drivers/char/bfin-otp.c b/drivers/char/bfin-otp.c --- a/drivers/char/bfin-otp.c 2008-12-07 19:29:06.000000000 +0100 +++ b/drivers/char/bfin-otp.c 2009-08-11 22:42:07.000000000 +0200 @@ -133,7 +133,7 @@ static ssize_t bfin_otp_write(struct fil # define bfin_otp_write NULL #endif -static struct file_operations bfin_otp_fops = { +static const struct file_operations bfin_otp_fops = { .owner = THIS_MODULE, .read = bfin_otp_read, .write = bfin_otp_write, diff -u -p a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/char/tty_io.c 2009-08-11 22:41:53.000000000 +0200 @@ -3041,7 +3041,7 @@ struct tty_struct *get_current_tty(void) } EXPORT_SYMBOL_GPL(get_current_tty); -void tty_default_fops(struct file_operations *fops) +void tty_default_fops(const struct file_operations *fops) { *fops = tty_fops; } diff -u -p a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c 2008-12-19 10:51:57.000000000 +0100 +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c 2009-08-11 22:42:07.000000000 +0200 @@ -559,7 +559,7 @@ static int hwicap_release(struct inode * return status; } -static struct file_operations hwicap_fops = { +static const struct file_operations hwicap_fops = { .owner = THIS_MODULE, .write = hwicap_write, .read = hwicap_read, diff -u -p a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c --- a/drivers/gpio/gpiolib.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/gpio/gpiolib.c 2009-08-11 22:42:03.000000000 +0200 @@ -1244,7 +1244,7 @@ static int gpiolib_open(struct inode *in return single_open(file, gpiolib_show, NULL); } -static struct file_operations gpiolib_operations = { +static const struct file_operations gpiolib_operations = { .open = gpiolib_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c --- a/drivers/hwmon/fschmd.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/hwmon/fschmd.c 2009-08-11 22:42:06.000000000 +0200 @@ -915,7 +915,7 @@ static int watchdog_ioctl(struct inode * return ret; } -static struct file_operations watchdog_fops = { +static const struct file_operations watchdog_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .open = watchdog_open, diff -u -p a/drivers/lguest/lguest_user.c b/drivers/lguest/lguest_user.c --- a/drivers/lguest/lguest_user.c 2009-08-01 12:06:12.000000000 +0200 +++ b/drivers/lguest/lguest_user.c 2009-08-11 22:41:42.000000000 +0200 @@ -508,7 +508,7 @@ static int close(struct inode *inode, st * uses: reading and writing a character device called /dev/lguest. All the * work happens in the read(), write() and close() routines: */ -static struct file_operations lguest_fops = { +static const struct file_operations lguest_fops = { .owner = THIS_MODULE, .release = close, .write = write, diff -u -p a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c --- a/drivers/media/dvb/dvb-core/dmxdev.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/media/dvb/dvb-core/dmxdev.c 2009-08-11 22:42:24.000000000 +0200 @@ -1203,7 +1203,7 @@ static unsigned int dvb_dvr_poll(struct return mask; } -static struct file_operations dvb_dvr_fops = { +static const struct file_operations dvb_dvr_fops = { .owner = THIS_MODULE, .read = dvb_dvr_read, .write = dvb_dvr_write, diff -u -p a/drivers/media/dvb/firewire/firedtv-ci.c b/drivers/media/dvb/firewire/firedtv-ci.c --- a/drivers/media/dvb/firewire/firedtv-ci.c 2009-03-02 11:33:15.000000000 +0100 +++ b/drivers/media/dvb/firewire/firedtv-ci.c 2009-08-11 22:42:21.000000000 +0200 @@ -215,7 +215,7 @@ static unsigned int fdtv_ca_io_poll(stru return POLLIN; } -static struct file_operations fdtv_ca_fops = { +static const struct file_operations fdtv_ca_fops = { .owner = THIS_MODULE, .ioctl = dvb_generic_ioctl, .open = dvb_generic_open, diff -u -p a/drivers/misc/phantom.c b/drivers/misc/phantom.c --- a/drivers/misc/phantom.c 2009-01-09 22:41:02.000000000 +0100 +++ b/drivers/misc/phantom.c 2009-08-11 22:41:49.000000000 +0200 @@ -271,7 +271,7 @@ static unsigned int phantom_poll(struct return mask; } -static struct file_operations phantom_file_ops = { +static const struct file_operations phantom_file_ops = { .open = phantom_open, .release = phantom_release, .unlocked_ioctl = phantom_ioctl, diff -u -p a/drivers/misc/sgi-gru/grufile.c b/drivers/misc/sgi-gru/grufile.c --- a/drivers/misc/sgi-gru/grufile.c 2009-07-18 21:09:26.000000000 +0200 +++ b/drivers/misc/sgi-gru/grufile.c 2009-08-11 22:41:49.000000000 +0200 @@ -53,7 +53,7 @@ struct gru_stats_s gru_stats; /* Guaranteed user available resources on each node */ static int max_user_cbrs, max_user_dsr_bytes; -static struct file_operations gru_fops; +static const struct file_operations gru_fops; static struct miscdevice gru_miscdev; @@ -426,7 +426,7 @@ static void __exit gru_exit(void) gru_proc_exit(); } -static struct file_operations gru_fops = { +static const struct file_operations gru_fops = { .owner = THIS_MODULE, .unlocked_ioctl = gru_file_unlocked_ioctl, .mmap = gru_file_mmap, diff -u -p a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c --- a/drivers/mmc/core/debugfs.c 2009-04-13 16:04:29.000000000 +0200 +++ b/drivers/mmc/core/debugfs.c 2009-08-11 22:41:42.000000000 +0200 @@ -240,7 +240,7 @@ static int mmc_ext_csd_release(struct in return 0; } -static struct file_operations mmc_dbg_ext_csd_fops = { +static const struct file_operations mmc_dbg_ext_csd_fops = { .open = mmc_ext_csd_open, .read = mmc_ext_csd_read, .release = mmc_ext_csd_release, diff -u -p a/drivers/net/wireless/b43/debugfs.c b/drivers/net/wireless/b43/debugfs.c --- a/drivers/net/wireless/b43/debugfs.c 2009-03-28 23:34:54.000000000 +0100 +++ b/drivers/net/wireless/b43/debugfs.c 2009-08-11 22:41:55.000000000 +0200 @@ -43,7 +43,7 @@ static struct dentry *rootdir; struct b43_debugfs_fops { ssize_t (*read)(struct b43_wldev *dev, char *buf, size_t bufsize); int (*write)(struct b43_wldev *dev, const char *buf, size_t count); - struct file_operations fops; + const struct file_operations fops; /* Offset of struct b43_dfs_file in struct b43_dfsentry */ size_t file_struct_offset; /* Take wl->irq_lock before calling read/write? */ diff -u -p a/drivers/net/wireless/b43legacy/debugfs.c b/drivers/net/wireless/b43legacy/debugfs.c --- a/drivers/net/wireless/b43legacy/debugfs.c 2009-01-03 11:31:03.000000000 +0100 +++ b/drivers/net/wireless/b43legacy/debugfs.c 2009-08-11 22:42:05.000000000 +0200 @@ -44,7 +44,7 @@ static struct dentry *rootdir; struct b43legacy_debugfs_fops { ssize_t (*read)(struct b43legacy_wldev *dev, char *buf, size_t bufsize); int (*write)(struct b43legacy_wldev *dev, const char *buf, size_t count); - struct file_operations fops; + const struct file_operations fops; /* Offset of struct b43legacy_dfs_file in struct b43legacy_dfsentry */ size_t file_struct_offset; /* Take wl->irq_lock before calling read/write? */ diff -u -p a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c --- a/drivers/net/wireless/libertas/debugfs.c 2009-06-24 21:18:49.000000000 +0200 +++ b/drivers/net/wireless/libertas/debugfs.c 2009-08-11 22:41:57.000000000 +0200 @@ -682,7 +682,7 @@ out_unlock: struct lbs_debugfs_files { const char *name; int perm; - struct file_operations fops; + const struct file_operations fops; }; static const struct lbs_debugfs_files debugfs_files[] = { diff -u -p a/drivers/s390/cio/qdio_debug.c b/drivers/s390/cio/qdio_debug.c --- a/drivers/s390/cio/qdio_debug.c 2009-08-11 22:10:21.000000000 +0200 +++ b/drivers/s390/cio/qdio_debug.c 2009-08-11 22:42:26.000000000 +0200 @@ -125,7 +125,7 @@ static int qstat_seq_open(struct inode * filp->f_path.dentry->d_inode->i_private); } -static struct file_operations debugfs_fops = { +static const struct file_operations debugfs_fops = { .owner = THIS_MODULE, .open = qstat_seq_open, .read = seq_read, diff -u -p a/drivers/s390/cio/qdio_perf.c b/drivers/s390/cio/qdio_perf.c --- a/drivers/s390/cio/qdio_perf.c 2009-06-15 17:50:05.000000000 +0200 +++ b/drivers/s390/cio/qdio_perf.c 2009-08-11 22:42:26.000000000 +0200 @@ -84,7 +84,7 @@ static int qdio_perf_seq_open(struct ino return single_open(filp, qdio_perf_proc_show, NULL); } -static struct file_operations qdio_perf_proc_fops = { +static const struct file_operations qdio_perf_proc_fops = { .owner = THIS_MODULE, .open = qdio_perf_seq_open, .read = seq_read, diff -u -p a/drivers/spi/spidev.c b/drivers/spi/spidev.c --- a/drivers/spi/spidev.c 2009-07-04 21:27:34.000000000 +0200 +++ b/drivers/spi/spidev.c 2009-08-11 22:41:48.000000000 +0200 @@ -537,7 +537,7 @@ static int spidev_release(struct inode * return status; } -static struct file_operations spidev_fops = { +static const struct file_operations spidev_fops = { .owner = THIS_MODULE, /* REVISIT switch to aio primitives, so that userspace * gets more complete API coverage. It'll simplify things diff -u -p a/drivers/staging/b3dfg/b3dfg.c b/drivers/staging/b3dfg/b3dfg.c --- a/drivers/staging/b3dfg/b3dfg.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/b3dfg/b3dfg.c 2009-08-11 22:42:22.000000000 +0200 @@ -847,7 +847,7 @@ static int b3dfg_mmap(struct file *filp, return r; } -static struct file_operations b3dfg_fops = { +static const struct file_operations b3dfg_fops = { .owner = THIS_MODULE, .open = b3dfg_open, .release = b3dfg_release, diff -u -p a/drivers/staging/cpc-usb/cpc-usb_drv.c b/drivers/staging/cpc-usb/cpc-usb_drv.c --- a/drivers/staging/cpc-usb/cpc-usb_drv.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/cpc-usb/cpc-usb_drv.c 2009-08-11 22:42:39.000000000 +0200 @@ -103,7 +103,7 @@ static void cpcusb_read_interrupt_callba static int cpcusb_setup_intrep(CPC_USB_T *card); -static struct file_operations cpcusb_fops = { +static const struct file_operations cpcusb_fops = { /* * The owner field is part of the module-locking * mechanism. The idea is that the kernel knows diff -u -p a/drivers/staging/dream/qdsp5/adsp_driver.c b/drivers/staging/dream/qdsp5/adsp_driver.c --- a/drivers/staging/dream/qdsp5/adsp_driver.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/adsp_driver.c 2009-08-11 22:42:36.000000000 +0200 @@ -576,7 +576,7 @@ static struct adsp_device *inode_to_devi static dev_t adsp_devno; static struct class *adsp_class; -static struct file_operations adsp_fops = { +static const struct file_operations adsp_fops = { .owner = THIS_MODULE, .open = adsp_open, .unlocked_ioctl = adsp_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_aac.c b/drivers/staging/dream/qdsp5/audio_aac.c --- a/drivers/staging/dream/qdsp5/audio_aac.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_aac.c 2009-08-11 22:42:37.000000000 +0200 @@ -1022,7 +1022,7 @@ done: return rc; } -static struct file_operations audio_aac_fops = { +static const struct file_operations audio_aac_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_amrnb.c b/drivers/staging/dream/qdsp5/audio_amrnb.c --- a/drivers/staging/dream/qdsp5/audio_amrnb.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_amrnb.c 2009-08-11 22:42:38.000000000 +0200 @@ -833,7 +833,7 @@ done: return rc; } -static struct file_operations audio_amrnb_fops = { +static const struct file_operations audio_amrnb_fops = { .owner = THIS_MODULE, .open = audamrnb_open, .release = audamrnb_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_evrc.c b/drivers/staging/dream/qdsp5/audio_evrc.c --- a/drivers/staging/dream/qdsp5/audio_evrc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_evrc.c 2009-08-11 22:42:36.000000000 +0200 @@ -805,7 +805,7 @@ dma_fail: return rc; } -static struct file_operations audio_evrc_fops = { +static const struct file_operations audio_evrc_fops = { .owner = THIS_MODULE, .open = audevrc_open, .release = audevrc_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_in.c b/drivers/staging/dream/qdsp5/audio_in.c --- a/drivers/staging/dream/qdsp5/audio_in.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_in.c 2009-08-11 22:42:37.000000000 +0200 @@ -913,7 +913,7 @@ static int audpre_open(struct inode *ino return 0; } -static struct file_operations audio_fops = { +static const struct file_operations audio_fops = { .owner = THIS_MODULE, .open = audio_in_open, .release = audio_in_release, @@ -922,7 +922,7 @@ static struct file_operations audio_fops .unlocked_ioctl = audio_in_ioctl, }; -static struct file_operations audpre_fops = { +static const struct file_operations audpre_fops = { .owner = THIS_MODULE, .open = audpre_open, .unlocked_ioctl = audpre_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_mp3.c b/drivers/staging/dream/qdsp5/audio_mp3.c --- a/drivers/staging/dream/qdsp5/audio_mp3.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_mp3.c 2009-08-11 22:42:36.000000000 +0200 @@ -941,7 +941,7 @@ done: return rc; } -static struct file_operations audio_mp3_fops = { +static const struct file_operations audio_mp3_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, diff -u -p a/drivers/staging/dream/qdsp5/audio_out.c b/drivers/staging/dream/qdsp5/audio_out.c --- a/drivers/staging/dream/qdsp5/audio_out.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_out.c 2009-08-11 22:42:37.000000000 +0200 @@ -810,7 +810,7 @@ static int audpp_open(struct inode *inod return 0; } -static struct file_operations audio_fops = { +static const struct file_operations audio_fops = { .owner = THIS_MODULE, .open = audio_open, .release = audio_release, @@ -819,7 +819,7 @@ static struct file_operations audio_fops .unlocked_ioctl = audio_ioctl, }; -static struct file_operations audpp_fops = { +static const struct file_operations audpp_fops = { .owner = THIS_MODULE, .open = audpp_open, .unlocked_ioctl = audpp_ioctl, diff -u -p a/drivers/staging/dream/qdsp5/audio_qcelp.c b/drivers/staging/dream/qdsp5/audio_qcelp.c --- a/drivers/staging/dream/qdsp5/audio_qcelp.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/audio_qcelp.c 2009-08-11 22:42:37.000000000 +0200 @@ -816,7 +816,7 @@ err: return rc; } -static struct file_operations audio_qcelp_fops = { +static const struct file_operations audio_qcelp_fops = { .owner = THIS_MODULE, .open = audqcelp_open, .release = audqcelp_release, diff -u -p a/drivers/staging/dream/qdsp5/snd.c b/drivers/staging/dream/qdsp5/snd.c --- a/drivers/staging/dream/qdsp5/snd.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/qdsp5/snd.c 2009-08-11 22:42:36.000000000 +0200 @@ -242,7 +242,7 @@ err: return rc; } -static struct file_operations snd_fops = { +static const struct file_operations snd_fops = { .owner = THIS_MODULE, .open = snd_open, .release = snd_release, diff -u -p a/drivers/staging/dream/smd/smd_qmi.c b/drivers/staging/dream/smd/smd_qmi.c --- a/drivers/staging/dream/smd/smd_qmi.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/smd/smd_qmi.c 2009-08-11 22:42:38.000000000 +0200 @@ -793,7 +793,7 @@ static int qmi_release(struct inode *ip, return 0; } -static struct file_operations qmi_fops = { +static const struct file_operations qmi_fops = { .owner = THIS_MODULE, .read = qmi_read, .write = qmi_write, diff -u -p a/drivers/staging/dream/smd/smd_rpcrouter_device.c b/drivers/staging/dream/smd/smd_rpcrouter_device.c --- a/drivers/staging/dream/smd/smd_rpcrouter_device.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/dream/smd/smd_rpcrouter_device.c 2009-08-11 22:42:38.000000000 +0200 @@ -214,7 +214,7 @@ static long rpcrouter_ioctl(struct file return rc; } -static struct file_operations rpcrouter_server_fops = { +static const struct file_operations rpcrouter_server_fops = { .owner = THIS_MODULE, .open = rpcrouter_open, .release = rpcrouter_release, @@ -224,7 +224,7 @@ static struct file_operations rpcrouter_ .unlocked_ioctl = rpcrouter_ioctl, }; -static struct file_operations rpcrouter_router_fops = { +static const struct file_operations rpcrouter_router_fops = { .owner = THIS_MODULE, .open = rpcrouter_open, .release = rpcrouter_release, diff -u -p a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c --- a/drivers/staging/panel/panel.c 2009-03-02 11:33:15.000000000 +0100 +++ b/drivers/staging/panel/panel.c 2009-08-11 22:42:38.000000000 +0200 @@ -1263,7 +1263,7 @@ static int lcd_release(struct inode *ino return 0; } -static struct file_operations lcd_fops = { +static const struct file_operations lcd_fops = { .write = lcd_write, .open = lcd_open, .release = lcd_release, @@ -1519,7 +1519,7 @@ static int keypad_release(struct inode * return 0; } -static struct file_operations keypad_fops = { +static const struct file_operations keypad_fops = { .read = keypad_read, /* read */ .open = keypad_open, /* open */ .release = keypad_release, /* close */ diff -u -p a/drivers/staging/poch/poch.c b/drivers/staging/poch/poch.c --- a/drivers/staging/poch/poch.c 2009-02-16 21:07:00.000000000 +0100 +++ b/drivers/staging/poch/poch.c 2009-08-11 22:42:33.000000000 +0200 @@ -1056,7 +1056,7 @@ static int poch_ioctl(struct inode *inod return 0; } -static struct file_operations poch_fops = { +static const struct file_operations poch_fops = { .owner = THIS_MODULE, .open = poch_open, .release = poch_release, diff -u -p a/drivers/staging/rtl8192e/ieee80211/proc.c b/drivers/staging/rtl8192e/ieee80211/proc.c --- a/drivers/staging/rtl8192e/ieee80211/proc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/rtl8192e/ieee80211/proc.c 2009-08-11 22:42:33.000000000 +0200 @@ -99,7 +99,7 @@ static int crypto_info_open(struct inode return seq_open(file, &crypto_seq_ops); } -static struct file_operations proc_crypto_ops = { +static const struct file_operations proc_crypto_ops = { .open = crypto_info_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c --- a/drivers/staging/vme/devices/vme_user.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/staging/vme/devices/vme_user.c 2009-08-11 22:42:40.000000000 +0200 @@ -127,7 +127,7 @@ static int vme_user_ioctl(struct inode * static int __init vme_user_probe(struct device *dev); -static struct file_operations vme_user_fops = { +static const struct file_operations vme_user_fops = { .open = vme_user_open, .release = vme_user_release, .read = vme_user_read, diff -u -p a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c --- a/drivers/usb/class/usbtmc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/drivers/usb/class/usbtmc.c 2009-08-11 22:41:48.000000000 +0200 @@ -985,7 +985,7 @@ skip_io_on_zombie: return retval; } -static struct file_operations fops = { +static const struct file_operations fops = { .owner = THIS_MODULE, .read = usbtmc_read, .write = usbtmc_write, diff -u -p a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c --- a/drivers/usb/gadget/printer.c 2009-03-28 23:34:54.000000000 +0100 +++ b/drivers/usb/gadget/printer.c 2009-08-11 22:41:55.000000000 +0200 @@ -875,7 +875,7 @@ printer_ioctl(struct file *fd, unsigned } /* used after endpoint configuration */ -static struct file_operations printer_io_operations = { +static const struct file_operations printer_io_operations = { .owner = THIS_MODULE, .open = printer_open, .read = printer_read, diff -u -p a/drivers/usb/host/whci/debug.c b/drivers/usb/host/whci/debug.c --- a/drivers/usb/host/whci/debug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/drivers/usb/host/whci/debug.c 2009-08-11 22:41:46.000000000 +0200 @@ -134,7 +134,7 @@ static int pzl_open(struct inode *inode, return single_open(file, pzl_print, inode->i_private); } -static struct file_operations di_fops = { +static const struct file_operations di_fops = { .open = di_open, .read = seq_read, .llseek = seq_lseek, @@ -142,7 +142,7 @@ static struct file_operations di_fops = .owner = THIS_MODULE, }; -static struct file_operations asl_fops = { +static const struct file_operations asl_fops = { .open = asl_open, .read = seq_read, .llseek = seq_lseek, @@ -150,7 +150,7 @@ static struct file_operations asl_fops = .owner = THIS_MODULE, }; -static struct file_operations pzl_fops = { +static const struct file_operations pzl_fops = { .open = pzl_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c --- a/drivers/usb/misc/rio500.c 2009-07-18 21:09:26.000000000 +0200 +++ b/drivers/usb/misc/rio500.c 2009-08-11 22:41:41.000000000 +0200 @@ -429,7 +429,7 @@ read_rio(struct file *file, char __user return read_count; } -static struct +static const struct file_operations usb_rio_fops = { .owner = THIS_MODULE, .read = read_rio, diff -u -p a/drivers/uwb/uwb-debug.c b/drivers/uwb/uwb-debug.c --- a/drivers/uwb/uwb-debug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/drivers/uwb/uwb-debug.c 2009-08-11 22:42:29.000000000 +0200 @@ -205,7 +205,7 @@ static ssize_t command_write(struct file return ret < 0 ? ret : len; } -static struct file_operations command_fops = { +static const struct file_operations command_fops = { .open = command_open, .write = command_write, .read = NULL, @@ -255,7 +255,7 @@ static int reservations_open(struct inod return single_open(file, reservations_print, inode->i_private); } -static struct file_operations reservations_fops = { +static const struct file_operations reservations_fops = { .open = reservations_open, .read = seq_read, .llseek = seq_lseek, @@ -283,7 +283,7 @@ static int drp_avail_open(struct inode * return single_open(file, drp_avail_print, inode->i_private); } -static struct file_operations drp_avail_fops = { +static const struct file_operations drp_avail_fops = { .open = drp_avail_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:14.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:18.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h --- a/fs/btrfs/ctree.h 2009-08-01 12:06:13.000000000 +0200 +++ b/fs/btrfs/ctree.h 2009-08-11 22:42:20.000000000 +0200 @@ -2286,7 +2286,7 @@ int btrfs_sync_file(struct file *file, s int btrfs_drop_extent_cache(struct inode *inode, u64 start, u64 end, int skip_pinned); int btrfs_check_file(struct btrfs_root *root, struct inode *inode); -extern struct file_operations btrfs_file_operations; +extern const struct file_operations btrfs_file_operations; int btrfs_drop_extents(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode, u64 start, u64 end, u64 locked_end, diff -u -p a/fs/btrfs/file.c b/fs/btrfs/file.c --- a/fs/btrfs/file.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/btrfs/file.c 2009-08-11 22:42:19.000000000 +0200 @@ -1215,7 +1215,7 @@ static int btrfs_file_mmap(struct file * return 0; } -struct file_operations btrfs_file_operations = { +const struct file_operations btrfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .aio_read = generic_file_aio_read, diff -u -p a/fs/btrfs/inode.c b/fs/btrfs/inode.c --- a/fs/btrfs/inode.c 2009-08-11 22:10:18.000000000 +0200 +++ b/fs/btrfs/inode.c 2009-08-11 22:42:15.000000000 +0200 @@ -62,7 +62,7 @@ static struct inode_operations btrfs_spe static struct inode_operations btrfs_file_inode_operations; static struct address_space_operations btrfs_aops; static struct address_space_operations btrfs_symlink_aops; -static struct file_operations btrfs_dir_file_operations; +static const struct file_operations btrfs_dir_file_operations; static struct extent_io_ops btrfs_extent_io_ops; static struct kmem_cache *btrfs_inode_cachep; @@ -5216,7 +5216,7 @@ static struct inode_operations btrfs_dir .lookup = btrfs_lookup, .permission = btrfs_permission, }; -static struct file_operations btrfs_dir_file_operations = { +static const struct file_operations btrfs_dir_file_operations = { .llseek = generic_file_llseek, .read = generic_read_dir, .readdir = btrfs_real_readdir, diff -u -p a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c --- a/fs/ext4/mballoc.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/ext4/mballoc.c 2009-08-11 22:42:15.000000000 +0200 @@ -2287,7 +2287,7 @@ static ssize_t ext4_mb_seq_history_write return count; } -static struct file_operations ext4_mb_seq_history_fops = { +static const struct file_operations ext4_mb_seq_history_fops = { .owner = THIS_MODULE, .open = ext4_mb_seq_history_open, .read = seq_read, @@ -2387,7 +2387,7 @@ static int ext4_mb_seq_groups_open(struc } -static struct file_operations ext4_mb_seq_groups_fops = { +static const struct file_operations ext4_mb_seq_groups_fops = { .owner = THIS_MODULE, .open = ext4_mb_seq_groups_open, .read = seq_read, diff -u -p a/fs/jbd2/journal.c b/fs/jbd2/journal.c --- a/fs/jbd2/journal.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/jbd2/journal.c 2009-08-11 22:41:42.000000000 +0200 @@ -818,7 +818,7 @@ static int jbd2_seq_history_release(stru return seq_release(inode, file); } -static struct file_operations jbd2_seq_history_fops = { +static const struct file_operations jbd2_seq_history_fops = { .owner = THIS_MODULE, .open = jbd2_seq_history_open, .read = seq_read, @@ -920,7 +920,7 @@ static int jbd2_seq_info_release(struct return seq_release(inode, file); } -static struct file_operations jbd2_seq_info_fops = { +static const struct file_operations jbd2_seq_info_fops = { .owner = THIS_MODULE, .open = jbd2_seq_info_open, .read = seq_read, diff -u -p a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c --- a/fs/nfsd/nfsctl.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/nfsd/nfsctl.c 2009-08-11 22:41:47.000000000 +0200 @@ -175,7 +175,7 @@ static const struct file_operations expo extern int nfsd_pool_stats_open(struct inode *inode, struct file *file); -static struct file_operations pool_stats_operations = { +static const struct file_operations pool_stats_operations = { .open = nfsd_pool_stats_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c --- a/fs/nilfs2/dir.c 2009-07-18 21:09:26.000000000 +0200 +++ b/fs/nilfs2/dir.c 2009-08-11 22:42:25.000000000 +0200 @@ -697,7 +697,7 @@ not_empty: return 0; } -struct file_operations nilfs_dir_operations = { +const struct file_operations nilfs_dir_operations = { .llseek = generic_file_llseek, .read = generic_read_dir, .readdir = nilfs_readdir, diff -u -p a/fs/nilfs2/file.c b/fs/nilfs2/file.c --- a/fs/nilfs2/file.c 2009-04-13 16:04:31.000000000 +0200 +++ b/fs/nilfs2/file.c 2009-08-11 22:42:25.000000000 +0200 @@ -134,7 +134,7 @@ static int nilfs_file_mmap(struct file * * We have mostly NULL's here: the current defaults are ok for * the nilfs filesystem. */ -struct file_operations nilfs_file_operations = { +const struct file_operations nilfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .write = do_sync_write, diff -u -p a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c --- a/fs/nilfs2/mdt.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/nilfs2/mdt.c 2009-08-11 22:42:25.000000000 +0200 @@ -438,7 +438,7 @@ static struct address_space_operations d }; static struct inode_operations def_mdt_iops; -static struct file_operations def_mdt_fops; +static const struct file_operations def_mdt_fops; /* * NILFS2 uses pseudo inodes for meta data files such as DAT, cpfile, sufile, diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:24.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:25.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h --- a/fs/nilfs2/nilfs.h 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/nilfs2/nilfs.h 2009-08-11 22:42:25.000000000 +0200 @@ -294,9 +294,9 @@ void nilfs_clear_gcdat_inode(struct the_ /* * Inodes and files operations */ -extern struct file_operations nilfs_dir_operations; +extern const struct file_operations nilfs_dir_operations; extern struct inode_operations nilfs_file_inode_operations; -extern struct file_operations nilfs_file_operations; +extern const struct file_operations nilfs_file_operations; extern struct address_space_operations nilfs_aops; extern struct inode_operations nilfs_dir_inode_operations; extern struct inode_operations nilfs_special_inode_operations; diff -u -p a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c --- a/fs/ocfs2/cluster/heartbeat.c 2009-06-15 17:50:05.000000000 +0200 +++ b/fs/ocfs2/cluster/heartbeat.c 2009-08-11 22:42:02.000000000 +0200 @@ -966,7 +966,7 @@ static ssize_t o2hb_debug_read(struct fi } #endif /* CONFIG_DEBUG_FS */ -static struct file_operations o2hb_debug_fops = { +static const struct file_operations o2hb_debug_fops = { .open = o2hb_debug_open, .release = o2hb_debug_release, .read = o2hb_debug_read, diff -u -p a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c --- a/fs/ocfs2/cluster/netdebug.c 2009-01-03 11:31:04.000000000 +0100 +++ b/fs/ocfs2/cluster/netdebug.c 2009-08-11 22:42:02.000000000 +0200 @@ -207,7 +207,7 @@ static int nst_fop_release(struct inode return seq_release_private(inode, file); } -static struct file_operations nst_seq_fops = { +static const struct file_operations nst_seq_fops = { .open = nst_fop_open, .read = seq_read, .llseek = seq_lseek, @@ -388,7 +388,7 @@ static int sc_fop_release(struct inode * return seq_release_private(inode, file); } -static struct file_operations sc_seq_fops = { +static const struct file_operations sc_seq_fops = { .open = sc_fop_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c --- a/fs/ocfs2/dlm/dlmdebug.c 2009-04-13 16:04:31.000000000 +0200 +++ b/fs/ocfs2/dlm/dlmdebug.c 2009-08-11 22:42:04.000000000 +0200 @@ -479,7 +479,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_purgelist_fops = { +static const struct file_operations debug_purgelist_fops = { .open = debug_purgelist_open, .release = debug_buffer_release, .read = debug_buffer_read, @@ -539,7 +539,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_mle_fops = { +static const struct file_operations debug_mle_fops = { .open = debug_mle_open, .release = debug_buffer_release, .read = debug_buffer_read, @@ -742,7 +742,7 @@ static int debug_lockres_release(struct return seq_release_private(inode, file); } -static struct file_operations debug_lockres_fops = { +static const struct file_operations debug_lockres_fops = { .open = debug_lockres_open, .release = debug_lockres_release, .read = seq_read, @@ -926,7 +926,7 @@ bail: return -ENOMEM; } -static struct file_operations debug_state_fops = { +static const struct file_operations debug_state_fops = { .open = debug_state_open, .release = debug_buffer_release, .read = debug_buffer_read, diff -u -p a/fs/ocfs2/super.c b/fs/ocfs2/super.c --- a/fs/ocfs2/super.c 2009-08-11 22:10:22.000000000 +0200 +++ b/fs/ocfs2/super.c 2009-08-11 22:42:08.000000000 +0200 @@ -373,7 +373,7 @@ static ssize_t ocfs2_debug_read(struct f } #endif /* CONFIG_DEBUG_FS */ -static struct file_operations ocfs2_osb_debug_fops = { +static const struct file_operations ocfs2_osb_debug_fops = { .open = ocfs2_osb_debug_open, .release = ocfs2_debug_release, .read = ocfs2_debug_read, diff -u -p a/fs/omfs/dir.c b/fs/omfs/dir.c --- a/fs/omfs/dir.c 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/dir.c 2009-08-11 22:42:01.000000000 +0200 @@ -498,7 +498,7 @@ struct inode_operations omfs_dir_inops = .rmdir = omfs_rmdir, }; -struct file_operations omfs_dir_operations = { +const struct file_operations omfs_dir_operations = { .read = generic_read_dir, .readdir = omfs_readdir, .llseek = generic_file_llseek, diff -u -p a/fs/omfs/file.c b/fs/omfs/file.c --- a/fs/omfs/file.c 2009-06-15 17:50:05.000000000 +0200 +++ b/fs/omfs/file.c 2009-08-11 22:42:01.000000000 +0200 @@ -322,7 +322,7 @@ static sector_t omfs_bmap(struct address return generic_block_bmap(mapping, block, omfs_get_block); } -struct file_operations omfs_file_operations = { +const struct file_operations omfs_file_operations = { .llseek = generic_file_llseek, .read = do_sync_read, .write = do_sync_write, diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:00.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:00.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/omfs/omfs.h b/fs/omfs/omfs.h --- a/fs/omfs/omfs.h 2008-12-07 19:29:06.000000000 +0100 +++ b/fs/omfs/omfs.h 2009-08-11 22:42:01.000000000 +0200 @@ -44,14 +44,14 @@ extern int omfs_allocate_range(struct su extern int omfs_clear_range(struct super_block *sb, u64 block, int count); /* dir.c */ -extern struct file_operations omfs_dir_operations; +extern const struct file_operations omfs_dir_operations; extern struct inode_operations omfs_dir_inops; extern int omfs_make_empty(struct inode *inode, struct super_block *sb); extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, u64 fsblock); /* file.c */ -extern struct file_operations omfs_file_operations; +extern const struct file_operations omfs_file_operations; extern struct inode_operations omfs_file_inops; extern struct address_space_operations omfs_aops; extern void omfs_make_empty_table(struct buffer_head *bh, int offset); diff -u -p a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c --- a/fs/ubifs/xattr.c 2009-06-27 09:35:06.000000000 +0200 +++ b/fs/ubifs/xattr.c 2009-08-11 22:42:24.000000000 +0200 @@ -80,7 +80,7 @@ enum { static struct inode_operations none_inode_operations; static struct address_space_operations none_address_operations; -static struct file_operations none_file_operations; +static const struct file_operations none_file_operations; /** * create_xattr - create an extended attribute. diff -u -p a/kernel/cgroup.c b/kernel/cgroup.c --- a/kernel/cgroup.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/cgroup.c 2009-08-11 22:41:53.000000000 +0200 @@ -597,7 +597,7 @@ static int cgroup_mkdir(struct inode *di static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry); static int cgroup_populate_dir(struct cgroup *cgrp); static struct inode_operations cgroup_dir_inode_operations; -static struct file_operations proc_cgroupstats_operations; +static const struct file_operations proc_cgroupstats_operations; static struct backing_dev_info cgroup_backing_dev_info = { .name = "cgroup", @@ -1644,7 +1644,7 @@ static int cgroup_seqfile_release(struct return single_release(inode, file); } -static struct file_operations cgroup_seqfile_operations = { +static const struct file_operations cgroup_seqfile_operations = { .read = seq_read, .write = cgroup_file_write, .llseek = seq_lseek, @@ -1703,7 +1703,7 @@ static int cgroup_rename(struct inode *o return simple_rename(old_dir, old_dentry, new_dir, new_dentry); } -static struct file_operations cgroup_file_operations = { +static const struct file_operations cgroup_file_operations = { .read = cgroup_file_read, .write = cgroup_file_write, .llseek = generic_file_llseek, @@ -2351,7 +2351,7 @@ static int cgroup_tasks_release(struct i return seq_release(inode, file); } -static struct file_operations cgroup_tasks_operations = { +static const struct file_operations cgroup_tasks_operations = { .read = seq_read, .llseek = seq_lseek, .write = cgroup_file_write, @@ -3017,7 +3017,7 @@ static int cgroup_open(struct inode *ino return single_open(file, proc_cgroup_show, pid); } -struct file_operations proc_cgroup_operations = { +const struct file_operations proc_cgroup_operations = { .open = cgroup_open, .read = seq_read, .llseek = seq_lseek, @@ -3046,7 +3046,7 @@ static int cgroupstats_open(struct inode return single_open(file, proc_cgroupstats_show, NULL); } -static struct file_operations proc_cgroupstats_operations = { +static const struct file_operations proc_cgroupstats_operations = { .open = cgroupstats_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/kernel/kprobes.c b/kernel/kprobes.c --- a/kernel/kprobes.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/kprobes.c 2009-08-11 22:42:18.000000000 +0200 @@ -1333,7 +1333,7 @@ static int __kprobes kprobes_open(struct return seq_open(filp, &kprobes_seq_ops); } -static struct file_operations debugfs_kprobes_operations = { +static const struct file_operations debugfs_kprobes_operations = { .open = kprobes_open, .read = seq_read, .llseek = seq_lseek, @@ -1515,7 +1515,7 @@ static ssize_t write_enabled_file_bool(s return count; } -static struct file_operations fops_kp = { +static const struct file_operations fops_kp = { .read = read_enabled_file_bool, .write = write_enabled_file_bool, }; diff -u -p a/kernel/rcupreempt_trace.c b/kernel/rcupreempt_trace.c --- a/kernel/rcupreempt_trace.c 2009-01-03 11:31:05.000000000 +0100 +++ b/kernel/rcupreempt_trace.c 2009-08-11 22:42:23.000000000 +0200 @@ -261,17 +261,17 @@ static ssize_t rcuctrs_read(struct file return bcount; } -static struct file_operations rcustats_fops = { +static const struct file_operations rcustats_fops = { .owner = THIS_MODULE, .read = rcustats_read, }; -static struct file_operations rcugp_fops = { +static const struct file_operations rcugp_fops = { .owner = THIS_MODULE, .read = rcugp_read, }; -static struct file_operations rcuctrs_fops = { +static const struct file_operations rcuctrs_fops = { .owner = THIS_MODULE, .read = rcuctrs_read, }; diff -u -p a/kernel/rcutree_trace.c b/kernel/rcutree_trace.c --- a/kernel/rcutree_trace.c 2009-06-15 17:50:05.000000000 +0200 +++ b/kernel/rcutree_trace.c 2009-08-11 22:41:49.000000000 +0200 @@ -88,7 +88,7 @@ static int rcudata_open(struct inode *in return single_open(file, show_rcudata, NULL); } -static struct file_operations rcudata_fops = { +static const struct file_operations rcudata_fops = { .owner = THIS_MODULE, .open = rcudata_open, .read = seq_read, @@ -136,7 +136,7 @@ static int rcudata_csv_open(struct inode return single_open(file, show_rcudata_csv, NULL); } -static struct file_operations rcudata_csv_fops = { +static const struct file_operations rcudata_csv_fops = { .owner = THIS_MODULE, .open = rcudata_csv_open, .read = seq_read, @@ -183,7 +183,7 @@ static int rcuhier_open(struct inode *in return single_open(file, show_rcuhier, NULL); } -static struct file_operations rcuhier_fops = { +static const struct file_operations rcuhier_fops = { .owner = THIS_MODULE, .open = rcuhier_open, .read = seq_read, @@ -205,7 +205,7 @@ static int rcugp_open(struct inode *inod return single_open(file, show_rcugp, NULL); } -static struct file_operations rcugp_fops = { +static const struct file_operations rcugp_fops = { .owner = THIS_MODULE, .open = rcugp_open, .read = seq_read, @@ -255,7 +255,7 @@ static int rcu_pending_open(struct inode return single_open(file, show_rcu_pending, NULL); } -static struct file_operations rcu_pending_fops = { +static const struct file_operations rcu_pending_fops = { .owner = THIS_MODULE, .open = rcu_pending_open, .read = seq_read, diff -u -p a/kernel/sched.c b/kernel/sched.c --- a/kernel/sched.c 2009-08-11 22:10:22.000000000 +0200 +++ b/kernel/sched.c 2009-08-11 22:42:06.000000000 +0200 @@ -822,7 +822,7 @@ static int sched_feat_open(struct inode return single_open(filp, sched_feat_show, NULL); } -static struct file_operations sched_feat_fops = { +static const struct file_operations sched_feat_fops = { .open = sched_feat_open, .write = sched_feat_write, .read = seq_read, diff -u -p a/kernel/time/timer_list.c b/kernel/time/timer_list.c --- a/kernel/time/timer_list.c 2008-12-07 19:29:06.000000000 +0100 +++ b/kernel/time/timer_list.c 2009-08-11 22:41:49.000000000 +0200 @@ -275,7 +275,7 @@ static int timer_list_open(struct inode return single_open(filp, timer_list_show, NULL); } -static struct file_operations timer_list_fops = { +static const struct file_operations timer_list_fops = { .open = timer_list_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/kernel/time/timer_stats.c b/kernel/time/timer_stats.c --- a/kernel/time/timer_stats.c 2009-07-04 21:27:34.000000000 +0200 +++ b/kernel/time/timer_stats.c 2009-08-11 22:41:49.000000000 +0200 @@ -395,7 +395,7 @@ static int tstats_open(struct inode *ino return single_open(filp, tstats_show, NULL); } -static struct file_operations tstats_fops = { +static const struct file_operations tstats_fops = { .open = tstats_open, .read = seq_read, .write = tstats_write, diff -u -p a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c --- a/net/ipv6/ip6mr.c 2009-08-11 22:10:22.000000000 +0200 +++ b/net/ipv6/ip6mr.c 2009-08-11 22:41:43.000000000 +0200 @@ -217,7 +217,7 @@ static int ip6mr_vif_open(struct inode * sizeof(struct ipmr_vif_iter)); } -static struct file_operations ip6mr_vif_fops = { +static const struct file_operations ip6mr_vif_fops = { .owner = THIS_MODULE, .open = ip6mr_vif_open, .read = seq_read, @@ -341,7 +341,7 @@ static int ipmr_mfc_open(struct inode *i sizeof(struct ipmr_mfc_iter)); } -static struct file_operations ip6mr_mfc_fops = { +static const struct file_operations ip6mr_mfc_fops = { .owner = THIS_MODULE, .open = ipmr_mfc_open, .read = seq_read, diff -u -p a/net/irda/irproc.c b/net/irda/irproc.c --- a/net/irda/irproc.c 2009-04-13 16:04:31.000000000 +0200 +++ b/net/irda/irproc.c 2009-08-11 22:42:03.000000000 +0200 @@ -34,15 +34,15 @@ #include <net/irda/irlap.h> #include <net/irda/irlmp.h> -extern struct file_operations discovery_seq_fops; -extern struct file_operations irlap_seq_fops; -extern struct file_operations irlmp_seq_fops; -extern struct file_operations irttp_seq_fops; -extern struct file_operations irias_seq_fops; +extern const struct file_operations discovery_seq_fops; +extern const struct file_operations irlap_seq_fops; +extern const struct file_operations irlmp_seq_fops; +extern const struct file_operations irttp_seq_fops; +extern const struct file_operations irias_seq_fops; struct irda_entry { const char *name; - struct file_operations *fops; + const struct file_operations *fops; }; struct proc_dir_entry *proc_irda; diff -u -p a/net/key/af_key.c b/net/key/af_key.c --- a/net/key/af_key.c 2009-06-24 21:18:51.000000000 +0200 +++ b/net/key/af_key.c 2009-08-11 22:42:07.000000000 +0200 @@ -3718,7 +3718,7 @@ static int pfkey_seq_open(struct inode * sizeof(struct seq_net_private)); } -static struct file_operations pfkey_proc_ops = { +static const struct file_operations pfkey_proc_ops = { .open = pfkey_seq_open, .read = seq_read, .llseek = seq_lseek, diff -u -p a/net/mac80211/rc80211_minstrel_debugfs.c b/net/mac80211/rc80211_minstrel_debugfs.c --- a/net/mac80211/rc80211_minstrel_debugfs.c 2008-12-07 19:29:04.000000000 +0100 +++ b/net/mac80211/rc80211_minstrel_debugfs.c 2009-08-11 22:41:53.000000000 +0200 @@ -139,7 +139,7 @@ minstrel_stats_release(struct inode *ino return 0; } -static struct file_operations minstrel_stat_fops = { +static const struct file_operations minstrel_stat_fops = { .owner = THIS_MODULE, .open = minstrel_stats_open, .read = minstrel_stats_read, diff -u -p a/net/mac80211/rc80211_pid_debugfs.c b/net/mac80211/rc80211_pid_debugfs.c --- a/net/mac80211/rc80211_pid_debugfs.c 2009-01-03 11:31:05.000000000 +0100 +++ b/net/mac80211/rc80211_pid_debugfs.c 2009-08-11 22:41:54.000000000 +0200 @@ -198,7 +198,7 @@ static ssize_t rate_control_pid_events_r #undef RC_PID_PRINT_BUF_SIZE -static struct file_operations rc_pid_fop_events = { +static const struct file_operations rc_pid_fop_events = { .owner = THIS_MODULE, .read = rate_control_pid_events_read, .poll = rate_control_pid_events_poll, diff -u -p a/net/xfrm/xfrm_proc.c b/net/xfrm/xfrm_proc.c --- a/net/xfrm/xfrm_proc.c 2009-01-03 11:31:05.000000000 +0100 +++ b/net/xfrm/xfrm_proc.c 2009-08-11 22:42:30.000000000 +0200 @@ -60,7 +60,7 @@ static int xfrm_statistics_seq_open(stru return single_open_net(inode, file, xfrm_statistics_seq_show); } -static struct file_operations xfrm_statistics_seq_fops = { +static const struct file_operations xfrm_statistics_seq_fops = { .owner = THIS_MODULE, .open = xfrm_statistics_seq_open, .read = seq_read, diff -u -p a/samples/markers/marker-example.c b/samples/markers/marker-example.c --- a/samples/markers/marker-example.c 2009-01-09 22:41:02.000000000 +0100 +++ b/samples/markers/marker-example.c 2009-08-11 22:42:14.000000000 +0200 @@ -26,7 +26,7 @@ static int my_open(struct inode *inode, return -EPERM; } -static struct file_operations mark_ops = { +static const struct file_operations mark_ops = { .open = my_open, }; diff -u -p a/samples/tracepoints/tracepoint-sample.c b/samples/tracepoints/tracepoint-sample.c --- a/samples/tracepoints/tracepoint-sample.c 2009-04-13 16:04:31.000000000 +0200 +++ b/samples/tracepoints/tracepoint-sample.c 2009-08-11 22:42:14.000000000 +0200 @@ -28,7 +28,7 @@ static int my_open(struct inode *inode, return -EPERM; } -static struct file_operations mark_ops = { +static const struct file_operations mark_ops = { .open = my_open, }; diff -u -p a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c --- a/scripts/mod/file2alias.c 2009-06-15 17:50:05.000000000 +0200 +++ b/scripts/mod/file2alias.c 2009-08-11 22:42:15.000000000 +0200 @@ -530,7 +530,7 @@ static void do_input(char *alias, } /* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */ -static int do_input_entry(const char *filename, struct input_device_id *id, +static int do_input_entry(const char *filename, const struct input_device_id *id, char *alias) { sprintf(alias, "input:"); diff -u -p a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c --- a/security/integrity/ima/ima_fs.c 2009-06-15 17:50:05.000000000 +0200 +++ b/security/integrity/ima/ima_fs.c 2009-08-11 22:42:15.000000000 +0200 @@ -43,7 +43,7 @@ static ssize_t ima_show_htable_violation return ima_show_htable_value(buf, count, ppos, &ima_htable.violations); } -static struct file_operations ima_htable_violations_ops = { +static const struct file_operations ima_htable_violations_ops = { .read = ima_show_htable_violations }; @@ -55,7 +55,7 @@ static ssize_t ima_show_measurements_cou } -static struct file_operations ima_measurements_count_ops = { +static const struct file_operations ima_measurements_count_ops = { .read = ima_show_measurements_count }; @@ -158,7 +158,7 @@ static int ima_measurements_open(struct return seq_open(file, &ima_measurments_seqops); } -static struct file_operations ima_measurements_ops = { +static const struct file_operations ima_measurements_ops = { .open = ima_measurements_open, .read = seq_read, .llseek = seq_lseek, @@ -233,7 +233,7 @@ static int ima_ascii_measurements_open(s return seq_open(file, &ima_ascii_measurements_seqops); } -static struct file_operations ima_ascii_measurements_ops = { +static const struct file_operations ima_ascii_measurements_ops = { .open = ima_ascii_measurements_open, .read = seq_read, .llseek = seq_lseek, @@ -313,7 +313,7 @@ static int ima_release_policy(struct ino return 0; } -static struct file_operations ima_measure_policy_ops = { +static const struct file_operations ima_measure_policy_ops = { .open = ima_open_policy, .write = ima_write_policy, .release = ima_release_policy diff -u -p a/sound/oss/au1550_ac97.c b/sound/oss/au1550_ac97.c --- a/sound/oss/au1550_ac97.c 2009-03-28 23:34:55.000000000 +0100 +++ b/sound/oss/au1550_ac97.c 2009-08-11 22:42:25.000000000 +0200 @@ -831,7 +831,7 @@ au1550_ioctl_mixdev(struct inode *inode, return mixdev_ioctl(codec, cmd, arg); } -static /*const */ struct file_operations au1550_mixer_fops = { +static /*const */ const struct file_operations au1550_mixer_fops = { owner:THIS_MODULE, llseek:au1550_llseek, ioctl:au1550_ioctl_mixdev, @@ -1880,7 +1880,7 @@ au1550_release(struct inode *inode, stru return 0; } -static /*const */ struct file_operations au1550_audio_fops = { +static /*const */ const struct file_operations au1550_audio_fops = { owner: THIS_MODULE, llseek: au1550_llseek, read: au1550_read, ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 19:47 ` Julia Lawall @ 2009-08-15 9:15 ` Artem Bityutskiy -1 siblings, 0 replies; 14+ messages in thread From: Artem Bityutskiy @ 2009-08-15 9:15 UTC (permalink / raw) To: Julia Lawall Cc: James Morris, Serge E. Hallyn, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors On 08/11/2009 10:47 PM, Julia Lawall wrote: > A while ago I made a semantic patch to introduce const on file_operations > and and input_device_id types. I tested it on 142 files in which the > change had already been made and got the same result in each case. I have > run it on linux-next and obtained the attached result. However, I have > not checked any of these results, so this is not meant as a submitted > patch, but as a starting point for someone who wants to look further into > the problem. > > julia > snip > diff -u -p a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c > --- a/fs/ubifs/xattr.c 2009-06-27 09:35:06.000000000 +0200 > +++ b/fs/ubifs/xattr.c 2009-08-11 22:42:24.000000000 +0200 > @@ -80,7 +80,7 @@ enum { > > static struct inode_operations none_inode_operations; > static struct address_space_operations none_address_operations; > -static struct file_operations none_file_operations; > +static const struct file_operations none_file_operations; Fixed this in UBIFS. Also made the inode operation const. Thanks. Pushed to ubifs-2.6.git: http://git.infradead.org/ubifs-2.6.git/commit/2d132c333e9f88684801c9b80e6ba086da4f0ea0 -- Best Regards, Artem Bityutskiy (Артём Битюцкий) ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-15 9:15 ` Artem Bityutskiy 0 siblings, 0 replies; 14+ messages in thread From: Artem Bityutskiy @ 2009-08-15 9:15 UTC (permalink / raw) To: Julia Lawall Cc: James Morris, Serge E. Hallyn, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors On 08/11/2009 10:47 PM, Julia Lawall wrote: > A while ago I made a semantic patch to introduce const on file_operations > and and input_device_id types. I tested it on 142 files in which the > change had already been made and got the same result in each case. I have > run it on linux-next and obtained the attached result. However, I have > not checked any of these results, so this is not meant as a submitted > patch, but as a starting point for someone who wants to look further into > the problem. > > julia > snip > diff -u -p a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c > --- a/fs/ubifs/xattr.c 2009-06-27 09:35:06.000000000 +0200 > +++ b/fs/ubifs/xattr.c 2009-08-11 22:42:24.000000000 +0200 > @@ -80,7 +80,7 @@ enum { > > static struct inode_operations none_inode_operations; > static struct address_space_operations none_address_operations; > -static struct file_operations none_file_operations; > +static const struct file_operations none_file_operations; Fixed this in UBIFS. Also made the inode operation const. Thanks. Pushed to ubifs-2.6.git: http://git.infradead.org/ubifs-2.6.git/commit/2d132c333e9f88684801c9b80e6ba086da4f0ea0 -- Best Regards, Artem Bityutskiy (Артём Битюцкий) ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 14:36 ` Serge E. Hallyn @ 2009-08-12 4:28 ` Arjan van de Ven -1 siblings, 0 replies; 14+ messages in thread From: Arjan van de Ven @ 2009-08-12 4:28 UTC (permalink / raw) To: Serge E. Hallyn Cc: James Morris, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, kernel-janitors On Tue, 11 Aug 2009 09:36:43 -0500 "Serge E. Hallyn" <serue@us.ibm.com> wrote: > Quoting James Morris (jmorris@namei.org): > > I think it'd be a good idea to constify more of the various > > operations structs in the kernel -- our coverage of this is spotty. > > > > The patch below should provide coverage for all of the eligible > > seq_operations structs in the kernel. It's derived from the > > grsecurity patch (which I was reading and noticed how many of these > > we're missing). > > > > It's possible something's been missed, or that there are problems > > in code which I can't test. Please review/comment/test. > > > > If it looks ok, I suggest pushing this via -mm. > > > > Note that there are quite a few other similar ops to be constified, > > such as file_operations, so if anyone would like to pitch in, > > please do so. > > > > --- > > > > Subject: [PATCH 1/1] security: constify seq_operations > > > > Make all seq_operations structs const, to help mitigate > > against revectoring user-triggerable function pointers. > > > > This is derived from the grsecurity patch, although generated > > from scratch because it's simpler than extracting the changes > > from there. > > > > Signed-off-by: James Morris <jmorris@namei.org> > > I think it's a good idea. > > I suppose we could add a script to check for any new > seq_ops structs not constified... something as simple as > find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep > -v const Though what you have here hits all of those and more. > that's what checkpatch.pl is for (afaik it does that already for file_operations) -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-12 4:28 ` Arjan van de Ven 0 siblings, 0 replies; 14+ messages in thread From: Arjan van de Ven @ 2009-08-12 4:28 UTC (permalink / raw) To: Serge E. Hallyn Cc: James Morris, Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, kernel-janitors On Tue, 11 Aug 2009 09:36:43 -0500 "Serge E. Hallyn" <serue@us.ibm.com> wrote: > Quoting James Morris (jmorris@namei.org): > > I think it'd be a good idea to constify more of the various > > operations structs in the kernel -- our coverage of this is spotty. > > > > The patch below should provide coverage for all of the eligible > > seq_operations structs in the kernel. It's derived from the > > grsecurity patch (which I was reading and noticed how many of these > > we're missing). > > > > It's possible something's been missed, or that there are problems > > in code which I can't test. Please review/comment/test. > > > > If it looks ok, I suggest pushing this via -mm. > > > > Note that there are quite a few other similar ops to be constified, > > such as file_operations, so if anyone would like to pitch in, > > please do so. > > > > --- > > > > Subject: [PATCH 1/1] security: constify seq_operations > > > > Make all seq_operations structs const, to help mitigate > > against revectoring user-triggerable function pointers. > > > > This is derived from the grsecurity patch, although generated > > from scratch because it's simpler than extracting the changes > > from there. > > > > Signed-off-by: James Morris <jmorris@namei.org> > > I think it's a good idea. > > I suppose we could add a script to check for any new > seq_ops structs not constified... something as simple as > find . -type f -print0 | xargs -0 grep 'struct seq_operations' | grep > -v const Though what you have here hits all of those and more. > that's what checkpatch.pl is for (afaik it does that already for file_operations) -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations 2009-08-11 13:52 ` James Morris @ 2009-08-12 17:08 ` Casey Schaufler -1 siblings, 0 replies; 14+ messages in thread From: Casey Schaufler @ 2009-08-12 17:08 UTC (permalink / raw) To: James Morris Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors James Morris wrote: > I think it'd be a good idea to constify more of the various operations > structs in the kernel -- our coverage of this is spotty. > > The patch below should provide coverage for all of the eligible > seq_operations structs in the kernel. It's derived from the grsecurity > patch (which I was reading and noticed how many of these we're missing). > > It's possible something's been missed, or that there are problems in code > which I can't test. Please review/comment/test. > > If it looks ok, I suggest pushing this via -mm. > > Note that there are quite a few other similar ops to be constified, such > as file_operations, so if anyone would like to pitch in, please do so. > > --- > > Subject: [PATCH 1/1] security: constify seq_operations > > Make all seq_operations structs const, to help mitigate > against revectoring user-triggerable function pointers. > > This is derived from the grsecurity patch, although generated > from scratch because it's simpler than extracting the changes > from there. > > Signed-off-by: James Morris <jmorris@namei.org> > Acked-by: Casey Schaufler <casey@schaufler-ca.com> For the Smack parts. Looks OK. > --- > arch/mn10300/kernel/setup.c | 2 +- > arch/powerpc/kernel/setup-common.c | 2 +- > arch/powerpc/platforms/pseries/hvCall_inst.c | 2 +- > arch/x86/mm/pat.c | 2 +- > drivers/block/cciss.c | 2 +- > drivers/char/misc.c | 2 +- > drivers/char/tpm/tpm_bios.c | 4 ++-- > drivers/isdn/capi/kcapi_proc.c | 10 +++++----- > drivers/scsi/sg.c | 6 +++--- > drivers/staging/rtl8192su/ieee80211/proc.c | 2 +- > fs/afs/proc.c | 8 ++++---- > fs/dlm/debug_fs.c | 12 ++++++------ > fs/ext4/mballoc.c | 4 ++-- > fs/jbd2/journal.c | 4 ++-- > fs/nfs/client.c | 4 ++-- > fs/nfsd/export.c | 2 +- > fs/ocfs2/cluster/netdebug.c | 4 ++-- > fs/ocfs2/dlm/dlmdebug.c | 2 +- > fs/proc/nommu.c | 2 +- > include/linux/nfsd/nfsd.h | 2 +- > ipc/util.c | 2 +- > kernel/cgroup.c | 2 +- > kernel/kprobes.c | 2 +- > kernel/lockdep_proc.c | 2 +- > kernel/trace/ftrace.c | 4 ++-- > kernel/trace/trace.c | 4 ++-- > net/ipv6/ip6mr.c | 4 ++-- > net/key/af_key.c | 2 +- > security/integrity/ima/ima_fs.c | 4 ++-- > security/smack/smackfs.c | 6 +++--- > 30 files changed, 55 insertions(+), 55 deletions(-) > > diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c > index 79890ed..3f24c29 100644 > --- a/arch/mn10300/kernel/setup.c > +++ b/arch/mn10300/kernel/setup.c > @@ -285,7 +285,7 @@ static void c_stop(struct seq_file *m, void *v) > { > } > > -struct seq_operations cpuinfo_op = { > +const struct seq_operations cpuinfo_op = { > .start = c_start, > .next = c_next, > .stop = c_stop, > diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c > index 02fed27..1d5570a 100644 > --- a/arch/powerpc/kernel/setup-common.c > +++ b/arch/powerpc/kernel/setup-common.c > @@ -328,7 +328,7 @@ static void c_stop(struct seq_file *m, void *v) > { > } > > -struct seq_operations cpuinfo_op = { > +const struct seq_operations cpuinfo_op = { > .start =c_start, > .next = c_next, > .stop = c_stop, > diff --git a/arch/powerpc/platforms/pseries/hvCall_inst.c b/arch/powerpc/platforms/pseries/hvCall_inst.c > index eae51ef..3631a4f 100644 > --- a/arch/powerpc/platforms/pseries/hvCall_inst.c > +++ b/arch/powerpc/platforms/pseries/hvCall_inst.c > @@ -71,7 +71,7 @@ static int hc_show(struct seq_file *m, void *p) > return 0; > } > > -static struct seq_operations hcall_inst_seq_ops = { > +static const struct seq_operations hcall_inst_seq_ops = { > .start = hc_start, > .next = hc_next, > .stop = hc_stop, > diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c > index e6718bb..e2900a3 100644 > --- a/arch/x86/mm/pat.c > +++ b/arch/x86/mm/pat.c > @@ -826,7 +826,7 @@ static int memtype_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations memtype_seq_ops = { > +static const struct seq_operations memtype_seq_ops = { > .start = memtype_seq_start, > .next = memtype_seq_next, > .stop = memtype_seq_stop, > diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c > index a52cc7f..7404f83 100644 > --- a/drivers/block/cciss.c > +++ b/drivers/block/cciss.c > @@ -363,7 +363,7 @@ static void cciss_seq_stop(struct seq_file *seq, void *v) > h->busy_configuring = 0; > } > > -static struct seq_operations cciss_seq_ops = { > +static const struct seq_operations cciss_seq_ops = { > .start = cciss_seq_start, > .show = cciss_seq_show, > .next = cciss_seq_next, > diff --git a/drivers/char/misc.c b/drivers/char/misc.c > index 62c99fa..9eaf8c4 100644 > --- a/drivers/char/misc.c > +++ b/drivers/char/misc.c > @@ -91,7 +91,7 @@ static int misc_seq_show(struct seq_file *seq, void *v) > } > > > -static struct seq_operations misc_seq_ops = { > +static const struct seq_operations misc_seq_ops = { > .start = misc_seq_start, > .next = misc_seq_next, > .stop = misc_seq_stop, > diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c > index 0c2f55a..bf2170f 100644 > --- a/drivers/char/tpm/tpm_bios.c > +++ b/drivers/char/tpm/tpm_bios.c > @@ -343,14 +343,14 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations tpm_ascii_b_measurments_seqops = { > +static const struct seq_operations tpm_ascii_b_measurments_seqops = { > .start = tpm_bios_measurements_start, > .next = tpm_bios_measurements_next, > .stop = tpm_bios_measurements_stop, > .show = tpm_ascii_bios_measurements_show, > }; > > -static struct seq_operations tpm_binary_b_measurments_seqops = { > +static const struct seq_operations tpm_binary_b_measurments_seqops = { > .start = tpm_bios_measurements_start, > .next = tpm_bios_measurements_next, > .stop = tpm_bios_measurements_stop, > diff --git a/drivers/isdn/capi/kcapi_proc.c b/drivers/isdn/capi/kcapi_proc.c > index 50ed778..09d4db7 100644 > --- a/drivers/isdn/capi/kcapi_proc.c > +++ b/drivers/isdn/capi/kcapi_proc.c > @@ -89,14 +89,14 @@ static int contrstats_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_controller_ops = { > +static const struct seq_operations seq_controller_ops = { > .start = controller_start, > .next = controller_next, > .stop = controller_stop, > .show = controller_show, > }; > > -static struct seq_operations seq_contrstats_ops = { > +static const struct seq_operations seq_contrstats_ops = { > .start = controller_start, > .next = controller_next, > .stop = controller_stop, > @@ -194,14 +194,14 @@ applstats_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_applications_ops = { > +static const struct seq_operations seq_applications_ops = { > .start = applications_start, > .next = applications_next, > .stop = applications_stop, > .show = applications_show, > }; > > -static struct seq_operations seq_applstats_ops = { > +static const struct seq_operations seq_applstats_ops = { > .start = applications_start, > .next = applications_next, > .stop = applications_stop, > @@ -264,7 +264,7 @@ static int capi_driver_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_capi_driver_ops = { > +static const struct seq_operations seq_capi_driver_ops = { > .start = capi_driver_start, > .next = capi_driver_next, > .stop = capi_driver_stop, > diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c > index 9230402..7eee714 100644 > --- a/drivers/scsi/sg.c > +++ b/drivers/scsi/sg.c > @@ -2233,7 +2233,7 @@ static struct file_operations dev_fops = { > .open = sg_proc_open_dev, > .release = seq_release, > }; > -static struct seq_operations dev_seq_ops = { > +static const struct seq_operations dev_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > @@ -2246,7 +2246,7 @@ static struct file_operations devstrs_fops = { > .open = sg_proc_open_devstrs, > .release = seq_release, > }; > -static struct seq_operations devstrs_seq_ops = { > +static const struct seq_operations devstrs_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > @@ -2259,7 +2259,7 @@ static struct file_operations debug_fops = { > .open = sg_proc_open_debug, > .release = seq_release, > }; > -static struct seq_operations debug_seq_ops = { > +static const struct seq_operations debug_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > diff --git a/drivers/staging/rtl8192su/ieee80211/proc.c b/drivers/staging/rtl8192su/ieee80211/proc.c > index 4f3f9ed..df96ad5 100644 > --- a/drivers/staging/rtl8192su/ieee80211/proc.c > +++ b/drivers/staging/rtl8192su/ieee80211/proc.c > @@ -87,7 +87,7 @@ static int c_show(struct seq_file *m, void *p) > return 0; > } > > -static struct seq_operations crypto_seq_ops = { > +static const struct seq_operations crypto_seq_ops = { > .start = c_start, > .next = c_next, > .stop = c_stop, > diff --git a/fs/afs/proc.c b/fs/afs/proc.c > index 8630615..852739d 100644 > --- a/fs/afs/proc.c > +++ b/fs/afs/proc.c > @@ -28,7 +28,7 @@ static int afs_proc_cells_show(struct seq_file *m, void *v); > static ssize_t afs_proc_cells_write(struct file *file, const char __user *buf, > size_t size, loff_t *_pos); > > -static struct seq_operations afs_proc_cells_ops = { > +static const struct seq_operations afs_proc_cells_ops = { > .start = afs_proc_cells_start, > .next = afs_proc_cells_next, > .stop = afs_proc_cells_stop, > @@ -70,7 +70,7 @@ static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, > static void afs_proc_cell_volumes_stop(struct seq_file *p, void *v); > static int afs_proc_cell_volumes_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_volumes_ops = { > +static const struct seq_operations afs_proc_cell_volumes_ops = { > .start = afs_proc_cell_volumes_start, > .next = afs_proc_cell_volumes_next, > .stop = afs_proc_cell_volumes_stop, > @@ -95,7 +95,7 @@ static void *afs_proc_cell_vlservers_next(struct seq_file *p, void *v, > static void afs_proc_cell_vlservers_stop(struct seq_file *p, void *v); > static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_vlservers_ops = { > +static const struct seq_operations afs_proc_cell_vlservers_ops = { > .start = afs_proc_cell_vlservers_start, > .next = afs_proc_cell_vlservers_next, > .stop = afs_proc_cell_vlservers_stop, > @@ -119,7 +119,7 @@ static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, > static void afs_proc_cell_servers_stop(struct seq_file *p, void *v); > static int afs_proc_cell_servers_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_servers_ops = { > +static const struct seq_operations afs_proc_cell_servers_ops = { > .start = afs_proc_cell_servers_start, > .next = afs_proc_cell_servers_next, > .stop = afs_proc_cell_servers_stop, > diff --git a/fs/dlm/debug_fs.c b/fs/dlm/debug_fs.c > index 1d1d274..1c8bb8c 100644 > --- a/fs/dlm/debug_fs.c > +++ b/fs/dlm/debug_fs.c > @@ -386,9 +386,9 @@ static int table_seq_show(struct seq_file *seq, void *iter_ptr) > return rv; > } > > -static struct seq_operations format1_seq_ops; > -static struct seq_operations format2_seq_ops; > -static struct seq_operations format3_seq_ops; > +static const struct seq_operations format1_seq_ops; > +static const struct seq_operations format2_seq_ops; > +static const struct seq_operations format3_seq_ops; > > static void *table_seq_start(struct seq_file *seq, loff_t *pos) > { > @@ -534,21 +534,21 @@ static void table_seq_stop(struct seq_file *seq, void *iter_ptr) > } > } > > -static struct seq_operations format1_seq_ops = { > +static const struct seq_operations format1_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > .show = table_seq_show, > }; > > -static struct seq_operations format2_seq_ops = { > +static const struct seq_operations format2_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > .show = table_seq_show, > }; > > -static struct seq_operations format3_seq_ops = { > +static const struct seq_operations format3_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index cd25846..a891a06 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -2205,7 +2205,7 @@ static void ext4_mb_seq_history_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations ext4_mb_seq_history_ops = { > +static const struct seq_operations ext4_mb_seq_history_ops = { > .start = ext4_mb_seq_history_start, > .next = ext4_mb_seq_history_next, > .stop = ext4_mb_seq_history_stop, > @@ -2366,7 +2366,7 @@ static void ext4_mb_seq_groups_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations ext4_mb_seq_groups_ops = { > +static const struct seq_operations ext4_mb_seq_groups_ops = { > .start = ext4_mb_seq_groups_start, > .next = ext4_mb_seq_groups_next, > .stop = ext4_mb_seq_groups_stop, > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c > index e378cb3..02b1092 100644 > --- a/fs/jbd2/journal.c > +++ b/fs/jbd2/journal.c > @@ -768,7 +768,7 @@ static void jbd2_seq_history_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations jbd2_seq_history_ops = { > +static const struct seq_operations jbd2_seq_history_ops = { > .start = jbd2_seq_history_start, > .next = jbd2_seq_history_next, > .stop = jbd2_seq_history_stop, > @@ -872,7 +872,7 @@ static void jbd2_seq_info_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations jbd2_seq_info_ops = { > +static const struct seq_operations jbd2_seq_info_ops = { > .start = jbd2_seq_info_start, > .next = jbd2_seq_info_next, > .stop = jbd2_seq_info_stop, > diff --git a/fs/nfs/client.c b/fs/nfs/client.c > index 8d25ccb..238d850 100644 > --- a/fs/nfs/client.c > +++ b/fs/nfs/client.c > @@ -1533,7 +1533,7 @@ static void *nfs_server_list_next(struct seq_file *p, void *v, loff_t *pos); > static void nfs_server_list_stop(struct seq_file *p, void *v); > static int nfs_server_list_show(struct seq_file *m, void *v); > > -static struct seq_operations nfs_server_list_ops = { > +static const struct seq_operations nfs_server_list_ops = { > .start = nfs_server_list_start, > .next = nfs_server_list_next, > .stop = nfs_server_list_stop, > @@ -1554,7 +1554,7 @@ static void *nfs_volume_list_next(struct seq_file *p, void *v, loff_t *pos); > static void nfs_volume_list_stop(struct seq_file *p, void *v); > static int nfs_volume_list_show(struct seq_file *m, void *v); > > -static struct seq_operations nfs_volume_list_ops = { > +static const struct seq_operations nfs_volume_list_ops = { > .start = nfs_volume_list_start, > .next = nfs_volume_list_next, > .stop = nfs_volume_list_stop, > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index b92a276..a5e516b 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -1505,7 +1505,7 @@ static int e_show(struct seq_file *m, void *p) > return svc_export_show(m, &svc_export_cache, cp); > } > > -struct seq_operations nfs_exports_op = { > +const struct seq_operations nfs_exports_op = { > .start = e_start, > .next = e_next, > .stop = e_stop, > diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c > index f842487..cfb2be7 100644 > --- a/fs/ocfs2/cluster/netdebug.c > +++ b/fs/ocfs2/cluster/netdebug.c > @@ -163,7 +163,7 @@ static void nst_seq_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations nst_seq_ops = { > +static const struct seq_operations nst_seq_ops = { > .start = nst_seq_start, > .next = nst_seq_next, > .stop = nst_seq_stop, > @@ -344,7 +344,7 @@ static void sc_seq_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations sc_seq_ops = { > +static const struct seq_operations sc_seq_ops = { > .start = sc_seq_start, > .next = sc_seq_next, > .stop = sc_seq_stop, > diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c > index df52f70..c5c8812 100644 > --- a/fs/ocfs2/dlm/dlmdebug.c > +++ b/fs/ocfs2/dlm/dlmdebug.c > @@ -683,7 +683,7 @@ static int lockres_seq_show(struct seq_file *s, void *v) > return 0; > } > > -static struct seq_operations debug_lockres_ops = { > +static const struct seq_operations debug_lockres_ops = { > .start = lockres_seq_start, > .stop = lockres_seq_stop, > .next = lockres_seq_next, > diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c > index 7e14d1a..9fe7d7e 100644 > --- a/fs/proc/nommu.c > +++ b/fs/proc/nommu.c > @@ -109,7 +109,7 @@ static void *nommu_region_list_next(struct seq_file *m, void *v, loff_t *pos) > return rb_next((struct rb_node *) v); > } > > -static struct seq_operations proc_nommu_region_list_seqop = { > +static const struct seq_operations proc_nommu_region_list_seqop = { > .start = nommu_region_list_start, > .next = nommu_region_list_next, > .stop = nommu_region_list_stop, > diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h > index 2b49d67..99a0b07 100644 > --- a/include/linux/nfsd/nfsd.h > +++ b/include/linux/nfsd/nfsd.h > @@ -57,7 +57,7 @@ extern u32 nfsd_supported_minorversion; > extern struct mutex nfsd_mutex; > extern struct svc_serv *nfsd_serv; > > -extern struct seq_operations nfs_exports_op; > +extern const struct seq_operations nfs_exports_op; > > /* > * Function prototypes. > diff --git a/ipc/util.c b/ipc/util.c > index b8e4ba9..79ce84e 100644 > --- a/ipc/util.c > +++ b/ipc/util.c > @@ -942,7 +942,7 @@ static int sysvipc_proc_show(struct seq_file *s, void *it) > return iface->show(s, it); > } > > -static struct seq_operations sysvipc_proc_seqops = { > +static const struct seq_operations sysvipc_proc_seqops = { > .start = sysvipc_proc_start, > .stop = sysvipc_proc_stop, > .next = sysvipc_proc_next, > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index b6eadfe..f96c026 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -2313,7 +2313,7 @@ static int cgroup_tasks_show(struct seq_file *s, void *v) > return seq_printf(s, "%d\n", *(int *)v); > } > > -static struct seq_operations cgroup_tasks_seq_operations = { > +static const struct seq_operations cgroup_tasks_seq_operations = { > .start = cgroup_tasks_start, > .stop = cgroup_tasks_stop, > .next = cgroup_tasks_next, > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index 0540948..013736c 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -1329,7 +1329,7 @@ static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) > return 0; > } > > -static struct seq_operations kprobes_seq_ops = { > +static const struct seq_operations kprobes_seq_ops = { > .start = kprobe_seq_start, > .next = kprobe_seq_next, > .stop = kprobe_seq_stop, > diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c > index e94caa6..0700c1d 100644 > --- a/kernel/lockdep_proc.c > +++ b/kernel/lockdep_proc.c > @@ -670,7 +670,7 @@ static int ls_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations lockstat_ops = { > +static const struct seq_operations lockstat_ops = { > .start = ls_start, > .next = ls_next, > .stop = ls_stop, > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > index 1e1d23c..4b07920 100644 > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -1567,7 +1567,7 @@ static int t_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations show_ftrace_seq_ops = { > +static const struct seq_operations show_ftrace_seq_ops = { > .start = t_start, > .next = t_next, > .stop = t_stop, > @@ -2560,7 +2560,7 @@ static int g_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ftrace_graph_seq_ops = { > +static const struct seq_operations ftrace_graph_seq_ops = { > .start = g_start, > .next = g_next, > .stop = g_stop, > diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c > index c22b40f..2eb8ee0 100644 > --- a/kernel/trace/trace.c > +++ b/kernel/trace/trace.c > @@ -1885,7 +1885,7 @@ static int s_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations tracer_seq_ops = { > +static const struct seq_operations tracer_seq_ops = { > .start = s_start, > .next = s_next, > .stop = s_stop, > @@ -2097,7 +2097,7 @@ static int t_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations show_traces_seq_ops = { > +static const struct seq_operations show_traces_seq_ops = { > .start = t_start, > .next = t_next, > .stop = t_stop, > diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c > index c769f15..e17588b 100644 > --- a/net/ipv6/ip6mr.c > +++ b/net/ipv6/ip6mr.c > @@ -204,7 +204,7 @@ static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations ip6mr_vif_seq_ops = { > +static const struct seq_operations ip6mr_vif_seq_ops = { > .start = ip6mr_vif_seq_start, > .next = ip6mr_vif_seq_next, > .stop = ip6mr_vif_seq_stop, > @@ -328,7 +328,7 @@ static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations ipmr_mfc_seq_ops = { > +static const struct seq_operations ipmr_mfc_seq_ops = { > .start = ipmr_mfc_seq_start, > .next = ipmr_mfc_seq_next, > .stop = ipmr_mfc_seq_stop, > diff --git a/net/key/af_key.c b/net/key/af_key.c > index dba9abd..7b1e99b 100644 > --- a/net/key/af_key.c > +++ b/net/key/af_key.c > @@ -3705,7 +3705,7 @@ static void pfkey_seq_stop(struct seq_file *f, void *v) > read_unlock(&pfkey_table_lock); > } > > -static struct seq_operations pfkey_seq_ops = { > +static const struct seq_operations pfkey_seq_ops = { > .start = pfkey_seq_start, > .next = pfkey_seq_next, > .stop = pfkey_seq_stop, > diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c > index 6bfc7ea..8e9777b 100644 > --- a/security/integrity/ima/ima_fs.c > +++ b/security/integrity/ima/ima_fs.c > @@ -146,7 +146,7 @@ static int ima_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ima_measurments_seqops = { > +static const struct seq_operations ima_measurments_seqops = { > .start = ima_measurements_start, > .next = ima_measurements_next, > .stop = ima_measurements_stop, > @@ -221,7 +221,7 @@ static int ima_ascii_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ima_ascii_measurements_seqops = { > +static const struct seq_operations ima_ascii_measurements_seqops = { > .start = ima_measurements_start, > .next = ima_measurements_next, > .stop = ima_measurements_stop, > diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c > index f83a809..aeead75 100644 > --- a/security/smack/smackfs.c > +++ b/security/smack/smackfs.c > @@ -187,7 +187,7 @@ static void load_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations load_seq_ops = { > +static const struct seq_operations load_seq_ops = { > .start = load_seq_start, > .next = load_seq_next, > .show = load_seq_show, > @@ -503,7 +503,7 @@ static void cipso_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations cipso_seq_ops = { > +static const struct seq_operations cipso_seq_ops = { > .start = cipso_seq_start, > .stop = cipso_seq_stop, > .next = cipso_seq_next, > @@ -697,7 +697,7 @@ static void netlbladdr_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations netlbladdr_seq_ops = { > +static const struct seq_operations netlbladdr_seq_ops = { > .start = netlbladdr_seq_start, > .stop = netlbladdr_seq_stop, > .next = netlbladdr_seq_next, > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH][RFC] security: constify seq_operations @ 2009-08-12 17:08 ` Casey Schaufler 0 siblings, 0 replies; 14+ messages in thread From: Casey Schaufler @ 2009-08-12 17:08 UTC (permalink / raw) To: James Morris Cc: Andrew Morton, linux-kernel, linux-security-module, Christoph Hellwig, Arjan van de Ven, kernel-janitors James Morris wrote: > I think it'd be a good idea to constify more of the various operations > structs in the kernel -- our coverage of this is spotty. > > The patch below should provide coverage for all of the eligible > seq_operations structs in the kernel. It's derived from the grsecurity > patch (which I was reading and noticed how many of these we're missing). > > It's possible something's been missed, or that there are problems in code > which I can't test. Please review/comment/test. > > If it looks ok, I suggest pushing this via -mm. > > Note that there are quite a few other similar ops to be constified, such > as file_operations, so if anyone would like to pitch in, please do so. > > --- > > Subject: [PATCH 1/1] security: constify seq_operations > > Make all seq_operations structs const, to help mitigate > against revectoring user-triggerable function pointers. > > This is derived from the grsecurity patch, although generated > from scratch because it's simpler than extracting the changes > from there. > > Signed-off-by: James Morris <jmorris@namei.org> > Acked-by: Casey Schaufler <casey@schaufler-ca.com> For the Smack parts. Looks OK. > --- > arch/mn10300/kernel/setup.c | 2 +- > arch/powerpc/kernel/setup-common.c | 2 +- > arch/powerpc/platforms/pseries/hvCall_inst.c | 2 +- > arch/x86/mm/pat.c | 2 +- > drivers/block/cciss.c | 2 +- > drivers/char/misc.c | 2 +- > drivers/char/tpm/tpm_bios.c | 4 ++-- > drivers/isdn/capi/kcapi_proc.c | 10 +++++----- > drivers/scsi/sg.c | 6 +++--- > drivers/staging/rtl8192su/ieee80211/proc.c | 2 +- > fs/afs/proc.c | 8 ++++---- > fs/dlm/debug_fs.c | 12 ++++++------ > fs/ext4/mballoc.c | 4 ++-- > fs/jbd2/journal.c | 4 ++-- > fs/nfs/client.c | 4 ++-- > fs/nfsd/export.c | 2 +- > fs/ocfs2/cluster/netdebug.c | 4 ++-- > fs/ocfs2/dlm/dlmdebug.c | 2 +- > fs/proc/nommu.c | 2 +- > include/linux/nfsd/nfsd.h | 2 +- > ipc/util.c | 2 +- > kernel/cgroup.c | 2 +- > kernel/kprobes.c | 2 +- > kernel/lockdep_proc.c | 2 +- > kernel/trace/ftrace.c | 4 ++-- > kernel/trace/trace.c | 4 ++-- > net/ipv6/ip6mr.c | 4 ++-- > net/key/af_key.c | 2 +- > security/integrity/ima/ima_fs.c | 4 ++-- > security/smack/smackfs.c | 6 +++--- > 30 files changed, 55 insertions(+), 55 deletions(-) > > diff --git a/arch/mn10300/kernel/setup.c b/arch/mn10300/kernel/setup.c > index 79890ed..3f24c29 100644 > --- a/arch/mn10300/kernel/setup.c > +++ b/arch/mn10300/kernel/setup.c > @@ -285,7 +285,7 @@ static void c_stop(struct seq_file *m, void *v) > { > } > > -struct seq_operations cpuinfo_op = { > +const struct seq_operations cpuinfo_op = { > .start = c_start, > .next = c_next, > .stop = c_stop, > diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c > index 02fed27..1d5570a 100644 > --- a/arch/powerpc/kernel/setup-common.c > +++ b/arch/powerpc/kernel/setup-common.c > @@ -328,7 +328,7 @@ static void c_stop(struct seq_file *m, void *v) > { > } > > -struct seq_operations cpuinfo_op = { > +const struct seq_operations cpuinfo_op = { > .start =c_start, > .next = c_next, > .stop = c_stop, > diff --git a/arch/powerpc/platforms/pseries/hvCall_inst.c b/arch/powerpc/platforms/pseries/hvCall_inst.c > index eae51ef..3631a4f 100644 > --- a/arch/powerpc/platforms/pseries/hvCall_inst.c > +++ b/arch/powerpc/platforms/pseries/hvCall_inst.c > @@ -71,7 +71,7 @@ static int hc_show(struct seq_file *m, void *p) > return 0; > } > > -static struct seq_operations hcall_inst_seq_ops = { > +static const struct seq_operations hcall_inst_seq_ops = { > .start = hc_start, > .next = hc_next, > .stop = hc_stop, > diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c > index e6718bb..e2900a3 100644 > --- a/arch/x86/mm/pat.c > +++ b/arch/x86/mm/pat.c > @@ -826,7 +826,7 @@ static int memtype_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations memtype_seq_ops = { > +static const struct seq_operations memtype_seq_ops = { > .start = memtype_seq_start, > .next = memtype_seq_next, > .stop = memtype_seq_stop, > diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c > index a52cc7f..7404f83 100644 > --- a/drivers/block/cciss.c > +++ b/drivers/block/cciss.c > @@ -363,7 +363,7 @@ static void cciss_seq_stop(struct seq_file *seq, void *v) > h->busy_configuring = 0; > } > > -static struct seq_operations cciss_seq_ops = { > +static const struct seq_operations cciss_seq_ops = { > .start = cciss_seq_start, > .show = cciss_seq_show, > .next = cciss_seq_next, > diff --git a/drivers/char/misc.c b/drivers/char/misc.c > index 62c99fa..9eaf8c4 100644 > --- a/drivers/char/misc.c > +++ b/drivers/char/misc.c > @@ -91,7 +91,7 @@ static int misc_seq_show(struct seq_file *seq, void *v) > } > > > -static struct seq_operations misc_seq_ops = { > +static const struct seq_operations misc_seq_ops = { > .start = misc_seq_start, > .next = misc_seq_next, > .stop = misc_seq_stop, > diff --git a/drivers/char/tpm/tpm_bios.c b/drivers/char/tpm/tpm_bios.c > index 0c2f55a..bf2170f 100644 > --- a/drivers/char/tpm/tpm_bios.c > +++ b/drivers/char/tpm/tpm_bios.c > @@ -343,14 +343,14 @@ static int tpm_ascii_bios_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations tpm_ascii_b_measurments_seqops = { > +static const struct seq_operations tpm_ascii_b_measurments_seqops = { > .start = tpm_bios_measurements_start, > .next = tpm_bios_measurements_next, > .stop = tpm_bios_measurements_stop, > .show = tpm_ascii_bios_measurements_show, > }; > > -static struct seq_operations tpm_binary_b_measurments_seqops = { > +static const struct seq_operations tpm_binary_b_measurments_seqops = { > .start = tpm_bios_measurements_start, > .next = tpm_bios_measurements_next, > .stop = tpm_bios_measurements_stop, > diff --git a/drivers/isdn/capi/kcapi_proc.c b/drivers/isdn/capi/kcapi_proc.c > index 50ed778..09d4db7 100644 > --- a/drivers/isdn/capi/kcapi_proc.c > +++ b/drivers/isdn/capi/kcapi_proc.c > @@ -89,14 +89,14 @@ static int contrstats_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_controller_ops = { > +static const struct seq_operations seq_controller_ops = { > .start = controller_start, > .next = controller_next, > .stop = controller_stop, > .show = controller_show, > }; > > -static struct seq_operations seq_contrstats_ops = { > +static const struct seq_operations seq_contrstats_ops = { > .start = controller_start, > .next = controller_next, > .stop = controller_stop, > @@ -194,14 +194,14 @@ applstats_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_applications_ops = { > +static const struct seq_operations seq_applications_ops = { > .start = applications_start, > .next = applications_next, > .stop = applications_stop, > .show = applications_show, > }; > > -static struct seq_operations seq_applstats_ops = { > +static const struct seq_operations seq_applstats_ops = { > .start = applications_start, > .next = applications_next, > .stop = applications_stop, > @@ -264,7 +264,7 @@ static int capi_driver_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations seq_capi_driver_ops = { > +static const struct seq_operations seq_capi_driver_ops = { > .start = capi_driver_start, > .next = capi_driver_next, > .stop = capi_driver_stop, > diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c > index 9230402..7eee714 100644 > --- a/drivers/scsi/sg.c > +++ b/drivers/scsi/sg.c > @@ -2233,7 +2233,7 @@ static struct file_operations dev_fops = { > .open = sg_proc_open_dev, > .release = seq_release, > }; > -static struct seq_operations dev_seq_ops = { > +static const struct seq_operations dev_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > @@ -2246,7 +2246,7 @@ static struct file_operations devstrs_fops = { > .open = sg_proc_open_devstrs, > .release = seq_release, > }; > -static struct seq_operations devstrs_seq_ops = { > +static const struct seq_operations devstrs_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > @@ -2259,7 +2259,7 @@ static struct file_operations debug_fops = { > .open = sg_proc_open_debug, > .release = seq_release, > }; > -static struct seq_operations debug_seq_ops = { > +static const struct seq_operations debug_seq_ops = { > .start = dev_seq_start, > .next = dev_seq_next, > .stop = dev_seq_stop, > diff --git a/drivers/staging/rtl8192su/ieee80211/proc.c b/drivers/staging/rtl8192su/ieee80211/proc.c > index 4f3f9ed..df96ad5 100644 > --- a/drivers/staging/rtl8192su/ieee80211/proc.c > +++ b/drivers/staging/rtl8192su/ieee80211/proc.c > @@ -87,7 +87,7 @@ static int c_show(struct seq_file *m, void *p) > return 0; > } > > -static struct seq_operations crypto_seq_ops = { > +static const struct seq_operations crypto_seq_ops = { > .start = c_start, > .next = c_next, > .stop = c_stop, > diff --git a/fs/afs/proc.c b/fs/afs/proc.c > index 8630615..852739d 100644 > --- a/fs/afs/proc.c > +++ b/fs/afs/proc.c > @@ -28,7 +28,7 @@ static int afs_proc_cells_show(struct seq_file *m, void *v); > static ssize_t afs_proc_cells_write(struct file *file, const char __user *buf, > size_t size, loff_t *_pos); > > -static struct seq_operations afs_proc_cells_ops = { > +static const struct seq_operations afs_proc_cells_ops = { > .start = afs_proc_cells_start, > .next = afs_proc_cells_next, > .stop = afs_proc_cells_stop, > @@ -70,7 +70,7 @@ static void *afs_proc_cell_volumes_next(struct seq_file *p, void *v, > static void afs_proc_cell_volumes_stop(struct seq_file *p, void *v); > static int afs_proc_cell_volumes_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_volumes_ops = { > +static const struct seq_operations afs_proc_cell_volumes_ops = { > .start = afs_proc_cell_volumes_start, > .next = afs_proc_cell_volumes_next, > .stop = afs_proc_cell_volumes_stop, > @@ -95,7 +95,7 @@ static void *afs_proc_cell_vlservers_next(struct seq_file *p, void *v, > static void afs_proc_cell_vlservers_stop(struct seq_file *p, void *v); > static int afs_proc_cell_vlservers_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_vlservers_ops = { > +static const struct seq_operations afs_proc_cell_vlservers_ops = { > .start = afs_proc_cell_vlservers_start, > .next = afs_proc_cell_vlservers_next, > .stop = afs_proc_cell_vlservers_stop, > @@ -119,7 +119,7 @@ static void *afs_proc_cell_servers_next(struct seq_file *p, void *v, > static void afs_proc_cell_servers_stop(struct seq_file *p, void *v); > static int afs_proc_cell_servers_show(struct seq_file *m, void *v); > > -static struct seq_operations afs_proc_cell_servers_ops = { > +static const struct seq_operations afs_proc_cell_servers_ops = { > .start = afs_proc_cell_servers_start, > .next = afs_proc_cell_servers_next, > .stop = afs_proc_cell_servers_stop, > diff --git a/fs/dlm/debug_fs.c b/fs/dlm/debug_fs.c > index 1d1d274..1c8bb8c 100644 > --- a/fs/dlm/debug_fs.c > +++ b/fs/dlm/debug_fs.c > @@ -386,9 +386,9 @@ static int table_seq_show(struct seq_file *seq, void *iter_ptr) > return rv; > } > > -static struct seq_operations format1_seq_ops; > -static struct seq_operations format2_seq_ops; > -static struct seq_operations format3_seq_ops; > +static const struct seq_operations format1_seq_ops; > +static const struct seq_operations format2_seq_ops; > +static const struct seq_operations format3_seq_ops; > > static void *table_seq_start(struct seq_file *seq, loff_t *pos) > { > @@ -534,21 +534,21 @@ static void table_seq_stop(struct seq_file *seq, void *iter_ptr) > } > } > > -static struct seq_operations format1_seq_ops = { > +static const struct seq_operations format1_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > .show = table_seq_show, > }; > > -static struct seq_operations format2_seq_ops = { > +static const struct seq_operations format2_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > .show = table_seq_show, > }; > > -static struct seq_operations format3_seq_ops = { > +static const struct seq_operations format3_seq_ops = { > .start = table_seq_start, > .next = table_seq_next, > .stop = table_seq_stop, > diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c > index cd25846..a891a06 100644 > --- a/fs/ext4/mballoc.c > +++ b/fs/ext4/mballoc.c > @@ -2205,7 +2205,7 @@ static void ext4_mb_seq_history_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations ext4_mb_seq_history_ops = { > +static const struct seq_operations ext4_mb_seq_history_ops = { > .start = ext4_mb_seq_history_start, > .next = ext4_mb_seq_history_next, > .stop = ext4_mb_seq_history_stop, > @@ -2366,7 +2366,7 @@ static void ext4_mb_seq_groups_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations ext4_mb_seq_groups_ops = { > +static const struct seq_operations ext4_mb_seq_groups_ops = { > .start = ext4_mb_seq_groups_start, > .next = ext4_mb_seq_groups_next, > .stop = ext4_mb_seq_groups_stop, > diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c > index e378cb3..02b1092 100644 > --- a/fs/jbd2/journal.c > +++ b/fs/jbd2/journal.c > @@ -768,7 +768,7 @@ static void jbd2_seq_history_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations jbd2_seq_history_ops = { > +static const struct seq_operations jbd2_seq_history_ops = { > .start = jbd2_seq_history_start, > .next = jbd2_seq_history_next, > .stop = jbd2_seq_history_stop, > @@ -872,7 +872,7 @@ static void jbd2_seq_info_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations jbd2_seq_info_ops = { > +static const struct seq_operations jbd2_seq_info_ops = { > .start = jbd2_seq_info_start, > .next = jbd2_seq_info_next, > .stop = jbd2_seq_info_stop, > diff --git a/fs/nfs/client.c b/fs/nfs/client.c > index 8d25ccb..238d850 100644 > --- a/fs/nfs/client.c > +++ b/fs/nfs/client.c > @@ -1533,7 +1533,7 @@ static void *nfs_server_list_next(struct seq_file *p, void *v, loff_t *pos); > static void nfs_server_list_stop(struct seq_file *p, void *v); > static int nfs_server_list_show(struct seq_file *m, void *v); > > -static struct seq_operations nfs_server_list_ops = { > +static const struct seq_operations nfs_server_list_ops = { > .start = nfs_server_list_start, > .next = nfs_server_list_next, > .stop = nfs_server_list_stop, > @@ -1554,7 +1554,7 @@ static void *nfs_volume_list_next(struct seq_file *p, void *v, loff_t *pos); > static void nfs_volume_list_stop(struct seq_file *p, void *v); > static int nfs_volume_list_show(struct seq_file *m, void *v); > > -static struct seq_operations nfs_volume_list_ops = { > +static const struct seq_operations nfs_volume_list_ops = { > .start = nfs_volume_list_start, > .next = nfs_volume_list_next, > .stop = nfs_volume_list_stop, > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index b92a276..a5e516b 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -1505,7 +1505,7 @@ static int e_show(struct seq_file *m, void *p) > return svc_export_show(m, &svc_export_cache, cp); > } > > -struct seq_operations nfs_exports_op = { > +const struct seq_operations nfs_exports_op = { > .start = e_start, > .next = e_next, > .stop = e_stop, > diff --git a/fs/ocfs2/cluster/netdebug.c b/fs/ocfs2/cluster/netdebug.c > index f842487..cfb2be7 100644 > --- a/fs/ocfs2/cluster/netdebug.c > +++ b/fs/ocfs2/cluster/netdebug.c > @@ -163,7 +163,7 @@ static void nst_seq_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations nst_seq_ops = { > +static const struct seq_operations nst_seq_ops = { > .start = nst_seq_start, > .next = nst_seq_next, > .stop = nst_seq_stop, > @@ -344,7 +344,7 @@ static void sc_seq_stop(struct seq_file *seq, void *v) > { > } > > -static struct seq_operations sc_seq_ops = { > +static const struct seq_operations sc_seq_ops = { > .start = sc_seq_start, > .next = sc_seq_next, > .stop = sc_seq_stop, > diff --git a/fs/ocfs2/dlm/dlmdebug.c b/fs/ocfs2/dlm/dlmdebug.c > index df52f70..c5c8812 100644 > --- a/fs/ocfs2/dlm/dlmdebug.c > +++ b/fs/ocfs2/dlm/dlmdebug.c > @@ -683,7 +683,7 @@ static int lockres_seq_show(struct seq_file *s, void *v) > return 0; > } > > -static struct seq_operations debug_lockres_ops = { > +static const struct seq_operations debug_lockres_ops = { > .start = lockres_seq_start, > .stop = lockres_seq_stop, > .next = lockres_seq_next, > diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c > index 7e14d1a..9fe7d7e 100644 > --- a/fs/proc/nommu.c > +++ b/fs/proc/nommu.c > @@ -109,7 +109,7 @@ static void *nommu_region_list_next(struct seq_file *m, void *v, loff_t *pos) > return rb_next((struct rb_node *) v); > } > > -static struct seq_operations proc_nommu_region_list_seqop = { > +static const struct seq_operations proc_nommu_region_list_seqop = { > .start = nommu_region_list_start, > .next = nommu_region_list_next, > .stop = nommu_region_list_stop, > diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h > index 2b49d67..99a0b07 100644 > --- a/include/linux/nfsd/nfsd.h > +++ b/include/linux/nfsd/nfsd.h > @@ -57,7 +57,7 @@ extern u32 nfsd_supported_minorversion; > extern struct mutex nfsd_mutex; > extern struct svc_serv *nfsd_serv; > > -extern struct seq_operations nfs_exports_op; > +extern const struct seq_operations nfs_exports_op; > > /* > * Function prototypes. > diff --git a/ipc/util.c b/ipc/util.c > index b8e4ba9..79ce84e 100644 > --- a/ipc/util.c > +++ b/ipc/util.c > @@ -942,7 +942,7 @@ static int sysvipc_proc_show(struct seq_file *s, void *it) > return iface->show(s, it); > } > > -static struct seq_operations sysvipc_proc_seqops = { > +static const struct seq_operations sysvipc_proc_seqops = { > .start = sysvipc_proc_start, > .stop = sysvipc_proc_stop, > .next = sysvipc_proc_next, > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index b6eadfe..f96c026 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -2313,7 +2313,7 @@ static int cgroup_tasks_show(struct seq_file *s, void *v) > return seq_printf(s, "%d\n", *(int *)v); > } > > -static struct seq_operations cgroup_tasks_seq_operations = { > +static const struct seq_operations cgroup_tasks_seq_operations = { > .start = cgroup_tasks_start, > .stop = cgroup_tasks_stop, > .next = cgroup_tasks_next, > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index 0540948..013736c 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -1329,7 +1329,7 @@ static int __kprobes show_kprobe_addr(struct seq_file *pi, void *v) > return 0; > } > > -static struct seq_operations kprobes_seq_ops = { > +static const struct seq_operations kprobes_seq_ops = { > .start = kprobe_seq_start, > .next = kprobe_seq_next, > .stop = kprobe_seq_stop, > diff --git a/kernel/lockdep_proc.c b/kernel/lockdep_proc.c > index e94caa6..0700c1d 100644 > --- a/kernel/lockdep_proc.c > +++ b/kernel/lockdep_proc.c > @@ -670,7 +670,7 @@ static int ls_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations lockstat_ops = { > +static const struct seq_operations lockstat_ops = { > .start = ls_start, > .next = ls_next, > .stop = ls_stop, > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > index 1e1d23c..4b07920 100644 > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -1567,7 +1567,7 @@ static int t_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations show_ftrace_seq_ops = { > +static const struct seq_operations show_ftrace_seq_ops = { > .start = t_start, > .next = t_next, > .stop = t_stop, > @@ -2560,7 +2560,7 @@ static int g_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ftrace_graph_seq_ops = { > +static const struct seq_operations ftrace_graph_seq_ops = { > .start = g_start, > .next = g_next, > .stop = g_stop, > diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c > index c22b40f..2eb8ee0 100644 > --- a/kernel/trace/trace.c > +++ b/kernel/trace/trace.c > @@ -1885,7 +1885,7 @@ static int s_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations tracer_seq_ops = { > +static const struct seq_operations tracer_seq_ops = { > .start = s_start, > .next = s_next, > .stop = s_stop, > @@ -2097,7 +2097,7 @@ static int t_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations show_traces_seq_ops = { > +static const struct seq_operations show_traces_seq_ops = { > .start = t_start, > .next = t_next, > .stop = t_stop, > diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c > index c769f15..e17588b 100644 > --- a/net/ipv6/ip6mr.c > +++ b/net/ipv6/ip6mr.c > @@ -204,7 +204,7 @@ static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations ip6mr_vif_seq_ops = { > +static const struct seq_operations ip6mr_vif_seq_ops = { > .start = ip6mr_vif_seq_start, > .next = ip6mr_vif_seq_next, > .stop = ip6mr_vif_seq_stop, > @@ -328,7 +328,7 @@ static int ipmr_mfc_seq_show(struct seq_file *seq, void *v) > return 0; > } > > -static struct seq_operations ipmr_mfc_seq_ops = { > +static const struct seq_operations ipmr_mfc_seq_ops = { > .start = ipmr_mfc_seq_start, > .next = ipmr_mfc_seq_next, > .stop = ipmr_mfc_seq_stop, > diff --git a/net/key/af_key.c b/net/key/af_key.c > index dba9abd..7b1e99b 100644 > --- a/net/key/af_key.c > +++ b/net/key/af_key.c > @@ -3705,7 +3705,7 @@ static void pfkey_seq_stop(struct seq_file *f, void *v) > read_unlock(&pfkey_table_lock); > } > > -static struct seq_operations pfkey_seq_ops = { > +static const struct seq_operations pfkey_seq_ops = { > .start = pfkey_seq_start, > .next = pfkey_seq_next, > .stop = pfkey_seq_stop, > diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c > index 6bfc7ea..8e9777b 100644 > --- a/security/integrity/ima/ima_fs.c > +++ b/security/integrity/ima/ima_fs.c > @@ -146,7 +146,7 @@ static int ima_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ima_measurments_seqops = { > +static const struct seq_operations ima_measurments_seqops = { > .start = ima_measurements_start, > .next = ima_measurements_next, > .stop = ima_measurements_stop, > @@ -221,7 +221,7 @@ static int ima_ascii_measurements_show(struct seq_file *m, void *v) > return 0; > } > > -static struct seq_operations ima_ascii_measurements_seqops = { > +static const struct seq_operations ima_ascii_measurements_seqops = { > .start = ima_measurements_start, > .next = ima_measurements_next, > .stop = ima_measurements_stop, > diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c > index f83a809..aeead75 100644 > --- a/security/smack/smackfs.c > +++ b/security/smack/smackfs.c > @@ -187,7 +187,7 @@ static void load_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations load_seq_ops = { > +static const struct seq_operations load_seq_ops = { > .start = load_seq_start, > .next = load_seq_next, > .show = load_seq_show, > @@ -503,7 +503,7 @@ static void cipso_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations cipso_seq_ops = { > +static const struct seq_operations cipso_seq_ops = { > .start = cipso_seq_start, > .stop = cipso_seq_stop, > .next = cipso_seq_next, > @@ -697,7 +697,7 @@ static void netlbladdr_seq_stop(struct seq_file *s, void *v) > /* No-op */ > } > > -static struct seq_operations netlbladdr_seq_ops = { > +static const struct seq_operations netlbladdr_seq_ops = { > .start = netlbladdr_seq_start, > .stop = netlbladdr_seq_stop, > .next = netlbladdr_seq_next, > ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2009-08-15 9:16 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-11 13:52 [PATCH][RFC] security: constify seq_operations James Morris 2009-08-11 13:52 ` James Morris 2009-08-11 14:36 ` Serge E. Hallyn 2009-08-11 14:36 ` Serge E. Hallyn 2009-08-11 15:32 ` James Morris 2009-08-11 15:32 ` James Morris 2009-08-11 19:47 ` Julia Lawall 2009-08-11 19:47 ` Julia Lawall 2009-08-15 9:15 ` Artem Bityutskiy 2009-08-15 9:15 ` Artem Bityutskiy 2009-08-12 4:28 ` Arjan van de Ven 2009-08-12 4:28 ` Arjan van de Ven 2009-08-12 17:08 ` Casey Schaufler 2009-08-12 17:08 ` Casey Schaufler
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.