D5966: Fix race-condition in KRandom-seeding.
Thomas Friedrichsmeier
noreply at phabricator.kde.org
Wed May 24 20:56:37 UTC 2017
tfry created this revision.
Restricted Application added a project: Frameworks.
Restricted Application added a subscriber: Frameworks.
REVISION SUMMARY
Consider the following scenario: Thread A calls KRandom::random(), for the first time.
It will now go through a (relatively) expensive procedure to seed the RNG. Note that before
this patch, "init" is set to true long _before_ the actual call to qsrand().
Now, thread B calls KRandom::random() in this sensitive time window. Since it finds "init"
to be true, it will skip over the expensive initialization, and be very likely to arrive at
qrand(), before thread A had a chance to call qsrand().
This patch is the simplest possible solution: Making sure init is set, _after_ the seed was
really initialized. This does not prevent init races, but the worst case scenario is now, that
several threads are each going through the seeding. A more elaborate solution would be to
add mutex-protection during initialization.
REPOSITORY
R244 KCoreAddons
BRANCH
master
REVISION DETAIL
https://phabricator.kde.org/D5966
AFFECTED FILES
src/lib/randomness/krandom.cpp
To: tfry, dfaure
Cc: tfry, rjvbb, #frameworks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20170524/cbd5dd01/attachment-0001.html>
More information about the Kde-frameworks-devel
mailing list