[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <86dbcaa7-db16-4a90-9022-eb7b6e736ed7@paulmck-laptop>
Date: Tue, 6 Aug 2024 11:10:59 -0700
From: "Paul E. McKenney" <paulmck@...nel.org>
To: Christophe JAILLET <christophe.jaillet@...adoo.fr>
Cc: Davidlohr Bueso <dave@...olabs.net>,
Josh Triplett <josh@...htriplett.org>,
Frederic Weisbecker <frederic@...nel.org>,
Neeraj Upadhyay <neeraj.upadhyay@...nel.org>,
Joel Fernandes <joel@...lfernandes.org>,
Boqun Feng <boqun.feng@...il.com>,
Uladzislau Rezki <urezki@...il.com>,
Steven Rostedt <rostedt@...dmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
Lai Jiangshan <jiangshanlai@...il.com>,
Zqiang <qiang.zhang1211@...il.com>, linux-kernel@...r.kernel.org,
kernel-janitors@...r.kernel.org, rcu@...r.kernel.org
Subject: Re: [PATCH] refscale: Constify struct ref_scale_ops
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@...adoo.fr>
> ---
> Compile tested-only.
Tested-by: Paul E. McKenney <paulmck@...nel.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
>
Powered by blists - more mailing lists