--- nss-3.11.7/nss-3.11.5/mozilla/security/nss/lib/freebl/unix_rand.c.bak 2007-08-09 20:14:16.606845012 +0300 +++ nss-3.11.7/nss-3.11.5/mozilla/security/nss/lib/freebl/unix_rand.c 2007-08-11 23:29:31.651983073 +0300 @@ -1132,26 +1132,18 @@ size_t RNG_SystemRNG(void *dest, size_t { FILE *file; size_t bytes; - size_t fileBytes = 0; - unsigned char *buffer = dest; file = fopen("/dev/urandom", "r"); if (file == NULL) { PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); - return fileBytes; - } - while (maxLen > fileBytes) { - bytes = maxLen - fileBytes; - bytes = fread(buffer, 1, bytes, file); - if (bytes == 0) - break; - fileBytes += bytes; - buffer += bytes; + return 0; } + setbuf(file, NULL); + bytes = fread(dest, 1, maxLen, file); fclose(file); - if (fileBytes != maxLen) { + if (bytes != maxLen) { PORT_SetError(SEC_ERROR_NEED_RANDOM); /* system RNG failed */ - fileBytes = 0; + return 0; } - return fileBytes; + return bytes; }