]> granicus.if.org Git - libexpat/commit
Resolve call to srand, use more entropy
authorSebastian Pipping <sebastian@pipping.org>
Wed, 16 Mar 2016 14:30:12 +0000 (15:30 +0100)
committerSebastian Pipping <sebastian@pipping.org>
Sun, 20 Mar 2016 19:20:57 +0000 (20:20 +0100)
commit6acb0a47372a9079cc6ff70c384f015a47f2c34a
tree2e575366e3996fc14724a90de4bb57a778f7b02a
parent75a1473981bb5af81276289db9ca77eedd7abda2
Resolve call to srand, use more entropy

Since commit e3e81a6d9f0885ea02d3979151c358f314bf3d6d
(released with Expat 2.1.0) Expat called srand by itself
from inside generate_hash_secret_salt for an instance
of XML_Parser if XML_SetHashSalt was either (a) not called
for that instance or if (b) salt 0 was passed to XML_SetHashSalt
prior to parsing.  That call to srand passed (rather litle)
entropy extracted from the current time as a seed for srand.

That call to srand (1) broke repeatability for code calling
srand with a non-random seed prior to parsing with Expat,
and (2) resulted in a rather small set of hashing salts in
Expat in total.

For a short- to mid-term fix, the new approach avoids calling
srand altogether, extracts more entropy out of the clock and
adds some additional entropy from the process ID, too.

For a long term fix, we may want to read sizeof(long) bytes
from a source like getrandom(..) on Linux, and from similar
sources on other supported architectures.

https://bugzilla.redhat.com/show_bug.cgi?id=1197087
expat/lib/xmlparse.c