seq_file: constify seq_operations
authorJames Morris <jmorris@namei.org>
Tue, 22 Sep 2009 23:43:43 +0000 (16:43 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Sep 2009 14:39:29 +0000 (07:39 -0700)
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: Serge Hallyn <serue@us.ibm.com>
Acked-by: Casey Schaufler <casey@schaufler-ca.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
26 files changed:
arch/mn10300/kernel/setup.c
arch/powerpc/kernel/setup-common.c
arch/powerpc/platforms/pseries/hvCall_inst.c
drivers/block/cciss.c
drivers/char/misc.c
drivers/char/tpm/tpm_bios.c
drivers/isdn/capi/kcapi_proc.c
drivers/scsi/sg.c
fs/afs/proc.c
fs/dlm/debug_fs.c
fs/jbd2/journal.c
fs/nfs/client.c
fs/nfsd/export.c
fs/ocfs2/cluster/netdebug.c
fs/ocfs2/dlm/dlmdebug.c
fs/proc/nommu.c
include/linux/nfsd/nfsd.h
ipc/util.c
kernel/cgroup.c
kernel/kprobes.c
kernel/lockdep_proc.c
kernel/trace/ftrace.c
kernel/trace/trace.c
net/ipv6/ip6mr.c
security/integrity/ima/ima_fs.c
security/smack/smackfs.c

index 79890edfd67a6ce98389a009926c49243e2fb45d..3f24c298a3af1cb583f66a809598cfbbbdde6faa 100644 (file)
@@ -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,
index 02fed27af7f64ed72cfad7ed344955721c3d546b..1d5570a1e456abdc1c651dee6c443b2852b00680 100644 (file)
@@ -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,
index eae51ef9af2441c2b12660ad786e3a318e567436..3631a4f277eb2ab8aaf02676d7124d6a2a430e44 100644 (file)
@@ -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,
index 4f19105f755c76e5f9ea56342b5915a8ead5924b..24c3e21ab263a6a685356f7d17ac5c0c097e60b6 100644 (file)
@@ -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,
index 1ee27cc23426d2f96de2000411cafadb06030c4a..07fa612a58d56efd23a24a3cb7f5ec61052b5190 100644 (file)
@@ -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,
index 0c2f55a38b954d56a1eba026e8b9c65718af1286..bf2170fb1cdd7d1d01581aeb9b5abe129a42d32b 100644 (file)
@@ -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,
index 50ed778f63fc84cd3c31da19a15b1f6bd60f5754..09d4db764d22736e344085ce9d1b35d71791da5a 100644 (file)
@@ -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,
index 4968c4ced385f0c46a46bbd903586bef7c68dc12..848b59466850ac1427a1647047aa35a4f607ff8e 100644 (file)
@@ -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,
index 8630615e57fe512ca9c7a10472ce5f959f317234..852739d262a9f7eecff472d33845adb2a0a310f0 100644 (file)
@@ -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,
index 1d1d27442235b9487c3db8a8490a6a0da7c6122c..1c8bb8c3a82efd92519c16e0a01088e9bf9bf5bf 100644 (file)
@@ -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,
index a8a358bc0f21792f5f675889f63d0c4123ecc04d..53b86e16e5fe3a4bc29f8825db8b2a54b7e60fde 100644 (file)
@@ -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,
index a7ce15d3c24835a0f66c76f7d5141b7552d2d389..152025358dad53ce354b662163f1a9cee0205393 100644 (file)
@@ -1531,7 +1531,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,
@@ -1552,7 +1552,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,
index 984a5ebcc1d68af8d9ab98f7e443e981c7d5eca7..c1c9e035d4a4777e483872ed82ae4b68056c49b1 100644 (file)
@@ -1517,7 +1517,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,
index f8424874fa0725b95065d5ce7031f63d0cdde586..cfb2be708abe33b255ed8f3208f93569a92339e8 100644 (file)
@@ -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,
index df52f706f66971026b2f09ae0f978a8ba17858f7..c5c88124096df424fdb6d248512f239b7d87a2b1 100644 (file)
@@ -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,
index 7e14d1a0400122700df380aeb0746cac9c5ff8a3..9fe7d7ebe1157864561a8cb3d0166eb827e5839a 100644 (file)
@@ -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,
index 03bbe9039104845b42ee75f61f4a39cd73a19337..510ffdd5020ea21f75b14fc7ad33d8e26e6d4c1e 100644 (file)
@@ -60,7 +60,7 @@ extern spinlock_t             nfsd_drc_lock;
 extern unsigned int            nfsd_drc_max_mem;
 extern unsigned int            nfsd_drc_mem_used;
 
-extern struct seq_operations nfs_exports_op;
+extern const struct seq_operations nfs_exports_op;
 
 /*
  * Function prototypes.
index b8e4ba92f6d12a6384c4a2fce9859ba064d21810..79ce84e890f72b153ca4f77ee7abeec3a6aed496 100644 (file)
@@ -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,
index 213b7f92fcdd6159b1af60d150b1d1887a4e7364..cd83d9933b6b85cd05bf6db17f424056d2d504fc 100644 (file)
@@ -2314,7 +2314,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,
index ef177d653b2cb791b11f98723d3afe5ada5ac586..cfadc1291d0badb247275feacb720fa3408b9c44 100644 (file)
@@ -1321,7 +1321,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,
index d4b3dbc79fdb353cde01ee5eef13b8cf203a34aa..d4aba4f3584c73c3faff6ff5a0b73e27f6a7c5fb 100644 (file)
@@ -594,7 +594,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,
index c71e91bf7372499efc0dec2a6ede46f9aa492d0a..23df7771c937acfab46e4f695950a69f35fbe44b 100644 (file)
@@ -1520,7 +1520,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,
@@ -2459,7 +2459,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,
index a35925d222baa5b8b31f54c86327e605552c1ec9..6c0f6a8a22ebd5eafce5adf55423d4302734cd18 100644 (file)
@@ -1949,7 +1949,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,
@@ -2163,7 +2163,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,
index 3907510c2ce3e17f21fa9b2d5f151d18edb28f6e..090675e269ee7b62ffea095dd4c728de61853ab4 100644 (file)
@@ -324,7 +324,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,
index 6bfc7eaebfdabb88d7fbc9c5c61d7089d2c83f23..8e9777b764052a1088d38fc3385c4dd1dfb25107 100644 (file)
@@ -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,
index f83a809807263beacdb756adae4696b6cda33309..aeead7585093a301c20826b9f316776fc295f4ce 100644 (file)
@@ -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,