[ovs-dev] [threads 08/11] random: Make thread-safe.

Ansis Atteka aatteka at nicira.com
Tue Jun 25 17:37:03 UTC 2013


On Mon, Jun 24, 2013 at 10:03 PM, Ben Pfaff <blp at nicira.com> wrote:

> On Mon, Jun 24, 2013 at 03:50:45PM -0700, Ansis Atteka wrote:
> > On Wed, Jun 19, 2013 at 1:17 PM, Ben Pfaff <blp at nicira.com> wrote:
> >
> > > Signed-off-by: Ben Pfaff <blp at nicira.com>
> > > ---
> > >  lib/random.c |   26 +++++++++++++++++---------
> > >  1 files changed, 17 insertions(+), 9 deletions(-)
> > >
> > > diff --git a/lib/random.c b/lib/random.c
> > > index 45d428c..2572c1e 100644
> > > --- a/lib/random.c
> > > +++ b/lib/random.c
> > > @@ -1,5 +1,5 @@
> > >  /*
> > > - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
> > > + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
> > >   *
> > >   * Licensed under the Apache License, Version 2.0 (the "License");
> > >   * you may not use this file except in compliance with the License.
> > > @@ -22,6 +22,8 @@
> > >  #include <sys/time.h>
> > >
> > >  #include "entropy.h"
> > > +#include "hash.h"
> > > +#include "ovs-thread.h"
> > >  #include "timeval.h"
> > >  #include "util.h"
> > >
> > > @@ -37,21 +39,25 @@
> > >   * cryptographic-quality randomness. */
> > >
> > >  /* Current random state. */
> > > -static uint32_t seed;
> > > +DEFINE_PER_THREAD_DATA(uint32_t, seed, 0);
> > >
> > >  static uint32_t random_next(void);
> > >
> > >  void
> > >  random_init(void)
> > >  {
> > > -    while (!seed) {
> > >
> > +    uint32_t *seedp = seed_get();
> >
> > +    while (!*seedp) {
> > >          struct timeval tv;
> > >          uint32_t entropy;
> > > +        pthread_t self;
> > >
> > >          xgettimeofday(&tv);
> > >          get_entropy_or_die(&entropy, 4);
> > >
> > get_entropy() is not thread safe and that makes this function thread
> unsafe
> > as well: get_entropy()->ovs_retval_to_string() uses "static char
> > unknown[48]".
>
> The patch titled "Replace all uses of strerror() by ovs_strerror(), for
> thread safety."  should make ovs_retval_to_string() thread-safe, so I
> believe that that is fixed earlier in the series.
>
> I think you are right, sorry!

Looks good to me.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20130625/802c668e/attachment-0003.html>


More information about the dev mailing list