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

[Bug]: Signing using ledger with non-zero index segfaults #8079

Open
joe-bowman opened this issue Apr 17, 2024 · 0 comments
Open

[Bug]: Signing using ledger with non-zero index segfaults #8079

joe-bowman opened this issue Apr 17, 2024 · 0 comments

Comments

@joe-bowman
Copy link

joe-bowman commented Apr 17, 2024

What happened?

Running osmosisd keys add --ledger --index N where N is non-zero sporadically fails, but after a few attempts, succeeds.

However, attempting to sign a transaction with said ledger, consistently segfaults with the following trace:

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x2 addr=0x7c2c9effe072 pc=0x7c2ce04909ff]

runtime stack:
runtime.throw({0x3d313b0?, 0x7c2c94001870?})
	runtime/panic.go:1047 +0x5d fp=0x7c2c9effc268 sp=0x7c2c9effc238 pc=0x48951d
runtime.sigpanic()
	runtime/signal_unix.go:825 +0x3e9 fp=0x7c2c9effc2c8 sp=0x7c2c9effc268 pc=0x4a0a69

goroutine 1 [syscall]:
runtime.cgocall(0x2a697e0, 0xc00250d578)
	runtime/cgocall.go:157 +0x5c fp=0xc00250d550 sp=0xc00250d518 pc=0x4544dc
github.com/zondax/hid._Cfunc_hid_enumerate(0x2c97, 0x0)
	_cgo_gotypes.go:348 +0x4d fp=0xc00250d578 sp=0xc00250d550 pc=0xed2ecd
github.com/zondax/hid.Enumerate(0x6098?, 0x4b0?)
	github.com/zondax/hid@v0.9.1/hid_enabled.go:78 +0xd2 fp=0xc00250d698 sp=0xc00250d578 pc=0xed3452
github.com/zondax/ledger-go.(*LedgerAdminHID).Connect(0xc001ff2630?, 0x0)
	github.com/zondax/ledger-go@v0.14.1/ledger_hid.go:114 +0x3d fp=0xc00250d800 sp=0xc00250d698 pc=0xed61fd
github.com/cosmos/ledger-cosmos-go.FindLedgerCosmosUserApp()
	github.com/cosmos/ledger-cosmos-go@v0.12.2/user_app.go:45 +0x56 fp=0xc00250d898 sp=0xc00250d800 pc=0xed7b96
