Browse Source

fixed race condition in ECIESx25519 tags table

pull/2007/head
orignal 10 months ago
parent
commit
2ad26dd4c9
  1. 20
      libi2pd/RouterContext.cpp
  2. 1
      libi2pd/RouterContext.h
  3. 2
      libi2pd/Tunnel.cpp

20
libi2pd/RouterContext.cpp

@ -1200,6 +1200,26 @@ namespace i2p @@ -1200,6 +1200,26 @@ namespace i2p
i2p::garlic::GarlicDestination::ProcessDeliveryStatusMessage (msg);
}
void RouterContext::SubmitECIESx25519Key (const uint8_t * key, uint64_t tag)
{
if (m_Service)
{
struct
{
uint8_t k[32];
uint64_t t;
} data;
memcpy (data.k, key, 32);
data.t = tag;
m_Service->GetService ().post ([this,data](void)
{
AddECIESx25519Key (data.k, data.t);
});
}
else
LogPrint (eLogError, "Router: service is NULL");
}
void RouterContext::CleanupDestination ()
{
if (m_Service)

1
libi2pd/RouterContext.h

@ -136,6 +136,7 @@ namespace garlic @@ -136,6 +136,7 @@ namespace garlic
void SetNetID (int netID) { m_NetID = netID; };
bool DecryptTunnelBuildRecord (const uint8_t * encrypted, uint8_t * data);
bool DecryptTunnelShortRequestRecord (const uint8_t * encrypted, uint8_t * data);
void SubmitECIESx25519Key (const uint8_t * key, uint64_t tag);
void UpdatePort (int port); // called from Daemon
void UpdateAddress (const boost::asio::ip::address& host); // called from SSU2 or Daemon

2
libi2pd/Tunnel.cpp

@ -116,7 +116,7 @@ namespace tunnel @@ -116,7 +116,7 @@ namespace tunnel
if (m_Pool && m_Pool->GetLocalDestination ())
m_Pool->GetLocalDestination ()->SubmitECIESx25519Key (key, tag);
else
i2p::context.AddECIESx25519Key (key, tag);
i2p::context.SubmitECIESx25519Key (key, tag);
}
i2p::transport::transports.SendMessage (GetNextIdentHash (), msg);
}

Loading…
Cancel
Save