From: Luis Chamberlain <mcgrof@kernel.org>
To: Xiaoming Ni <nixiaoming@huawei.com>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
keescook@chromium.org, yzaikin@google.com, adobriyan@gmail.com,
mingo@kernel.org, gpiccoli@canonical.com, rdna@fb.com,
patrick.bellasi@arm.com, sfr@canb.auug.org.au,
akpm@linux-foundation.org, mhocko@suse.com, vbabka@suse.cz,
tglx@linutronix.de, peterz@infradead.org,
Jisheng.Zhang@synaptics.com, khlebnikov@yandex-team.ru,
bigeasy@linutronix.de, pmladek@suse.com,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
wangle6@huawei.com, alex.huangjianhui@huawei.com
Subject: Re: [PATCH v4 2/4] sysctl: Move some boundary constants form sysctl.c to sysctl_vals
Date: Wed, 20 May 2020 01:39:49 +0000 [thread overview]
Message-ID: <20200520013949.GV11244@42.do-not-panic.com> (raw)
In-Reply-To: <550a55b8-d2a8-0de3-0bed-8f93a4513efe@huawei.com>
On Wed, May 20, 2020 at 09:14:08AM +0800, Xiaoming Ni wrote:
> On 2020/5/19 12:44, Tetsuo Handa wrote:
> > On 2020/05/19 12:31, Xiaoming Ni wrote:
> > > Some boundary (.extra1 .extra2) constants (E.g: neg_one two) in
> > > sysctl.c are used in multiple features. Move these variables to
> > > sysctl_vals to avoid adding duplicate variables when cleaning up
> > > sysctls table.
> > >
> > > Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com>
> > > Reviewed-by: Kees Cook <keescook@chromium.org>
> >
> > I feel that it is use of
> >
> > void *extra1;
> > void *extra2;
> >
> > in "struct ctl_table" that requires constant values indirection.
> > Can't we get rid of sysctl_vals using some "union" like below?
> >
> > struct ctl_table {
> > const char *procname; /* Text ID for /proc/sys, or zero */
> > void *data;
> > int maxlen;
> > umode_t mode;
> > struct ctl_table *child; /* Deprecated */
> > proc_handler *proc_handler; /* Callback for text formatting */
> > struct ctl_table_poll *poll;
> > union {
> > void *min_max_ptr[2];
> > int min_max_int[2];
> > long min_max_long[2];
> > };
> > } __randomize_layout;
> >
> > .
> >
>
> net/decnet/dn_dev.c:
> static void dn_dev_sysctl_register(struct net_device *dev, struct
> dn_dev_parms *parms)
> {
> struct dn_dev_sysctl_table *t;
> int i;
>
> char path[sizeof("net/decnet/conf/") + IFNAMSIZ];
>
> t = kmemdup(&dn_dev_sysctl, sizeof(*t), GFP_KERNEL);
> if (t == NULL)
> return;
>
> for(i = 0; i < ARRAY_SIZE(t->dn_dev_vars) - 1; i++) {
> long offset = (long)t->dn_dev_vars[i].data;
> t->dn_dev_vars[i].data = ((char *)parms) + offset;
> }
>
> snprintf(path, sizeof(path), "net/decnet/conf/%s",
> dev? dev->name : parms->name);
>
> t->dn_dev_vars[0].extra1 = (void *)dev;
>
> t->sysctl_header = register_net_sysctl(&init_net, path, t->dn_dev_vars);
> if (t->sysctl_header == NULL)
> kfree(t);
> else
> parms->sysctl = t;
> }
>
> A small amount of code is not used as a boundary value when using extra1.
> This scenario may not be suitable for renaming to min_max_ptr.
>
> Should we add const to extra1 extra2 ?
>
> --- a/include/linux/sysctl.h
> +++ b/include/linux/sysctl.h
> @@ -124,8 +124,8 @@ struct ctl_table {
> struct ctl_table *child; /* Deprecated */
> proc_handler *proc_handler; /* Callback for text formatting */
> struct ctl_table_poll *poll;
> - void *extra1;
> - void *extra2;
> + const void *extra1;
> + const void *extra2;
> } __randomize_layout;
Do that, compile an allyesconfig and it'll fail, but if you fix the
callers so that they use a const, then yes. That would cover only your
architecture. It is unclear if we ever used non-const for this on purpose.
Luis
next prev parent reply other threads:[~2020-05-20 1:39 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-19 3:31 [PATCH v4 0/4] cleaning up the sysctls table (hung_task watchdog) Xiaoming Ni
2020-05-19 3:31 ` [PATCH v4 1/4] sysctl: Add register_sysctl_init() interface Xiaoming Ni
2020-05-29 7:09 ` Luis Chamberlain
2020-05-29 7:27 ` Xiaoming Ni
2020-05-29 7:36 ` Luis Chamberlain
2020-05-29 8:33 ` Xiaoming Ni
2020-05-29 11:31 ` Luis Chamberlain
2020-05-19 3:31 ` [PATCH v4 2/4] sysctl: Move some boundary constants form sysctl.c to sysctl_vals Xiaoming Ni
2020-05-19 4:44 ` Tetsuo Handa
2020-05-20 1:14 ` Xiaoming Ni
2020-05-20 1:39 ` Luis Chamberlain [this message]
2020-05-19 3:31 ` [PATCH v4 3/4] hung_task: Move hung_task sysctl interface to hung_task.c Xiaoming Ni
2020-05-19 3:31 ` [PATCH v4 4/4] watchdog: move watchdog sysctl interface to watchdog.c Xiaoming Ni
2020-05-20 3:31 ` [PATCH v4 0/4] cleaning up the sysctls table (hung_task watchdog) Andrew Morton
2020-05-20 4:02 ` Xiaoming Ni
2020-05-20 13:08 ` Luis Chamberlain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200520013949.GV11244@42.do-not-panic.com \
--to=mcgrof@kernel.org \
--cc=Jisheng.Zhang@synaptics.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alex.huangjianhui@huawei.com \
--cc=bigeasy@linutronix.de \
--cc=gpiccoli@canonical.com \
--cc=keescook@chromium.org \
--cc=khlebnikov@yandex-team.ru \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@kernel.org \
--cc=nixiaoming@huawei.com \
--cc=patrick.bellasi@arm.com \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rdna@fb.com \
--cc=sfr@canb.auug.org.au \
--cc=tglx@linutronix.de \
--cc=vbabka@suse.cz \
--cc=wangle6@huawei.com \
--cc=yzaikin@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.