github.com/cosmos/cosmos-sdk/crypto/ledger.init.1.func1()
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_real.go:15 +0x17 fp=0xc00250d8a8 sp=0xc00250d898 pc=0xedbd37
github.com/cosmos/cosmos-sdk/crypto/ledger.getDevice()
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_secp256k1.go:245 +0x2a fp=0xc00250d8f0 sp=0xc00250d8a8 pc=0xedb2aa
github.com/cosmos/cosmos-sdk/crypto/ledger.NewPrivKeySecp256k1Unsafe({0x2c, 0x76, 0x0, 0x0, 0x1})
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_secp256k1.go:96 +0x6f fp=0xc00250d9a8 sp=0xc00250d8f0 pc=0xed9b2f
github.com/cosmos/cosmos-sdk/crypto/keyring.SignWithLedger(0x4ad53c0?, {0xc001c7a3c0, 0x1c1, 0x1e0})
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/keyring/keyring.go:635 +0xa5 fp=0xc00250da38 sp=0xc00250d9a8 pc=0xee0365
github.com/cosmos/cosmos-sdk/crypto/keyring.keystore.Sign({{0x4ad53c0, 0xc001ff2630}, {0x4afa6e0, 0xc001ccd6f0}, {0xc001fea5fa, 0x2}, {{0xc001ff6a10, 0x1, 0x1}, {0xc001ff6a20, ...}, ...}}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/keyring/keyring.go:406 +0x3a8 fp=0xc00250db20 sp=0xc00250da38 pc=0xede808
github.com/cosmos/cosmos-sdk/crypto/keyring.(*keystore).Sign(0xc00056c840?, {0xc0004bedb0?, 0xc001fea5f0?}, {0xc001c7a3c0?, 0x24f20c?, 0x0?})
	<autogenerated>:1 +0xd6 fp=0xc00250dc68 sp=0xc00250db20 pc=0xeecbd6
github.com/cosmos/cosmos-sdk/client/tx.Sign({{0x4b01cb0, 0xc00170f9e0}, {0x4ae82e0, 0xc001b95f80}, {0x4ad3a20, 0x69e5848}, 0x24f20c, 0x0, 0x1749a, 0x0, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/client/tx/tx.go:314 +0x64b fp=0xc00250e0d0 sp=0xc00250dc68 pc=0x17dbe0b
github.com/cosmos/cosmos-sdk/client/tx.BroadcastTx({{0xc0004b8180, 0x14, 0x18}, {0x4aef800, 0xc002063710}, 0x0, {0xc001fea5f0, 0x9}, {0x4afa6e0, 0xc001ccd6f0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/client/tx/tx.go:116 +0x669 fp=0xc00250ebb0 sp=0xc00250e0d0 pc=0x17daca9
github.com/cosmos/cosmos-sdk/client/tx.GenerateOrBroadcastTxWithFactory({{0xc0004b8180, 0x14, 0x18}, {0x4aef800, 0xc002063710}, 0x0, {0xc001fea5f0, 0x9}, {0x4afa6e0, 0xc001ccd6f0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/client/tx/tx.go:62 +0x17e fp=0xc00250ef30 sp=0xc00250ebb0 pc=0x17da3fe
github.com/cosmos/cosmos-sdk/client/tx.GenerateOrBroadcastTxCLI({{0xc0004b8180, 0x14, 0x18}, {0x4aef800, 0xc002063710}, 0x0, {0xc001fea5f0, 0x9}, {0x4afa6e0, 0xc001ccd6f0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/client/tx/tx.go:32 +0x153 fp=0xc00250f438 sp=0xc00250ef30 pc=0x17da213
github.com/cosmos/cosmos-sdk/x/authz/client/cli.NewCmdGrantAuthorization.func1(0xc001c11800, {0xc001a8f600, 0x2, 0xb?})
	github.com/cosmos/cosmos-sdk@v0.47.5/x/authz/client/cli/tx.go:191 +0x9cb fp=0xc00250fc48 sp=0xc00250f438 pc=0x266ee0b
github.com/spf13/cobra.(*Command).execute(0xc001c11800, {0xc001a8f550, 0xb, 0xb})
	github.com/spf13/cobra@v1.8.0/command.go:983 +0xaaa fp=0xc00250fde8 sp=0xc00250fc48 pc=0x82298a
github.com/spf13/cobra.(*Command).ExecuteC(0xc0017a3b00)
	github.com/spf13/cobra@v1.8.0/command.go:1115 +0x425 fp=0xc00250fec0 sp=0xc00250fde8 pc=0x8232a5
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.8.0/command.go:1039
github.com/spf13/cobra.(*Command).ExecuteContext(...)
	github.com/spf13/cobra@v1.8.0/command.go:1032
github.com/cosmos/cosmos-sdk/server/cmd.Execute(0x2a5ef40?, {0x3cb15e6, 0x8}, {0xc001b3d320, 0x13})
	github.com/cosmos/cosmos-sdk@v0.47.5/server/cmd/execute.go:32 +0x179 fp=0xc00250ff48 sp=0xc00250fec0 pc=0x1438119
main.main()
	github.com/osmosis-labs/osmosis/v21/cmd/osmosisd/main.go:16 +0x3d fp=0xc00250ff80 sp=0xc00250ff48 pc=0x2a5c73d
runtime.main()
	runtime/proc.go:250 +0x207 fp=0xc00250ffe0 sp=0xc00250ff80 pc=0x48bf07
runtime.goexit()
	runtime/asm_amd64.s:1598 +0x1 fp=0xc00250ffe8 sp=0xc00250ffe0 pc=0x4c0b81

I am 99+% certain this issue is upstream in the cosmos-ledger or zondax repos, but filing here as this is the starting point.

Osmosis Version

v21.1.4 and v24.0.1

How to reproduce?

osmosisd keys add --ledger test1234 --index 3

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x2 addr=0x798ef57fb072 pc=0x798ef44909ff]

runtime stack:
runtime.throw({0x3d313b0?, 0x798edc001990?})
	runtime/panic.go:1047 +0x5d fp=0x798ef57f9268 sp=0x798ef57f9238 pc=0x48951d
runtime.sigpanic()
	runtime/signal_unix.go:825 +0x3e9 fp=0x798ef57f92c8 sp=0x798ef57f9268 pc=0x4a0a69

goroutine 1 [syscall]:
runtime.cgocall(0x2a697e0, 0xc001d1eda8)
	runtime/cgocall.go:157 +0x5c fp=0xc001d1ed80 sp=0xc001d1ed48 pc=0x4544dc
github.com/zondax/hid._Cfunc_hid_enumerate(0x2c97, 0x0)
	_cgo_gotypes.go:348 +0x4d fp=0xc001d1eda8 sp=0xc001d1ed80 pc=0xed2ecd
github.com/zondax/hid.Enumerate(0x7ca4?, 0x3cb?)
	github.com/zondax/hid@v0.9.1/hid_enabled.go:78 +0xd2 fp=0xc001d1eec8 sp=0xc001d1eda8 pc=0xed3452
github.com/zondax/ledger-go.(*LedgerAdminHID).Connect(0xc001d1f088?, 0x0)
	github.com/zondax/ledger-go@v0.14.1/ledger_hid.go:114 +0x3d fp=0xc001d1f030 sp=0xc001d1eec8 pc=0xed61fd
github.com/cosmos/ledger-cosmos-go.FindLedgerCosmosUserApp()
	github.com/cosmos/ledger-cosmos-go@v0.12.2/user_app.go:45 +0x56 fp=0xc001d1f0c8 sp=0xc001d1f030 pc=0xed7b96
github.com/cosmos/cosmos-sdk/crypto/ledger.init.1.func1()
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_real.go:15 +0x17 fp=0xc001d1f0d8 sp=0xc001d1f0c8 pc=0xedbd37
github.com/cosmos/cosmos-sdk/crypto/ledger.getDevice()
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_secp256k1.go:245 +0x2a fp=0xc001d1f120 sp=0xc001d1f0d8 pc=0xedb2aa
github.com/cosmos/cosmos-sdk/crypto/ledger.NewPrivKeySecp256k1({0x2c, 0x76, 0x0, 0x0, 0x3}, {0x3cab465, 0x4})
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/ledger/ledger_secp256k1.go:113 +0x85 fp=0xc001d1f218 sp=0xc001d1f120 pc=0xed9e25
github.com/cosmos/cosmos-sdk/crypto/keyring.keystore.SaveLedgerKey({{0x4ad53c0, 0xc001cee750}, {0x4afa6e0, 0xc001e10620}, {0xc001cf037a, 0x2}, {{0xc001cf2b30, 0x1, 0x1}, {0xc001cf2b40, ...}, ...}}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/crypto/keyring/keyring.go:438 +0x145 fp=0xc001d1f328 sp=0xc001d1f218 pc=0xedeb65
github.com/cosmos/cosmos-sdk/crypto/keyring.(*keystore).SaveLedgerKey(0xc0014338f0?, {0x7ffd4ad6781f?, 0xc?}, {0x4aced20?, 0x69e5848?}, {0x3cab465?, 0xc001e10620?}, 0x4adf700?, 0x0?, 0x3)
	<autogenerated>:1 +0xe7 fp=0xc001d1f488 sp=0xc001d1f328 pc=0xeec6a7
github.com/cosmos/cosmos-sdk/client/keys.runAddCmd({{0x0, 0x0, 0x0}, {0x4aef800, 0xc001ceee10}, 0x0, {0xc001cf0370, 0x9}, {0x4afa6e0, 0xc001e10620}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.5/client/keys/add.go:221 +0x608 fp=0xc001d1f638 sp=0xc001d1f488 pc=0x29c3f48
github.com/cosmos/cosmos-sdk/client/keys.runAddCmdPrepare(0xc001f67b00?, {0xc001f3ab40, 0x1, 0x4})
	github.com/cosmos/cosmos-sdk@v0.47.5/client/keys/add.go:102 +0x265 fp=0xc001d1fc48 sp=0xc001d1f638 pc=0x29c38e5
github.com/spf13/cobra.(*Command).execute(0xc001f67b00, {0xc001f3ab00, 0x4, 0x4})
	github.com/spf13/cobra@v1.8.0/command.go:983 +0xaaa fp=0xc001d1fde8 sp=0xc001d1fc48 pc=0x82298a
github.com/spf13/cobra.(*Command).ExecuteC(0xc00189fb00)
	github.com/spf13/cobra@v1.8.0/command.go:1115 +0x425 fp=0xc001d1fec0 sp=0xc001d1fde8 pc=0x8232a5
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.8.0/command.go:1039
github.com/spf13/cobra.(*Command).ExecuteContext(...)
	github.com/spf13/cobra@v1.8.0/command.go:1032
github.com/cosmos/cosmos-sdk/server/cmd.Execute(0x2a5ef40?, {0x3cb15e6, 0x8}, {0xc001bc4000, 0x13})
	github.com/cosmos/cosmos-sdk@v0.47.5/server/cmd/execute.go:32 +0x179 fp=0xc001d1ff48 sp=0xc001d1fec0 pc=0x1438119
main.main()
	github.com/osmosis-labs/osmosis/v21/cmd/osmosisd/main.go:16 +0x3d fp=0xc001d1ff80 sp=0xc001d1ff48 pc=0x2a5c73d
runtime.main()
	runtime/proc.go:250 +0x207 fp=0xc001d1ffe0 sp=0xc001d1ff80 pc=0x48bf07
runtime.goexit()
	runtime/asm_amd64.s:1598 +0x1 fp=0xc001d1ffe8 sp=0xc001d1ffe0 pc=0x4c0b81

(eventually, retrying the above will succeed)

./osmosisd-24.0.1-linux-amd64 tx authz grant REDACTED_ADDRESS generic --msg-type=/osmosis.concentratedliquidity.v1beta1.MsgCreatePosition --from=test1234 --gas=auto --gas-prices 0.025uosmo --gas-adjustment 1.3 --output=json --node=https://rpc.osmosis.zone:443

Default sign-mode 'direct' not supported by Ledger, using sign-mode 'amino-json'.

gas estimate: 83003
REDACTED_MSG
confirm transaction before signing and broadcasting [y/N]: y
SIGSEGV: segmentation violation
PC=0x75f4804909ff m=18 sigcode=2
signal arrived during cgo execution

goroutine 1 [syscall]:
runtime.cgocall(0x26d4d90, 0xc001935538)
	runtime/cgocall.go:157 +0x4b fp=0xc001935510 sp=0xc0019354d8 pc=0x4579cb
github.com/zondax/hid._Cfunc_hid_enumerate(0x2c97, 0x0)
	_cgo_gotypes.go:348 +0x4c fp=0xc001935538 sp=0xc001935510 pc=0xe6758c
github.com/zondax/hid.Enumerate(0xae88?, 0x477?)
	github.com/zondax/hid@v0.9.2/hid_enabled.go:78 +0xc6 fp=0xc001935670 sp=0xc001935538 pc=0xe67aa6
github.com/zondax/ledger-go.(*LedgerAdminHID).Connect(0xc001768690?, 0x0)
	github.com/zondax/ledger-go@v0.14.3/ledger_hid.go:114 +0x31 fp=0xc0019357d8 sp=0xc001935670 pc=0xe6a3f1
github.com/cosmos/ledger-cosmos-go.FindLedgerCosmosUserApp()
	github.com/cosmos/ledger-cosmos-go@v0.12.4/user_app.go:45 +0x45 fp=0xc001935870 sp=0xc0019357d8 pc=0xe6bbe5
github.com/cosmos/cosmos-sdk/crypto/ledger.init.1.func1()
	github.com/cosmos/cosmos-sdk@v0.47.8/crypto/ledger/ledger_real.go:15 +0xf fp=0xc001935880 sp=0xc001935870 pc=0xe6fa0f
github.com/cosmos/cosmos-sdk/crypto/ledger.getDevice()
	github.com/cosmos/cosmos-sdk@v0.47.8/crypto/ledger/ledger_secp256k1.go:245 +0x23 fp=0xc0019358c8 sp=0xc001935880 pc=0xe6f023
github.com/cosmos/cosmos-sdk/crypto/ledger.NewPrivKeySecp256k1Unsafe({0x2c, 0x76, 0x0, 0x0, 0x1})
	github.com/cosmos/cosmos-sdk@v0.47.8/crypto/ledger/ledger_secp256k1.go:96 +0x5e fp=0xc001935980 sp=0xc0019358c8 pc=0xe6d9be
github.com/cosmos/cosmos-sdk/crypto/keyring.SignWithLedger(0x47523a0?, {0xc001d30000, 0x1c1, 0x1e0})
	github.com/cosmos/cosmos-sdk@v0.47.8/crypto/keyring/keyring.go:635 +0x9c fp=0xc001935a10 sp=0xc001935980 pc=0xe7425c
github.com/cosmos/cosmos-sdk/crypto/keyring.keystore.Sign({{0x47523a0, 0xc001768690}, {0x47704a8, 0xc00106bee0}, {0xc000dca37a, 0x2}, {{0xc000ed48b0, 0x1, 0x1}, {0xc000ed48c0, ...}, ...}}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.8/crypto/keyring/keyring.go:406 +0x38d fp=0xc001935af8 sp=0xc001935a10 pc=0xe728ed
github.com/cosmos/cosmos-sdk/crypto/keyring.(*keystore).Sign(0xc000dbb0b0?, {0xc000dcb940?, 0xc000dca370?}, {0xc001d30000?, 0x24f20c?, 0x1?})
	<autogenerated>:1 +0xca fp=0xc001935c40 sp=0xc001935af8 pc=0xe7fb4a
github.com/cosmos/cosmos-sdk/client/tx.Sign({{0x4777610, 0xc000e105a0}, {0x4760c40, 0xc0015b4e40}, {0x474af20, 0x65b5680}, 0x24f20c, 0x1, 0x1443b, 0x0, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.8/client/tx/tx.go:314 +0x634 fp=0xc0019360b0 sp=0xc001935c40 pc=0x17174b4
github.com/cosmos/cosmos-sdk/client/tx.BroadcastTx({{0xc000fb4300, 0x14, 0x18}, {0x4765c80, 0xc00182c600}, 0x0, {0xc000dca370, 0x9}, {0x47704a8, 0xc00106bee0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.8/client/tx/tx.go:116 +0x649 fp=0xc001936b90 sp=0xc0019360b0 pc=0x1716409
github.com/cosmos/cosmos-sdk/client/tx.GenerateOrBroadcastTxWithFactory({{0xc000fb4300, 0x14, 0x18}, {0x4765c80, 0xc00182c600}, 0x0, {0xc000dca370, 0x9}, {0x47704a8, 0xc00106bee0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.8/client/tx/tx.go:62 +0x15b fp=0xc001936f10 sp=0xc001936b90 pc=0x1715bbb
github.com/cosmos/cosmos-sdk/client/tx.GenerateOrBroadcastTxCLI({{0xc000fb4300, 0x14, 0x18}, {0x4765c80, 0xc00182c600}, 0x0, {0xc000dca370, 0x9}, {0x47704a8, 0xc00106bee0}, ...}, ...)
	github.com/cosmos/cosmos-sdk@v0.47.8/client/tx/tx.go:32 +0x133 fp=0xc001937418 sp=0xc001936f10 pc=0x17159f3
github.com/cosmos/cosmos-sdk/x/authz/client/cli.NewCmdGrantAuthorization.func1(0xc00136e900, {0xc001974540, 0x2, 0xc?})
	github.com/cosmos/cosmos-sdk@v0.47.8/x/authz/client/cli/tx.go:191 +0x9eb fp=0xc001937c30 sp=0xc001937418 pc=0x256c74b
github.com/spf13/cobra.(*Command).execute(0xc00136e900, {0xc001974480, 0xc, 0xc})
	github.com/spf13/cobra@v1.8.0/command.go:983 +0xabc fp=0xc001937dd0 sp=0xc001937c30 pc=0x7f43fc
github.com/spf13/cobra.(*Command).ExecuteC(0xc00196d500)
	github.com/spf13/cobra@v1.8.0/command.go:1115 +0x3ff fp=0xc001937ea8 sp=0xc001937dd0 pc=0x7f4cbf
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.8.0/command.go:1039
github.com/spf13/cobra.(*Command).ExecuteContext(...)
	github.com/spf13/cobra@v1.8.0/command.go:1032
github.com/cosmos/cosmos-sdk/server/cmd.Execute(0x26ca4a0?, {0x38ba602, 0x8}, {0xc0014f13b0, 0x13})
	github.com/cosmos/cosmos-sdk@v0.47.8/server/cmd/execute.go:32 +0x11b fp=0xc001937f08 sp=0xc001937ea8 pc=0x1424e9b
main.main()
	github.com/osmosis-labs/osmosis/v24/cmd/osmosisd/main.go:16 +0x37 fp=0xc001937f40 sp=0xc001937f08 pc=0x26c7c37
runtime.main()
	runtime/proc.go:267 +0x2bb fp=0xc001937fe0 sp=0xc001937f40 pc=0x48e51b
runtime.goexit()
	runtime/asm_amd64.s:1650 +0x1 fp=0xc001937fe8 sp=0xc001937fe0 pc=0x4c2121

Sometimes this will just fail with Error - which is equally frustrating!

P.S. I have just managed to make this succeed on about the 30th attempt!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Needs Triage 🔍
Development

No branches or pull requests

1 participant