0e55d5b
From a7afdf46c3193eb102cc6ec2a3b61e8d36794437 Mon Sep 17 00:00:00 2001
0e55d5b
From: Mike Christie <michaelc@cs.wisc.edu>
0e55d5b
Date: Fri, 14 Dec 2012 12:40:27 -0600
0e55d5b
Subject: iscsi tools: fix get_random_bytes error handling
0e55d5b
0e55d5b
Bug report from Rahul:
0e55d5b
0e55d5b
There seems to be a bug in function get_random_bytes(). I reported
0e55d5b
this earlier as well but somehow it didn't appear here.
0e55d5b
0e55d5b
get_random_bytes(unsigned char *data, unsigned int length)
0e55d5b
{
0e55d5b
	long r;
0e55d5b
        unsigned n;
0e55d5b
	int fd;
0e55d5b
0e55d5b
	fd = open("/dev/urandom", O_RDONLY);
0e55d5b
        	while (length > 0) {
0e55d5b
0e55d5b
	if (!fd || read(fd, &r, sizeof(long)) != -1)      <<<< the condition is
0e55d5b
incorrect
0e55d5b
---
0e55d5b
 usr/auth.c | 8 ++++----
0e55d5b
 1 file changed, 4 insertions(+), 4 deletions(-)
0e55d5b
0e55d5b
diff --git a/usr/auth.c b/usr/auth.c
0e55d5b
index c924545..4ff0425 100644
0e55d5b
--- a/usr/auth.c
0e55d5b
+++ b/usr/auth.c
0e55d5b
@@ -189,24 +189,24 @@ get_random_bytes(unsigned char *data, unsigned int length)
0e55d5b
 
0e55d5b
 	long r;
0e55d5b
         unsigned n;
0e55d5b
-	int fd;
0e55d5b
+	int fd, r_size = sizeof(r);
0e55d5b
 
0e55d5b
 	fd = open("/dev/urandom", O_RDONLY);
0e55d5b
         while (length > 0) {
0e55d5b
 
0e55d5b
-		if (!fd || read(fd, &r, sizeof(long)) != -1)
0e55d5b
+		if (fd == -1 || read(fd, &r, r_size) != r_size)
0e55d5b
 			r = rand();
0e55d5b
                 r = r ^ (r >> 8);
0e55d5b
                 r = r ^ (r >> 4);
0e55d5b
                 n = r & 0x7;
0e55d5b
 
0e55d5b
-		if (!fd || read(fd, &r, sizeof(long)) != -1)
0e55d5b
+		if (fd == -1 || read(fd, &r, r_size) != r_size)
0e55d5b
 			r = rand();
0e55d5b
                 r = r ^ (r >> 8);
0e55d5b
                 r = r ^ (r >> 5);
0e55d5b
                 n = (n << 3) | (r & 0x7);
0e55d5b
 
0e55d5b
-		if (!fd || read(fd, &r, sizeof(long)) != -1)
0e55d5b
+		if (fd == -1 || read(fd, &r, r_size) != r_size)
0e55d5b
 			r = rand();
0e55d5b
                 r = r ^ (r >> 8);
0e55d5b
                 r = r ^ (r >> 5);
0e55d5b
-- 
0e55d5b
1.7.11.7
0e55d5b