Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Protect CKeyHolderStorage via mutex #1834

Merged
merged 1 commit into from
Jan 9, 2018
Merged

Conversation

UdjinM6
Copy link

@UdjinM6 UdjinM6 commented Jan 5, 2018

Sometimes dsc arrives at the same time we decide that session is timed out. This leads to a situation when keyHolderStorage is accessed from two threads which in its turn leads to a crash. Protecting internal vector via mutex should solve this.

@UdjinM6 UdjinM6 modified the milestones: 12.3, 12.2.3 Jan 5, 2018
@UdjinM6 UdjinM6 mentioned this pull request Jan 5, 2018
9 tasks
Copy link

@schinzelh schinzelh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK

@gladcow
Copy link

gladcow commented Jan 8, 2018

utACK

1 similar comment
@OlegGirko
Copy link

utACK

@UdjinM6 UdjinM6 merged commit c532be1 into dashpay:develop Jan 9, 2018
UdjinM6 added a commit to UdjinM6/dash that referenced this pull request Jan 9, 2018
@@ -27,12 +27,14 @@ CScript CKeyHolder::GetScriptForDestination() const

const CKeyHolder& CKeyHolderStorage::AddKey(CWallet* pwallet)
{
LOCK(cs_storage);
storage.emplace_back(std::unique_ptr<CKeyHolder>(new CKeyHolder(pwallet)));
LogPrintf("CKeyHolderStorage::%s -- storage size %lld\n", __func__, storage.size());
return *storage.back();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This leaks a reference to an unlocked entry in storage. The reference seems to be only used to call GetScriptForDestination() on it. Maybe it's better to change this method to return a copy of the pubKey instead?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed. pubKey is a private member however and since we never actually need anything else but corresponding CScript anyway I guess changing this to return storage.back().GetScriptForDestination(); should do the job.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good 👍

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pls see #1840

NarubyRiverlione added a commit to NarubyRiverlione/spice that referenced this pull request Feb 4, 2018
* 'spice' of github.com:NarubyRiverlione/spice: (8382 commits)
  updated testnet genessis
  spice images
  more rename
  genesis blocks ports magic message letters start letter addresses
  cleanup : * remove gitian signatures * remove seeds
  rename: more originale files
  rename
  Prepare 0.12.2.3 release notes (dashpay#1846)
  Avoid reference leakage in CKeyHolderStorage::AddKey (dashpay#1840)
  Protect CKeyHolderStorage via mutex (dashpay#1834)
  Skip existing masternode conections on mixing (dashpay#1833)
  Merge pull request dashpay#1836 from lodgepole/feature/backport-11847
  Fix -liquidityprovider option (dashpay#1829)
  Vote on IS only if it was accepted to mempool (dashpay#1826)
  bump version to 0.12.2.3 (dashpay#1827)
  Merge bitcoin#8256: BUG: bitcoin-qt crash
  Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (dashpay#1819)
  Fix crash on exit when -createwalletbackups=0 (dashpay#1810)
  Prepare v0.12.2.2 release notes (dashpay#1769)
  Force rcc to use resource format version 1. (dashpay#1784)
  ...

# Conflicts:
#	contrib/gitian-descriptors/gitian-osx-signer.yml
#	contrib/gitian-descriptors/gitian-win-signer.yml
#	src/chainparams.cpp
#	src/qt/res/icons/bitcoin.icns
#	src/qt/res/icons/bitcoin.ico
#	src/qt/res/icons/bitcoin.png
#	src/qt/res/icons/crownium/about.png
#	src/qt/res/icons/drkblue/about.png
#	src/qt/res/icons/drkblue/bitcoin.png
#	src/qt/res/icons/light/about.png
#	src/qt/res/icons/light/remove.png
#	src/qt/res/icons/remove.png
#	src/qt/res/icons/trad/about.png
#	src/qt/res/icons/trad/remove.png
andvgal pushed a commit to energicryptocurrency/gen2-energi that referenced this pull request Dec 26, 2018
@UdjinM6 UdjinM6 deleted the protectstorage branch November 26, 2020 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants