From 8cd607447ebc7ed2627e825fca673bb5b45f6ad4 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Tue, 7 Dec 2021 15:05:19 +0100 Subject: [PATCH] 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. --- routing/missioncontrol_store.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/routing/missioncontrol_store.go b/routing/missioncontrol_store.go index 193f7d13a..27be86821 100644 --- a/routing/missioncontrol_store.go +++ b/routing/missioncontrol_store.go @@ -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