Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Segmentation Fault on macOS 10.13.2 at start when enumerating hardware wallets #7542

Closed
tsutsu opened this issue Jan 12, 2018 · 3 comments · Fixed by #9108
Closed

Segmentation Fault on macOS 10.13.2 at start when enumerating hardware wallets #7542

tsutsu opened this issue Jan 12, 2018 · 3 comments · Fixed by #9108
Assignees
Labels
F2-bug 🐞 The client fails to follow expected behavior. M4-core ⛓ Core client code / Rust. P5-sometimesoon 🌲 Issue is worth doing soon.
Milestone

Comments

@tsutsu
Copy link

tsutsu commented Jan 12, 2018

macOS version is 10.13.2 with Supplemental Update (17C205), running on Hackintosh hardware.

Tested on source-build Parity/v1.10.0-unstable-f044b61f4-20180111/x86_64-macos/rustc1.23.0.

Behavior replicates as well with nightly macOS release, and all variant releases from homebrew-paritytech.

Crash occurs before synchronization can begin.

Crash occurs regardless of network selected. (Tested all possible.)

Crash occurs repeatably every time parity is started.

Crash looks like this:

$ ./target/debug/parity
Loading config file from /Users/tsutsu/Library/Application Support/io.parity.ethereum/config.toml
2018-01-11 16:19:25  Starting Parity/v1.10.0-unstable-f044b61f4-20180111/x86_64-macos/rustc1.23.0
2018-01-11 16:19:25  Keys path /Volumes/Media/Blockchains/eth-ropsten/keys/Ropsten
2018-01-11 16:19:25  DB path /Volumes/Media/Blockchains/eth-ropsten/chains/test/db/ae90623718e47d66
2018-01-11 16:19:25  Path to dapps /Volumes/Media/Blockchains/eth-ropsten/dapps
2018-01-11 16:19:25  State DB configuration: fast
2018-01-11 16:19:25  Operating mode: passive
Segmentation fault: 11

rust-lldb reveals the following backtrace:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x00007fff29d6a328 CoreFoundation`CFSetGetCount + 24
    frame #1: 0x0000000103993865 parity`hid_enumerate(vendor_id=0, product_id=0) at hid.c:412
    frame #2: 0x000000010398aa8d parity`hidapi::{{impl}}::get_hid_device_info_vector at lib.rs:107
    frame #3: 0x000000010398a9b5 parity`hidapi::{{impl}}::new at lib.rs:91
    frame #4: 0x00000001037ab0c7 parity`hardware_wallet::{{impl}}::new at lib.rs:175
    frame #5: 0x0000000102533b8f parity`ethcore::account_provider::{{impl}}::new(sstore=Box<SecretStore> {

This looks like a problem in parity's fork of the hidapi-rs crate. Issues are closed there, so I'm opening one here instead.

As this issue hasn't been reported by any other macOS user, I'm guessing that this is caused by something weird and Hackintosh-related sitting in my device tree. Still a problem that might be encountered mysteriously by anyone else with such a configuration, though, so it'd be nice to get it fixed.

This PR in hidapi looks related to this problem.

Workarounds

Passing --no-hardware-wallets or setting disable_hardware = true in config.toml skips the broken part of the code, and parity starts successfully.

However, a segmentation fault still occurs on SIGINT:

^C2018-01-11 16:52:34  Finishing work, please wait...
Segmentation fault: 11

Potential solutions

  • urge @signal11 to merge the above PR, and then update the hidapi submodule reference in your hidapi-rs fork.
  • more drastically, fork hidapi itself, merge the PR above into your fork, and then update the hidapi submodule in your fork of hidapi-rs with your newly-forked hidapi.
  • come up with some check equivalent to the one in the PR that could be done in hidapi-rs itself, and add it to your fork.
@debris debris added the F2-bug 🐞 The client fails to follow expected behavior. label Jan 15, 2018
@debris
Copy link
Collaborator

debris commented Jan 16, 2018

Thanks @tsutsu for the detailed report! The PR in hidapi repo should solve the issue. Let's wait a couple of days and if it is not merged, let's fork hidapi

@5chdn 5chdn added P5-sometimesoon 🌲 Issue is worth doing soon. M4-core ⛓ Core client code / Rust. labels Jan 16, 2018
@5chdn 5chdn added this to the 1.9 milestone Jan 16, 2018
@5chdn 5chdn modified the milestones: 1.9, 1.10 Jan 23, 2018
@5chdn 5chdn modified the milestones: 1.10, 1.11 Mar 1, 2018
@niklasad1
Copy link
Collaborator

@tsutsu @debris
Is this solved?

@debris
Copy link
Collaborator

debris commented Mar 24, 2018

afaik no. this bug originates from hidapi and pr which fixes it is still pending -> signal11/hidapi#359

