From: Willy Tarreau <w@1wt.eu>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Andy Lutomirski <luto@kernel.org>,
Kees Cook <keescook@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
"security@kernel.org" <security@kernel.org>,
X86 ML <x86@kernel.org>, Borislav Petkov <bp@alien8.de>,
Sasha Levin <sasha.levin@oracle.com>,
LKML <linux-kernel@vger.kernel.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Jan Beulich <jbeulich@suse.com>,
xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH 1/2] sysctl: add a new generic strategy to make permanent changes on negative values
Date: Mon, 3 Aug 2015 20:50:13 +0200 [thread overview]
Message-ID: <20150803185013.GA24014@1wt.eu> (raw)
In-Reply-To: <CALCETrXANgsApcRYJva4RH8JhzWDs-GJLJ1-o0JczAowtfjNMw@mail.gmail.com>
On Mon, Aug 03, 2015 at 11:33:30AM -0700, Andy Lutomirski wrote:
> On Mon, Aug 3, 2015 at 11:23 AM, Willy Tarreau <w@1wt.eu> wrote:
> > The new function is proc_dointvec_minmax_negperm(), it refuses to change
> > the value if the current one is already negative. This will be used to
> > lock down some settings such as sensitive system calls.
> >
> > Signed-off-by: Willy Tarreau <w@1wt.eu>
> > ---
> > kernel/sysctl.c | 36 ++++++++++++++++++++++++++++++++++++
> > 1 file changed, 36 insertions(+)
> >
> > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > index 19b62b5..86c95a8 100644
> > --- a/kernel/sysctl.c
> > +++ b/kernel/sysctl.c
> > @@ -185,6 +185,9 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
> > void __user *buffer, size_t *lenp, loff_t *ppos);
> > #endif
> >
> > +static int proc_dointvec_minmax_negperm(struct ctl_table *table, int write,
> > + void __user *buffer, size_t *lenp, loff_t *ppos);
> > +
> > static int proc_dointvec_minmax_coredump(struct ctl_table *table, int write,
> > void __user *buffer, size_t *lenp, loff_t *ppos);
> > #ifdef CONFIG_COREDUMP
> > @@ -2249,6 +2252,33 @@ static void validate_coredump_safety(void)
> > #endif
> > }
> >
> > +/* Like minmax except that it refuses any change if the value was already
> > + * negative. It silently ignores overrides with the same negative value.
> > + */
> > +static int do_proc_dointvec_negperm_conv(bool *negp, unsigned long *lvalp,
> > + int *valp,
> > + int write, void *data)
> > +{
> > + if (write && *valp < 0 && (!*negp || *valp != (int)*lvalp))
>
> I could easily have failed to follow the bizarre negative sign
> convention, but shouldn't that be "*valp != -(int)*lvalp" or similar?
Not exactly since the sign is passed via negp apparently. There
is an expression in the called function which first assigns lvalp
or -lvalp to val depending on val, then uses the resulting value.
The code above is the (simplified for me) equivalent of :
int val = *negp ? -*lvalp : *lvalp;
if (write && *valp < 0 && *valp != val)
return -EINVAL;
Maybe you find it more readable in which case I can redo it this way ?
In my case it was the opposite in fact, I want to reject non-negative
values as well as the negative ones not equal to *valp.
Note that we could have decided to make it even simpler and always
reject writes once *valp is < 0 but I find that it would be annoying
for hardening scripts which would not be idempotent anymore.
Willy
next prev parent reply other threads:[~2015-08-03 18:50 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-03 18:23 [PATCH 0/2] x86: allow to enable/disable modify_ldt at run time Willy Tarreau
2015-08-03 18:23 ` [PATCH 1/2] sysctl: add a new generic strategy to make permanent changes on negative values Willy Tarreau
2015-08-03 18:23 ` Willy Tarreau
2015-08-03 18:33 ` Andy Lutomirski
2015-08-03 18:50 ` Willy Tarreau
2015-08-03 18:50 ` Willy Tarreau [this message]
2015-08-03 18:33 ` Andy Lutomirski
2015-08-03 18:23 ` [PATCH 2/2] x86/ldt: allow to disable modify_ldt at runtime Willy Tarreau
2015-08-03 18:23 ` Willy Tarreau
2015-08-03 18:45 ` Andy Lutomirski
2015-08-03 18:45 ` Andy Lutomirski
2015-08-03 19:01 ` Willy Tarreau
2015-08-03 19:06 ` Andy Lutomirski
2015-08-03 19:18 ` Willy Tarreau
2015-08-03 19:18 ` Willy Tarreau
2015-08-03 19:06 ` Andy Lutomirski
2015-08-03 19:01 ` Willy Tarreau
2015-08-04 3:54 ` Borislav Petkov
2015-08-04 6:00 ` Willy Tarreau
2015-08-04 6:00 ` Willy Tarreau
2015-08-04 3:54 ` Borislav Petkov
2015-08-03 22:35 ` Kees Cook
2015-08-03 23:19 ` Willy Tarreau
2015-08-04 1:36 ` Kees Cook
2015-08-04 1:36 ` Kees Cook
2015-08-03 23:19 ` Willy Tarreau
2015-08-03 22:35 ` Kees Cook
2015-08-04 8:49 ` [PATCH v3 1/1] x86: allow to enable/disable modify_ldt at run time Willy Tarreau
2015-08-04 8:49 ` Willy Tarreau
2015-08-05 8:00 ` Ingo Molnar
2015-08-05 8:00 ` Ingo Molnar
2015-08-05 8:08 ` Willy Tarreau
2015-08-05 8:08 ` Willy Tarreau
2015-08-05 8:26 ` Ingo Molnar
2015-08-05 8:26 ` Ingo Molnar
2015-08-05 9:03 ` Willy Tarreau
2015-08-05 9:03 ` Willy Tarreau
2015-08-05 9:10 ` Ingo Molnar
2015-08-05 9:10 ` Ingo Molnar
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=20150803185013.GA24014@1wt.eu \
--to=w@1wt.eu \
--cc=andrew.cooper3@citrix.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=jbeulich@suse.com \
--cc=keescook@chromium.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sasha.levin@oracle.com \
--cc=security@kernel.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xen.org \
/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.