[Libvirt-cim] [PATCH] Improve random MAC generator

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Tue Mar 17 05:06:00 UTC 2009


# HG changeset patch
# User Kaitlin Rupert <karupert at 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 at 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,




More information about the Libvirt-cim mailing list