routing: fix memory corruption in MC store

Since bbolt returns references to internally stored data when storing
locally it's best to copy the byte slices returned or alternatively
convert them to string (which also makes a copy) to avoid crashes casued
by memory corruption.
This commit is contained in:
Andras Banki-Horvath 2021-12-07 15:05:19 +01:00
parent 71b23a2c54
commit 8cd607447e
No known key found for this signature in database
GPG Key ID: 80E5375C094198D8

View File

@ -82,7 +82,7 @@ func newMissionControlStore(db kvdb.Backend, maxRecords int,
// difference when updating the DB state.
c := resultsBucket.ReadCursor()
for k, _ := c.First(); k != nil; k, _ = c.Next() {
keys.PushBack(k)
keys.PushBack(string(k))
keysMap[string(k)] = struct{}{}
}
@ -334,7 +334,7 @@ func (b *missionControlStore) storeResults() error {
return err
}
keys.PushBack(k)
keys.PushBack(string(k))
keysMap[string(k)] = struct{}{}
}
@ -345,14 +345,14 @@ func (b *missionControlStore) storeResults() error {
}
front := keys.Front()
key := front.Value.([]byte)
key := front.Value.(string)
if err := bucket.Delete(key); err != nil {
if err := bucket.Delete([]byte(key)); err != nil {
return err
}
keys.Remove(front)
delete(keysMap, string(key))
delete(keysMap, key)
}
return nil