[PATCH] Improve random MAC generator

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1237266354 25200 # Node ID 69b7af00d9da92ce169d915bb6b17c493fe0b021 # Parent 160e1a86d82e8ed930e3006098f2af8b230c9834 Improve random MAC generator Use microseconds since the epoch instead of seconds. When defining a guest with multiple net devices specified (in which none of them have a MAC supplied), it's possible for _net_rand_mac() to be called in rapid succession. Also, initialize s - the seed value passed to rand_r(). Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 160e1a86d82e -r 69b7af00d9da src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Mar 16 13:55:02 2009 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Mon Mar 16 22:05:54 2009 -0700 @@ -25,6 +25,7 @@ #include <stdbool.h> #include <inttypes.h> #include <time.h> +#include <sys/time.h> #include <libvirt/libvirt.h> #include "cmpidt.h" @@ -383,8 +384,14 @@ const char *_mac = NULL; CMPIString *str = NULL; CMPIStatus status; + struct timeval curr_time; - srand(time(NULL)); + ret = gettimeofday(&curr_time, NULL); + if (ret != 0) + goto out; + + srand(curr_time.tv_usec); + s = curr_time.tv_usec; r = rand_r(&s); ret = asprintf(&mac,

+1 Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1237266354 25200 # Node ID 69b7af00d9da92ce169d915bb6b17c493fe0b021 # Parent 160e1a86d82e8ed930e3006098f2af8b230c9834 Improve random MAC generator
Use microseconds since the epoch instead of seconds. When defining a guest with multiple net devices specified (in which none of them have a MAC supplied), it's possible for _net_rand_mac() to be called in rapid succession.
Also, initialize s - the seed value passed to rand_r().
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
diff -r 160e1a86d82e -r 69b7af00d9da src/Virt_VirtualSystemManagementService.c --- a/src/Virt_VirtualSystemManagementService.c Mon Mar 16 13:55:02 2009 -0700 +++ b/src/Virt_VirtualSystemManagementService.c Mon Mar 16 22:05:54 2009 -0700 @@ -25,6 +25,7 @@ #include <stdbool.h> #include <inttypes.h> #include <time.h> +#include <sys/time.h> #include <libvirt/libvirt.h>
#include "cmpidt.h" @@ -383,8 +384,14 @@ const char *_mac = NULL; CMPIString *str = NULL; CMPIStatus status; + struct timeval curr_time;
- srand(time(NULL)); + ret = gettimeofday(&curr_time, NULL); + if (ret != 0) + goto out; + + srand(curr_time.tv_usec); + s = curr_time.tv_usec; r = rand_r(&s);
ret = asprintf(&mac,
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Richard Maciel, MSc IBM Linux Technology Center rmaciel@linux.vnet.ibm.com
participants (2)
-
Kaitlin Rupert
-
Richard Maciel