Message ID | 46cd762aeef493d8655e8a053bfd591f849d27ec.1722951006.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | Accepted |
Commit | f21e62e8111d6162c7e2bb1357734bf010d26e5d |
Headers | show |
Series | refscale: Constify struct ref_scale_ops | expand |
On Tue, Aug 06, 2024 at 03:30:16PM +0200, Christophe JAILLET wrote: > 'struct ref_scale_ops' are not modified in these drivers. > > Constifying this structure moves some data to a read-only section, so > increase overall security. > > On a x86_64, with allmodconfig: > Before: > ====== > text data bss dec hex filename > 34231 4167 736 39134 98de kernel/rcu/refscale.o > > After: > ===== > text data bss dec hex filename > 35175 3239 736 39150 98ee kernel/rcu/refscale.o > > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> > --- > Compile tested-only. Tested-by: Paul E. McKenney <paulmck@kernel.org> > --- > kernel/rcu/refscale.c | 42 +++++++++++++++++++++--------------------- > 1 file changed, 21 insertions(+), 21 deletions(-) > > diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c > index cfec0648e141..0db9db73f57f 100644 > --- a/kernel/rcu/refscale.c > +++ b/kernel/rcu/refscale.c > @@ -135,7 +135,7 @@ struct ref_scale_ops { > const char *name; > }; > > -static struct ref_scale_ops *cur_ops; > +static const struct ref_scale_ops *cur_ops; > > static void un_delay(const int udl, const int ndl) > { > @@ -171,7 +171,7 @@ static bool rcu_sync_scale_init(void) > return true; > } > > -static struct ref_scale_ops rcu_ops = { > +static const struct ref_scale_ops rcu_ops = { > .init = rcu_sync_scale_init, > .readsection = ref_rcu_read_section, > .delaysection = ref_rcu_delay_section, > @@ -205,7 +205,7 @@ static void srcu_ref_scale_delay_section(const int nloops, const int udl, const > } > } > > -static struct ref_scale_ops srcu_ops = { > +static const struct ref_scale_ops srcu_ops = { > .init = rcu_sync_scale_init, > .readsection = srcu_ref_scale_read_section, > .delaysection = srcu_ref_scale_delay_section, > @@ -232,7 +232,7 @@ static void rcu_tasks_ref_scale_delay_section(const int nloops, const int udl, c > un_delay(udl, ndl); > } > > -static struct ref_scale_ops rcu_tasks_ops = { > +static const struct ref_scale_ops rcu_tasks_ops = { > .init = rcu_sync_scale_init, > .readsection = rcu_tasks_ref_scale_read_section, > .delaysection = rcu_tasks_ref_scale_delay_section, > @@ -271,7 +271,7 @@ static void rcu_trace_ref_scale_delay_section(const int nloops, const int udl, c > } > } > > -static struct ref_scale_ops rcu_trace_ops = { > +static const struct ref_scale_ops rcu_trace_ops = { > .init = rcu_sync_scale_init, > .readsection = rcu_trace_ref_scale_read_section, > .delaysection = rcu_trace_ref_scale_delay_section, > @@ -310,7 +310,7 @@ static void ref_refcnt_delay_section(const int nloops, const int udl, const int > } > } > > -static struct ref_scale_ops refcnt_ops = { > +static const struct ref_scale_ops refcnt_ops = { > .init = rcu_sync_scale_init, > .readsection = ref_refcnt_section, > .delaysection = ref_refcnt_delay_section, > @@ -347,7 +347,7 @@ static void ref_rwlock_delay_section(const int nloops, const int udl, const int > } > } > > -static struct ref_scale_ops rwlock_ops = { > +static const struct ref_scale_ops rwlock_ops = { > .init = ref_rwlock_init, > .readsection = ref_rwlock_section, > .delaysection = ref_rwlock_delay_section, > @@ -384,7 +384,7 @@ static void ref_rwsem_delay_section(const int nloops, const int udl, const int n > } > } > > -static struct ref_scale_ops rwsem_ops = { > +static const struct ref_scale_ops rwsem_ops = { > .init = ref_rwsem_init, > .readsection = ref_rwsem_section, > .delaysection = ref_rwsem_delay_section, > @@ -419,7 +419,7 @@ static void ref_lock_delay_section(const int nloops, const int udl, const int nd > preempt_enable(); > } > > -static struct ref_scale_ops lock_ops = { > +static const struct ref_scale_ops lock_ops = { > .readsection = ref_lock_section, > .delaysection = ref_lock_delay_section, > .name = "lock" > @@ -454,7 +454,7 @@ static void ref_lock_irq_delay_section(const int nloops, const int udl, const in > preempt_enable(); > } > > -static struct ref_scale_ops lock_irq_ops = { > +static const struct ref_scale_ops lock_irq_ops = { > .readsection = ref_lock_irq_section, > .delaysection = ref_lock_irq_delay_section, > .name = "lock-irq" > @@ -490,7 +490,7 @@ static void ref_acqrel_delay_section(const int nloops, const int udl, const int > preempt_enable(); > } > > -static struct ref_scale_ops acqrel_ops = { > +static const struct ref_scale_ops acqrel_ops = { > .readsection = ref_acqrel_section, > .delaysection = ref_acqrel_delay_section, > .name = "acqrel" > @@ -524,7 +524,7 @@ static void ref_clock_delay_section(const int nloops, const int udl, const int n > stopopts = x; > } > > -static struct ref_scale_ops clock_ops = { > +static const struct ref_scale_ops clock_ops = { > .readsection = ref_clock_section, > .delaysection = ref_clock_delay_section, > .name = "clock" > @@ -556,7 +556,7 @@ static void ref_jiffies_delay_section(const int nloops, const int udl, const int > stopopts = x; > } > > -static struct ref_scale_ops jiffies_ops = { > +static const struct ref_scale_ops jiffies_ops = { > .readsection = ref_jiffies_section, > .delaysection = ref_jiffies_delay_section, > .name = "jiffies" > @@ -706,9 +706,9 @@ static void refscale_typesafe_ctor(void *rtsp_in) > preempt_enable(); > } > > -static struct ref_scale_ops typesafe_ref_ops; > -static struct ref_scale_ops typesafe_lock_ops; > -static struct ref_scale_ops typesafe_seqlock_ops; > +static const struct ref_scale_ops typesafe_ref_ops; > +static const struct ref_scale_ops typesafe_lock_ops; > +static const struct ref_scale_ops typesafe_seqlock_ops; > > // Initialize for a typesafe test. > static bool typesafe_init(void) > @@ -769,7 +769,7 @@ static void typesafe_cleanup(void) > } > > // The typesafe_init() function distinguishes these structures by address. > -static struct ref_scale_ops typesafe_ref_ops = { > +static const struct ref_scale_ops typesafe_ref_ops = { > .init = typesafe_init, > .cleanup = typesafe_cleanup, > .readsection = typesafe_read_section, > @@ -777,7 +777,7 @@ static struct ref_scale_ops typesafe_ref_ops = { > .name = "typesafe_ref" > }; > > -static struct ref_scale_ops typesafe_lock_ops = { > +static const struct ref_scale_ops typesafe_lock_ops = { > .init = typesafe_init, > .cleanup = typesafe_cleanup, > .readsection = typesafe_read_section, > @@ -785,7 +785,7 @@ static struct ref_scale_ops typesafe_lock_ops = { > .name = "typesafe_lock" > }; > > -static struct ref_scale_ops typesafe_seqlock_ops = { > +static const struct ref_scale_ops typesafe_seqlock_ops = { > .init = typesafe_init, > .cleanup = typesafe_cleanup, > .readsection = typesafe_read_section, > @@ -1026,7 +1026,7 @@ static int main_func(void *arg) > } > > static void > -ref_scale_print_module_parms(struct ref_scale_ops *cur_ops, const char *tag) > +ref_scale_print_module_parms(const struct ref_scale_ops *cur_ops, const char *tag) > { > pr_alert("%s" SCALE_FLAG > "--- %s: verbose=%d verbose_batched=%d shutdown=%d holdoff=%d lookup_instances=%ld loops=%ld nreaders=%d nruns=%d readdelay=%d\n", scale_type, tag, > @@ -1081,7 +1081,7 @@ ref_scale_init(void) > { > long i; > int firsterr = 0; > - static struct ref_scale_ops *scale_ops[] = { > + static const struct ref_scale_ops *scale_ops[] = { > &rcu_ops, &srcu_ops, RCU_TRACE_OPS RCU_TASKS_OPS &refcnt_ops, &rwlock_ops, > &rwsem_ops, &lock_ops, &lock_irq_ops, &acqrel_ops, &clock_ops, &jiffies_ops, > &typesafe_ref_ops, &typesafe_lock_ops, &typesafe_seqlock_ops, > -- > 2.45.2 >
diff --git a/kernel/rcu/refscale.c b/kernel/rcu/refscale.c index cfec0648e141..0db9db73f57f 100644 --- a/kernel/rcu/refscale.c +++ b/kernel/rcu/refscale.c @@ -135,7 +135,7 @@ struct ref_scale_ops { const char *name; }; -static struct ref_scale_ops *cur_ops; +static const struct ref_scale_ops *cur_ops; static void un_delay(const int udl, const int ndl) { @@ -171,7 +171,7 @@ static bool rcu_sync_scale_init(void) return true; } -static struct ref_scale_ops rcu_ops = { +static const struct ref_scale_ops rcu_ops = { .init = rcu_sync_scale_init, .readsection = ref_rcu_read_section, .delaysection = ref_rcu_delay_section, @@ -205,7 +205,7 @@ static void srcu_ref_scale_delay_section(const int nloops, const int udl, const } } -static struct ref_scale_ops srcu_ops = { +static const struct ref_scale_ops srcu_ops = { .init = rcu_sync_scale_init, .readsection = srcu_ref_scale_read_section, .delaysection = srcu_ref_scale_delay_section, @@ -232,7 +232,7 @@ static void rcu_tasks_ref_scale_delay_section(const int nloops, const int udl, c un_delay(udl, ndl); } -static struct ref_scale_ops rcu_tasks_ops = { +static const struct ref_scale_ops rcu_tasks_ops = { .init = rcu_sync_scale_init, .readsection = rcu_tasks_ref_scale_read_section, .delaysection = rcu_tasks_ref_scale_delay_section, @@ -271,7 +271,7 @@ static void rcu_trace_ref_scale_delay_section(const int nloops, const int udl, c } } -static struct ref_scale_ops rcu_trace_ops = { +static const struct ref_scale_ops rcu_trace_ops = { .init = rcu_sync_scale_init, .readsection = rcu_trace_ref_scale_read_section, .delaysection = rcu_trace_ref_scale_delay_section, @@ -310,7 +310,7 @@ static void ref_refcnt_delay_section(const int nloops, const int udl, const int } } -static struct ref_scale_ops refcnt_ops = { +static const struct ref_scale_ops refcnt_ops = { .init = rcu_sync_scale_init, .readsection = ref_refcnt_section, .delaysection = ref_refcnt_delay_section, @@ -347,7 +347,7 @@ static void ref_rwlock_delay_section(const int nloops, const int udl, const int } } -static struct ref_scale_ops rwlock_ops = { +static const struct ref_scale_ops rwlock_ops = { .init = ref_rwlock_init, .readsection = ref_rwlock_section, .delaysection = ref_rwlock_delay_section, @@ -384,7 +384,7 @@ static void ref_rwsem_delay_section(const int nloops, const int udl, const int n } } -static struct ref_scale_ops rwsem_ops = { +static const struct ref_scale_ops rwsem_ops = { .init = ref_rwsem_init, .readsection = ref_rwsem_section, .delaysection = ref_rwsem_delay_section, @@ -419,7 +419,7 @@ static void ref_lock_delay_section(const int nloops, const int udl, const int nd preempt_enable(); } -static struct ref_scale_ops lock_ops = { +static const struct ref_scale_ops lock_ops = { .readsection = ref_lock_section, .delaysection = ref_lock_delay_section, .name = "lock" @@ -454,7 +454,7 @@ static void ref_lock_irq_delay_section(const int nloops, const int udl, const in preempt_enable(); } -static struct ref_scale_ops lock_irq_ops = { +static const struct ref_scale_ops lock_irq_ops = { .readsection = ref_lock_irq_section, .delaysection = ref_lock_irq_delay_section, .name = "lock-irq" @@ -490,7 +490,7 @@ static void ref_acqrel_delay_section(const int nloops, const int udl, const int preempt_enable(); } -static struct ref_scale_ops acqrel_ops = { +static const struct ref_scale_ops acqrel_ops = { .readsection = ref_acqrel_section, .delaysection = ref_acqrel_delay_section, .name = "acqrel" @@ -524,7 +524,7 @@ static void ref_clock_delay_section(const int nloops, const int udl, const int n stopopts = x; } -static struct ref_scale_ops clock_ops = { +static const struct ref_scale_ops clock_ops = { .readsection = ref_clock_section, .delaysection = ref_clock_delay_section, .name = "clock" @@ -556,7 +556,7 @@ static void ref_jiffies_delay_section(const int nloops, const int udl, const int stopopts = x; } -static struct ref_scale_ops jiffies_ops = { +static const struct ref_scale_ops jiffies_ops = { .readsection = ref_jiffies_section, .delaysection = ref_jiffies_delay_section, .name = "jiffies" @@ -706,9 +706,9 @@ static void refscale_typesafe_ctor(void *rtsp_in) preempt_enable(); } -static struct ref_scale_ops typesafe_ref_ops; -static struct ref_scale_ops typesafe_lock_ops; -static struct ref_scale_ops typesafe_seqlock_ops; +static const struct ref_scale_ops typesafe_ref_ops; +static const struct ref_scale_ops typesafe_lock_ops; +static const struct ref_scale_ops typesafe_seqlock_ops; // Initialize for a typesafe test. static bool typesafe_init(void) @@ -769,7 +769,7 @@ static void typesafe_cleanup(void) } // The typesafe_init() function distinguishes these structures by address. -static struct ref_scale_ops typesafe_ref_ops = { +static const struct ref_scale_ops typesafe_ref_ops = { .init = typesafe_init, .cleanup = typesafe_cleanup, .readsection = typesafe_read_section, @@ -777,7 +777,7 @@ static struct ref_scale_ops typesafe_ref_ops = { .name = "typesafe_ref" }; -static struct ref_scale_ops typesafe_lock_ops = { +static const struct ref_scale_ops typesafe_lock_ops = { .init = typesafe_init, .cleanup = typesafe_cleanup, .readsection = typesafe_read_section, @@ -785,7 +785,7 @@ static struct ref_scale_ops typesafe_lock_ops = { .name = "typesafe_lock" }; -static struct ref_scale_ops typesafe_seqlock_ops = { +static const struct ref_scale_ops typesafe_seqlock_ops = { .init = typesafe_init, .cleanup = typesafe_cleanup, .readsection = typesafe_read_section, @@ -1026,7 +1026,7 @@ static int main_func(void *arg) } static void -ref_scale_print_module_parms(struct ref_scale_ops *cur_ops, const char *tag) +ref_scale_print_module_parms(const struct ref_scale_ops *cur_ops, const char *tag) { pr_alert("%s" SCALE_FLAG "--- %s: verbose=%d verbose_batched=%d shutdown=%d holdoff=%d lookup_instances=%ld loops=%ld nreaders=%d nruns=%d readdelay=%d\n", scale_type, tag, @@ -1081,7 +1081,7 @@ ref_scale_init(void) { long i; int firsterr = 0; - static struct ref_scale_ops *scale_ops[] = { + static const struct ref_scale_ops *scale_ops[] = { &rcu_ops, &srcu_ops, RCU_TRACE_OPS RCU_TASKS_OPS &refcnt_ops, &rwlock_ops, &rwsem_ops, &lock_ops, &lock_irq_ops, &acqrel_ops, &clock_ops, &jiffies_ops, &typesafe_ref_ops, &typesafe_lock_ops, &typesafe_seqlock_ops,
'struct ref_scale_ops' are not modified in these drivers. Constifying this structure moves some data to a read-only section, so increase overall security. On a x86_64, with allmodconfig: Before: ====== text data bss dec hex filename 34231 4167 736 39134 98de kernel/rcu/refscale.o After: ===== text data bss dec hex filename 35175 3239 736 39150 98ee kernel/rcu/refscale.o Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- Compile tested-only. --- kernel/rcu/refscale.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-)