Re: Forcing a more random uuid (random seed bug)

2005-02-22 Thread H. Peter Anvin
Followup to:  <[EMAIL PROTECTED]>
By author:[EMAIL PROTECTED]
In newsgroup: linux.dev.raid
>
> +if ((my_fd = open("/dev/random", O_RDONLY)) != -1) {
> 
> Please use /dev/urandom for such applications.  /dev/random is the
> highest-quality generator, but will block if entropy isn't available.
> /dev/urandom provides the best available, immediately, which is what
> this application wants.

Not 100% clear; the best would be to make it configurable.

Either way you must not use read() in the way described.  Short reads
happen, even with /dev/urandom.
 
> Also, this will only produce 2^32 possible UUIDs, since that's the
> size of the seed.  Meaning that after you've generated 2^16 of them,
> the chances are excellent that they're not UU any more.
> 
> You might just want to get all 128 (minus epsilon) bits from /dev/urandom
> directly.

You *do* want to get all bits from /dev/urandom directly.

-hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Forcing a more random uuid (random seed bug)

2005-02-22 Thread H. Peter Anvin
Followup to:  <[EMAIL PROTECTED]>
By author:Niccolo Rigacci <[EMAIL PROTECTED]>
In newsgroup: linux.dev.raid
>
> > I get /dev/md5, /dev/md6, /dev/md7
> > and /dev/md8 all with the same UUID!
> 
> It seems that there is a bug in mdadm: when generating the UUID for a 
> volume, the random() function is called, but the random sequence is never 
> initialized.
> 
> The result is that every volume created with mdadm has an uuid of:
> 6b8b4567:327b23c6:643c9869:66334873
> 
> See also Debian bug 292784 at
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=292784
> 
> I fixed the problem adding the following patch to mdadm.c, but please bear 
> in mind that I'm totally unaware of mdadm code and quite naive in C 
> programming:
> 

Please don't use (s)random at all, except as a possible fallback to
/dev/(u)random.

-hpa
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Forcing a more random uuid (random seed bug)

2005-02-08 Thread linux
+if ((my_fd = open("/dev/random", O_RDONLY)) != -1) {

Please use /dev/urandom for such applications.  /dev/random is the
highest-quality generator, but will block if entropy isn't available.
/dev/urandom provides the best available, immediately, which is what
this application wants.

Also, this will only produce 2^32 possible UUIDs, since that's the
size of the seed.  Meaning that after you've generated 2^16 of them,
the chances are excellent that they're not UU any more.

You might just want to get all 128 (minus epsilon) bits from /dev/urandom
directly.
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Forcing a more random uuid (random seed bug)

2005-02-02 Thread Niccolo Rigacci
> I get /dev/md5, /dev/md6, /dev/md7
> and /dev/md8 all with the same UUID!

It seems that there is a bug in mdadm: when generating the UUID for a 
volume, the random() function is called, but the random sequence is never 
initialized.

The result is that every volume created with mdadm has an uuid of:
6b8b4567:327b23c6:643c9869:66334873

See also Debian bug 292784 at
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=292784

I fixed the problem adding the following patch to mdadm.c, but please bear 
in mind that I'm totally unaware of mdadm code and quite naive in C 
programming:

$ diff -u mdadm.c.orig mdadm.c
--- mdadm.c.orig2004-11-02 06:11:06.0 +0100
+++ mdadm.c 2005-02-02 14:27:55.0 +0100
@@ -86,6 +86,15 @@
ident.super_minor= UnSet;
ident.devices=0;

+int my_fd;
+unsigned int my_seed;
+if ((my_fd = open("/dev/random", O_RDONLY)) != -1) {
+if (read(my_fd, &my_seed, sizeof(my_seed)) == sizeof(my_seed)) 
{
+srandom(my_seed);
+}
+close(my_fd);
+}
+
while ((option_index = -1) ,
   (opt=getopt_long(argc, argv,
short_options, long_options,




-- 
Niccolo Rigacci
http://www.texnet.it/
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html