I don't know how it is possible for /dev/hwrng to be present but
unreadable. Loading rng-core on a system without a hardware random
driver doesn't do it. However, it is possible to reproduce this poor
randomisation after running 'ln -s null /dev/hwrng'.
I've uploaded a fix for this and am attaching the NMU diff.
Ben.
--
Ben Hutchings
Lowery's Law:
If it jams, force it. If it breaks, it needed replacing anyway.
diff -Nru macchanger-1.7.0/debian/changelog macchanger-1.7.0/debian/changelog
--- macchanger-1.7.0/debian/changelog 2014-12-18 11:51:19.0 +
+++ macchanger-1.7.0/debian/changelog 2015-01-16 23:22:14.0 +
@@ -1,3 +1,10 @@
+macchanger (1.7.0-5.1) unstable; urgency=medium
+
+ * Non-maintainer upload
+ * Check for random device read errors (Closes: #775005)
+
+ -- Ben Hutchings b...@decadent.org.uk Fri, 16 Jan 2015 23:22:13 +
+
macchanger (1.7.0-5) unstable; urgency=low
* fix maintainer-script-without-set-e config
diff -Nru macchanger-1.7.0/debian/patches/check-random-device-read-errors.patch macchanger-1.7.0/debian/patches/check-random-device-read-errors.patch
--- macchanger-1.7.0/debian/patches/check-random-device-read-errors.patch 1970-01-01 01:00:00.0 +0100
+++ macchanger-1.7.0/debian/patches/check-random-device-read-errors.patch 2015-01-16 23:03:34.0 +
@@ -0,0 +1,47 @@
+Description: Check for random device read errors
+ In some cases it is possible to open /dev/hwrng but not to read from it.
+ We need to check for errors and move on to the next possible random device
+ in this case.
+Author: Ben Hutchings b...@decadent.org.uk
+Bug-Debian: https://bugs.debian.org/775005
+
+---
+--- a/src/main.c
b/src/main.c
+@@ -91,17 +91,29 @@ print_mac (const char *s, const mac_t *m
+ static void
+ random_seed (void)
+ {
++ static const char *const dev_names[] = {
++ /dev/hwrng,
++ /dev/random,
++ /dev/urandom,
++ NULL,
++ };
+ intfd;
+ struct timeval tv;
+ unsigned int seed;
++ const char *const *name;
++ ssize_tread_len = 0;
+
+- if ((fd = open(/dev/hwrng, O_RDONLY)) = 0 ||
+- (fd = open(/dev/random, O_RDONLY)) = 0 ||
+- (fd = open(/dev/urandom, O_RDONLY)) = 0)
+- {
+- read (fd, seed, sizeof(seed));
+- close (fd);
+- } else {
++ for (name = dev_names; *name; name++) {
++ fd = open(*name, O_RDONLY);
++ if (fd = 0) {
++ read_len = read (fd, seed, sizeof(seed));
++ close (fd);
++ if (read_len == sizeof(seed))
++break;
++ }
++ }
++
++ if (read_len != sizeof(seed)) {
+ gettimeofday (tv, NULL);
+ seed = (getpid() 16) ^ tv.tv_sec ^ tv.tv_usec;
+ }
diff -Nru macchanger-1.7.0/debian/patches/series macchanger-1.7.0/debian/patches/series
--- macchanger-1.7.0/debian/patches/series 2014-03-18 14:59:20.0 +
+++ macchanger-1.7.0/debian/patches/series 2015-01-16 22:51:05.0 +
@@ -1,3 +1,4 @@
02-fix_usage_message.patch
06-update_OUI_list.patch
08-fix_random_MAC_choice.patch
+check-random-device-read-errors.patch
signature.asc
Description: This is a digitally signed message part