From: Anderson Lizardo Date: Mon, 7 Oct 2013 21:05:24 +0000 (-0400) Subject: autopair: Remove time(NULL) fallback when seeding rand() X-Git-Tag: android-x86-4.4-r3~4970 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ef80103f95410619ed233d8f0f6462358c3d91af;p=android-x86%2Fexternal-bluetooth-bluez.git autopair: Remove time(NULL) fallback when seeding rand() If /dev/urandom cannot be opened or read, just fail the plugin initialization, as it is very unlikely that a fully working Linux system does not have a working /dev/urandom. This also simplifies the code logic. --- diff --git a/plugins/autopair.c b/plugins/autopair.c index c01d81c45..d63da93ac 100644 --- a/plugins/autopair.c +++ b/plugins/autopair.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -157,19 +158,27 @@ static int autopair_init(void) { /* Initialize the random seed from /dev/urandom */ unsigned int seed; - int fd; + int fd, err; + ssize_t n; fd = open("/dev/urandom", O_RDONLY); - if (fd >= 0) { - ssize_t n; - - n = read(fd, &seed, sizeof(seed)); - if (n < (ssize_t) sizeof(seed)) - seed = time(NULL); + if (fd < 0) { + err = -errno; + error("Failed to open /dev/urandom: %s (%d)", strerror(-err), + -err); + return err; + } + n = read(fd, &seed, sizeof(seed)); + if (n < (ssize_t) sizeof(seed)) { + err = (n == -1) ? -errno : -EIO; + error("Failed to read %zu bytes from /dev/urandom", + sizeof(seed)); close(fd); - } else - seed = time(NULL); + return err; + } + + close(fd); srand(seed);