mirror of
https://github.com/lightningnetwork/lnd.git
synced 2024-11-19 09:53:54 +01:00
channeldb: fix commit key state corruption bug
This commit fixes a bug caused by overriding the prefix key for storing commitment keys with the first few bytes of a channel’s channel point. Once a channel was deleted, then all future channels would result in a panic due to a nil pointer deference since the prefix key was mutated, causing all future stores/gets to fail.
This commit is contained in:
parent
4548e4497d
commit
48491a7fee
@ -171,6 +171,7 @@ type OpenChannel struct {
|
|||||||
// order to encrypt sensitive information.
|
// order to encrypt sensitive information.
|
||||||
func (c *OpenChannel) FullSync() error {
|
func (c *OpenChannel) FullSync() error {
|
||||||
return c.Db.store.Update(func(tx *bolt.Tx) error {
|
return c.Db.store.Update(func(tx *bolt.Tx) error {
|
||||||
|
// TODO(roasbeef): add helper funcs to create scoped update
|
||||||
// First fetch the top level bucket which stores all data related to
|
// First fetch the top level bucket which stores all data related to
|
||||||
// current, active channels.
|
// current, active channels.
|
||||||
chanBucket, err := tx.CreateBucketIfNotExists(openChannelBucket)
|
chanBucket, err := tx.CreateBucketIfNotExists(openChannelBucket)
|
||||||
@ -773,7 +774,7 @@ func putChanCommitKeys(nodeChanBucket *bolt.Bucket, channel *OpenChannel,
|
|||||||
}
|
}
|
||||||
commitKey := make([]byte, len(commitKeys)+bc.Len())
|
commitKey := make([]byte, len(commitKeys)+bc.Len())
|
||||||
copy(commitKey[:3], commitKeys)
|
copy(commitKey[:3], commitKeys)
|
||||||
copy(commitKeys[3:], bc.Bytes())
|
copy(commitKey[3:], bc.Bytes())
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
|
||||||
@ -796,7 +797,7 @@ func putChanCommitKeys(nodeChanBucket *bolt.Bucket, channel *OpenChannel,
|
|||||||
func deleteChanCommitKeys(nodeChanBucket *bolt.Bucket, chanID []byte) error {
|
func deleteChanCommitKeys(nodeChanBucket *bolt.Bucket, chanID []byte) error {
|
||||||
commitKey := make([]byte, len(commitKeys)+len(chanID))
|
commitKey := make([]byte, len(commitKeys)+len(chanID))
|
||||||
copy(commitKey[:3], commitKeys)
|
copy(commitKey[:3], commitKeys)
|
||||||
copy(commitKeys[3:], chanID)
|
copy(commitKey[3:], chanID)
|
||||||
return nodeChanBucket.Delete(commitKey)
|
return nodeChanBucket.Delete(commitKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -811,7 +812,7 @@ func fetchChanCommitKeys(nodeChanBucket *bolt.Bucket, channel *OpenChannel,
|
|||||||
}
|
}
|
||||||
commitKey := make([]byte, len(commitKeys)+bc.Len())
|
commitKey := make([]byte, len(commitKeys)+bc.Len())
|
||||||
copy(commitKey[:3], commitKeys)
|
copy(commitKey[:3], commitKeys)
|
||||||
copy(commitKeys[3:], bc.Bytes())
|
copy(commitKey[3:], bc.Bytes())
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
keyBytes := nodeChanBucket.Get(commitKey)
|
keyBytes := nodeChanBucket.Get(commitKey)
|
||||||
|
Loading…
Reference in New Issue
Block a user