[Libreoffice-commits] online.git: loolwsd/LOOLKit.cpp loolwsd/Util.cpp loolwsd/Util.hpp
Ashod Nakashian
ashod.nakashian at collabora.co.uk
Mon Mar 14 03:06:47 UTC 2016
loolwsd/LOOLKit.cpp | 5 +++--
loolwsd/Util.cpp | 17 ++++++++++++++++-
loolwsd/Util.hpp | 3 ++-
3 files changed, 21 insertions(+), 4 deletions(-)
New commits:
commit 019aed134e17b69e615a5990eab8c471184973e9
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
Date: Sat Mar 12 10:15:45 2016 -0500
loolwsd: using random jailId
Change-Id: Ie9501e4346a124994270ca1fac61869ed04b9b72
Reviewed-on: https://gerrit.libreoffice.org/23213
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
Tested-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp
index 5414a26..4fb6141 100644
--- a/loolwsd/LOOLKit.cpp
+++ b/loolwsd/LOOLKit.cpp
@@ -414,7 +414,7 @@ public:
[this](const std::string& id, const std::string& uri, const std::string& docPassword, bool isDocPasswordProvided) { return onLoad(id, uri, docPassword, isDocPasswordProvided); },
[this](const std::string& id) { onUnload(id); });
// child -> 0, sessionId -> 1, PID -> 2
- const std::string hello("child " + sessionId + " " + std::to_string(Process::id()));
+ const std::string hello("child " + sessionId + " " + _jailId);
session->sendTextFrame(hello);
auto thread = std::make_shared<Connection>(session, ws);
@@ -764,6 +764,7 @@ void lokit_main(const std::string& childRoot,
#ifdef LOOLKIT_NO_MAIN
// Reinitialize logging when forked.
Log::initialize("kit");
+ Util::rng::reseed();
#endif
struct pollfd pollPipeBroker;
@@ -782,7 +783,7 @@ void lokit_main(const std::string& childRoot,
std::map<std::string, std::shared_ptr<Document>> _documents;
- static const std::string jailId = std::to_string(Process::id());
+ static const std::string jailId = Util::encodeId(Util::rng::getNext());
static const std::string process_name = "loolkit";
if (prctl(PR_SET_NAME, reinterpret_cast<unsigned long>(process_name.c_str()), 0, 0, 0) != 0)
diff --git a/loolwsd/Util.cpp b/loolwsd/Util.cpp
index 7485a9e..5fc9a2a 100644
--- a/loolwsd/Util.cpp
+++ b/loolwsd/Util.cpp
@@ -65,7 +65,22 @@ namespace rng
{
static std::random_device _rd;
static std::mutex _rngMutex;
- static std::mt19937_64 _rng = std::mt19937_64(_rd());
+
+ // Create the prng with a random-device for seed.
+ // If we don't have a hardware random-device, we will get the same seed.
+ // In that case we are better off with an arbitrary, but changing, seed.
+ static std::mt19937_64 _rng = std::mt19937_64(_rd.entropy()
+ ? _rd()
+ : (clock() + getpid()));
+
+ // A new seed is used to shuffle the sequence.
+ // N.B. Always reseed after getting forked!
+ void reseed()
+ {
+ _rng.seed(_rd.entropy() ? _rd() : (clock() + getpid()));
+ }
+
+ // Returns a new random number.
unsigned getNext()
{
std::unique_lock<std::mutex> lock(_rngMutex);
diff --git a/loolwsd/Util.hpp b/loolwsd/Util.hpp
index 1e6e515..2e83ea8 100644
--- a/loolwsd/Util.hpp
+++ b/loolwsd/Util.hpp
@@ -50,7 +50,8 @@ namespace Util
{
namespace rng
{
- unsigned getNext();
+ void reseed();
+ unsigned getNext();
}
/// Encode an integral ID into a string, with padding support.
More information about the Libreoffice-commits
mailing list