@5chdn 5chdn modified the milestones: 1.11, 1.12 Apr 24, 2018
@debris debris self-assigned this Jul 10, 2018
debris added a commit that referenced this issue Jul 12, 2018
@debris debris mentioned this issue Jul 12, 2018
5chdn pushed a commit that referenced this issue Jul 13, 2018
5chdn pushed a commit that referenced this issue Jul 13, 2018
5chdn pushed a commit that referenced this issue Jul 13, 2018
5chdn added a commit that referenced this issue Jul 17, 2018
* parity-version: stabelize 1.11

* parity-version: bump stable to 1.11.7

* Don't fetch snapshot chunks at random (#9088)

* Offload cull to IoWorker.

* Limit the number of transactions in pending set (#8777)

* Unordered iterator.

* Use unordered and limited set if full not required.

* Split timeout work into smaller timers.

* Avoid collecting all pending transactions when mining

* Remove println.

* Use priority ordering in eth-filter.

* Fix ethcore-miner tests and tx propagation.

* Review grumbles addressed.

* Add test for unordered not populating the cache.

* Fix ethcore tests.

* Fix light tests.

* Fix ethcore-sync tests.

* Fix RPC tests.

* Make sure to produce full blocks.

* Update hidapi, fixes #7542 (#9108)

* docker: add cmake dependency (#9111)

* Fix miner tests.

* Revert "Make sure to produce full blocks."

This reverts commit b12d592.

* Update light client hardcoded headers (#9098)

* Insert Kovan hardcoded headers until #7690241

* Insert Kovan hardcoded headers until block 7690241

* Insert Ropsten hardcoded headers until #3612673

* Insert Mainnet hardcoded headers until block 5941249

* Make sure to produce full blocks. (#9115)

* Insert ETC (classic) hardcoded headers until block #6170625 (#9121)

* fix verification in ethcore-sync collect_blocks (#9135)

* `evm bench` fix broken dependencies (#9134)

* `evm bench` use valid dependencies

Benchmarks of the `evm` used stale versions of a couple a crates that
this commit fixes!

* fix warnings
5chdn added a commit that referenced this issue Jul 17, 2018
* parity-version: betalize 2.0

* Multiple improvements to discovery ping handling (#8771)

* discovery: Only add nodes to routing table after receiving pong.

Previously the discovery algorithm would add nodes to the routing table
before confirming that the endpoint is participating in the protocol. This
now tracks in-flight pings and adds to the routing table only after receiving
a response.

* discovery: Refactor packet creation into its own function.

This function is useful inside unit tests.

* discovery: Additional testing for new add_node behavior.

* discovery: Track expiration of pings to non-yet-in-bucket nodes.

Now that we may ping nodes before adding to a k-bucket, the timeout tracking
must be separate from BucketEntry.

* discovery: Verify echo hash on pong packets.

Stores packet hash with in-flight requests and matches with pong response.

* discovery: Track timeouts on FIND_NODE requests.

* discovery: Retry failed pings with exponential backoff.

UDP packets may get dropped, so instead of immediately booting nodes that fail
to respond to a ping, retry 4 times with exponential backoff.

* !fixup Use slice instead of Vec for request_backoff.

* Add separate database directory for light client (#8927) (#9064)

* Add seperate default DB path for light client (#8927)

* Improve readability

* Revert "Replace `std::env::home_dir` with `dirs::home_dir` (#9077)" (#9097)

* Revert "Replace `std::env::home_dir` with `dirs::home_dir` (#9077)"

This reverts commit 7e77932.

* Restore some of the changes

* Update parity-common

* Offload cull to IoWorker. (#9099)

* Fix work-notify. (#9104)

* Update hidapi, fixes #7542 (#9108)

* docker: add cmake dependency (#9111)

* Update light client hardcoded headers (#9098)

* Insert Kovan hardcoded headers until #7690241

* Insert Kovan hardcoded headers until block 7690241

* Insert Ropsten hardcoded headers until #3612673

* Insert Mainnet hardcoded headers until block 5941249

* Make sure to produce full blocks. (#9115)

* Insert ETC (classic) hardcoded headers until block #6170625 (#9121)

* fix verification in ethcore-sync collect_blocks (#9135)

* Completely remove all dapps struct from rpc (#9107)

* Completely remove all dapps struct from rpc

* Remove unused pub use

* `evm bench` fix broken dependencies (#9134)

* `evm bench` use valid dependencies

Benchmarks of the `evm` used stale versions of a couple a crates that
this commit fixes!

* fix warnings

* Update snapcraft.yaml (#9132)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
F2-bug 🐞 The client fails to follow expected behavior. M4-core ⛓ Core client code / Rust. P5-sometimesoon 🌲 Issue is worth doing soon.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants