Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 26 Jul 2016 17:33:13 +0000
From: "Roberts, William C" <william.c.roberts@...el.com>
To: Jason Cooper <jason@...edaemon.net>, "linux-mm@...r.kernel.org"
	<linux-mm@...r.kernel.org>, "linux-kernel@...r.kernel.org"
	<linux-kernel@...r.kernel.org>, "kernel-hardening@...ts.openwall.com"
	<kernel-hardening@...ts.openwall.com>
CC: "linux@....linux.org.uk" <linux@....linux.org.uk>,
	"akpm@...ux-foundation.org" <akpm@...ux-foundation.org>,
	"keescook@...omium.org" <keescook@...omium.org>, "tytso@....edu"
	<tytso@....edu>, "arnd@...db.de" <arnd@...db.de>,
	"gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>,
	"catalin.marinas@....com" <catalin.marinas@....com>, "will.deacon@....com"
	<will.deacon@....com>, "ralf@...ux-mips.org" <ralf@...ux-mips.org>,
	"benh@...nel.crashing.org" <benh@...nel.crashing.org>, "paulus@...ba.org"
	<paulus@...ba.org>, "mpe@...erman.id.au" <mpe@...erman.id.au>,
	"davem@...emloft.net" <davem@...emloft.net>, "tglx@...utronix.de"
	<tglx@...utronix.de>, "mingo@...hat.com" <mingo@...hat.com>, "hpa@...or.com"
	<hpa@...or.com>, "x86@...nel.org" <x86@...nel.org>, "viro@...iv.linux.org.uk"
	<viro@...iv.linux.org.uk>, "nnk@...gle.com" <nnk@...gle.com>,
	"jeffv@...gle.com" <jeffv@...gle.com>, "alyzyn@...roid.com"
	<alyzyn@...roid.com>, "dcashman@...roid.com" <dcashman@...roid.com>
Subject: RE: [RFC patch 1/6] random: Simplify API for random address requests



> -----Original Message-----
> From: Jason Cooper [mailto:jason@...edaemon.net]
> Sent: Monday, July 25, 2016 8:31 PM
> To: Roberts, William C <william.c.roberts@...el.com>; linux-
> mm@...r.kernel.org; linux-kernel@...r.kernel.org; kernel-
> hardening@...ts.openwall.com
> Cc: linux@....linux.org.uk; akpm@...ux-foundation.org;
> keescook@...omium.org; tytso@....edu; arnd@...db.de;
> gregkh@...uxfoundation.org; catalin.marinas@....com; will.deacon@....com;
> ralf@...ux-mips.org; benh@...nel.crashing.org; paulus@...ba.org;
> mpe@...erman.id.au; davem@...emloft.net; tglx@...utronix.de;
> mingo@...hat.com; hpa@...or.com; x86@...nel.org; viro@...iv.linux.org.uk;
> nnk@...gle.com; jeffv@...gle.com; alyzyn@...roid.com;
> dcashman@...roid.com
> Subject: Re: [RFC patch 1/6] random: Simplify API for random address requests
> 
> All,
> 
> On Tue, Jul 26, 2016 at 03:01:55AM +0000, Jason Cooper wrote:
> > To date, all callers of randomize_range() have set the length to 0,
> > and check for a zero return value.  For the current callers, the only
> > way to get zero returned is if end <= start.  Since they are all
> > adding a constant to the start address, this is unnecessary.
> >
> > We can remove a bunch of needless checks by simplifying the API to do
> > just what everyone wants, return an address between [start, start +
> > range].
> >
> > While we're here, s/get_random_int/get_random_long/.  No current call
> > site is adversely affected by get_random_int(), since all current
> > range requests are < MAX_UINT.  However, we should match caller
> > expectations to avoid coming up short (ha!) in the future.
> >
> > Signed-off-by: Jason Cooper <jason@...edaemon.net>
> > ---
> >  drivers/char/random.c  | 17 ++++-------------  include/linux/random.h
> > |  2 +-
> >  2 files changed, 5 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/char/random.c b/drivers/char/random.c index
> > 0158d3bff7e5..1251cb2cbab2 100644
> > --- a/drivers/char/random.c
> > +++ b/drivers/char/random.c
> > @@ -1822,22 +1822,13 @@ unsigned long get_random_long(void)
> > EXPORT_SYMBOL(get_random_long);
> >
> >  /*
> > - * randomize_range() returns a start address such that
> > - *
> > - *    [...... <range> .....]
> > - *  start                  end
> > - *
> > - * a <range> with size "len" starting at the return value is inside
> > in the
> > - * area defined by [start, end], but is otherwise randomized.
> > + * randomize_addr() returns a page aligned address within [start,
> > + start +
> > + * range]
> >   */
> >  unsigned long
> > -randomize_range(unsigned long start, unsigned long end, unsigned long
> > len)
> > +randomize_addr(unsigned long start, unsigned long range)
> >  {
> > -	unsigned long range = end - len - start;
> > -
> > -	if (end <= start + len)
> > -		return 0;
> > -	return PAGE_ALIGN(get_random_int() % range + start);
> > +	return PAGE_ALIGN(get_random_long() % range + start);
> >  }
> 
> bah!  old patch file.  This should have been:
> 
> if (range == 0)
> 	return start;
> else
> 	return PAGE_ALIGN(get_random_long() % range + start);
> 
> sorry,

Yeah that looks better. I had a similar intended set of changes locally, because of the issues Jason pointed out.
I ended up in the old case where if end - start == len it returns 0 instead of start. Jason's change is better though :-P

> 
> Jason.
> 
> >
> >  /* Interface for in-kernel drivers of true hardware RNGs.
> > diff --git a/include/linux/random.h b/include/linux/random.h index
> > e47e533742b5..1ad877a98186 100644
> > --- a/include/linux/random.h
> > +++ b/include/linux/random.h
> > @@ -34,7 +34,7 @@ extern const struct file_operations random_fops,
> > urandom_fops;
> >
> >  unsigned int get_random_int(void);
> >  unsigned long get_random_long(void);
> > -unsigned long randomize_range(unsigned long start, unsigned long end,
> > unsigned long len);
> > +unsigned long randomize_addr(unsigned long start, unsigned long
> > +range);
> >
> >  u32 prandom_u32(void);
> >  void prandom_bytes(void *buf, size_t nbytes);
> > --
> > 2.9.2
> >

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.