lkml.org 
[lkml]   [2016]   [Aug]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    SubjectRe: [PATCH v3 1/7] random: Simplify API for random address requests
    Hi,

    Le mercredi 03 août 2016 à 23:39 +0000, Jason Cooper a écrit :

    > diff --git a/drivers/char/random.c b/drivers/char/random.c
    > index 0158d3bff7e5..61cb434e3bea 100644
    > --- a/drivers/char/random.c
    > +++ b/drivers/char/random.c
    > @@ -1840,6 +1840,39 @@ randomize_range(unsigned long start, unsigned
    > long end, unsigned long len)
    >   return PAGE_ALIGN(get_random_int() % range + start);
    >  }
    >  
    > +/**
    > + * randomize_page - Generate a random, page aligned address
    > + * @start: The smallest acceptable address the caller will
    > take.
    > + * @range: The size of the area, starting at @start, within
    > which the
    > + * random address must fall.
    > + *
    > + * If @start + @range would overflow, @range is capped.
    > + *
    > + * NOTE: Historical use of randomize_range, which this replaces,
    > presumed that
    > + * @start was already page aligned.  We now align it regardless.
    > + *
    > + * Return: A page aligned address within [start, start + range).  On
    > error,
    > + * @start is returned.
    > + */
    > +unsigned long
    > +randomize_page(unsigned long start, unsigned long range)
    > +{

    To prevent an underflow if start is not page aligned (but will one
    would ever use a non aligned start address *and* range ? ...)

            if (range < PAGE_SIZE)
                    return start;


    > + if (!PAGE_ALIGNED(start)) {
    > + range -= PAGE_ALIGN(start) - start;
    > + start = PAGE_ALIGN(start);
    > + }
    > +
    > + if (start > ULONG_MAX - range)
    > + range = ULONG_MAX - start;
    > +
    > + range >>= PAGE_SHIFT;
    > +
    > + if (range == 0)
    > + return start;
    > +
    > + return start + (get_random_long() % range << PAGE_SHIFT);
    > +}
    > +
    >  /* Interface for in-kernel drivers of true hardware RNGs.
    >   * Those devices may produce endless random bits and will be
    > throttled
    >   * when our pool is full.


    Regards.

    -- 
    Yann Droneaud
    OPTEYA
    \
     
     \ /
      Last update: 2016-08-04 15:21    [W:2.557 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site