[lvm-devel] LVM2 ./WHATS_NEW lib/misc/lvm-wrappers.c lib/m ...

wysochanski at sourceware.org wysochanski at sourceware.org
Sun Dec 7 04:23:38 UTC 2008


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski at sourceware.org	2008-12-07 04:23:37

Modified files:
	.              : WHATS_NEW 
	lib/misc       : lvm-wrappers.c lvm-wrappers.h 
	lib/uuid       : uuid.c 

Log message:
	Add generic function to read /dev/urandom, used in uuid calculation.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1004&r2=1.1005
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/misc/lvm-wrappers.c.diff?cvsroot=lvm2&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/misc/lvm-wrappers.h.diff?cvsroot=lvm2&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/uuid/uuid.c.diff?cvsroot=lvm2&r1=1.28&r2=1.29

--- LVM2/WHATS_NEW	2008/12/04 15:54:26	1.1004
+++ LVM2/WHATS_NEW	2008/12/07 04:23:37	1.1005
@@ -1,5 +1,6 @@
 Version 2.02.44 - 
 ====================================
+  Add generic function to read /dev/urandom, used in uuid calculation.
   Use displayable_lvs_in_vg and lv_is_displayable for consistency throughout.
   Fix race in vgcreate that would result in second caller overwriting first.
   Fix uninitialised lv_count in vgdisplay -c.
--- LVM2/lib/misc/lvm-wrappers.c	2007/08/20 20:55:27	1.2
+++ LVM2/lib/misc/lvm-wrappers.c	2008/12/07 04:23:37	1.3
@@ -15,8 +15,34 @@
 #include "lib.h"
 
 #include <unistd.h>
+#include <fcntl.h>
 
 int lvm_getpagesize(void)
 {
 	return getpagesize();
 }
+
+int read_urandom(void *buf, size_t len)
+{
+	int fd;
+
+	/* FIXME: we should stat here, and handle other cases */
+	/* FIXME: use common _io() routine's open/read/close */
+	if ((fd = open("/dev/urandom", O_RDONLY)) < 0) {
+		log_sys_error("open", "read_urandom: /dev/urandom");
+		return 0;
+	}
+
+	if (read(fd, buf, len) != (ssize_t) len) {
+		log_sys_error("read", "read_urandom: /dev/urandom");
+		if (close(fd))
+			stack;
+		return 0;
+	}
+
+	if (close(fd))
+		stack;
+
+	return 1;
+}
+
--- LVM2/lib/misc/lvm-wrappers.h	2007/08/20 20:55:27	1.2
+++ LVM2/lib/misc/lvm-wrappers.h	2008/12/07 04:23:37	1.3
@@ -18,4 +18,9 @@
 
 int lvm_getpagesize(void);
 
+/*
+ * Read 'len' bytes of entropy from /dev/urandom and store in 'buf'.
+ */
+int read_urandom(void *buf, size_t len);
+
 #endif
--- LVM2/lib/uuid/uuid.c	2008/11/04 15:07:45	1.28
+++ LVM2/lib/uuid/uuid.c	2008/12/07 04:23:37	1.29
@@ -15,6 +15,7 @@
 
 #include "lib.h"
 #include "uuid.h"
+#include "lvm-wrappers.h"
 
 #include <assert.h>
 #include <sys/stat.h>
@@ -94,25 +95,14 @@
 
 int id_create(struct id *id)
 {
-	int randomfile;
 	unsigned i;
 	size_t len = sizeof(id->uuid);
 
 	memset(id->uuid, 0, len);
-	if ((randomfile = open("/dev/urandom", O_RDONLY)) < 0) {
-		log_sys_error("open", "id_create: /dev/urandom");
+	if (!read_urandom(&id->uuid, len)) {
 		return 0;
 	}
 
-	if (read(randomfile, id->uuid, len) != (ssize_t) len) {
-		log_sys_error("read", "id_create: /dev/urandom");
-		if (close(randomfile))
-			stack;
-		return 0;
-	}
-	if (close(randomfile))
-		stack;
-
 	/*
 	 * Skip out the last 2 chars in randomized creation for LVM1
 	 * backwards compatibility.




More information about the lvm-devel mailing list