mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-03 10:12:28 +02:00
Merge pull request #9815 from mohamedawnallah/preventCurrentNodeAnnMutation
server.go: prevent partial mutation of `currentNodeAnn` in `server.genNodeAnnouncement` on `netann.SignNodeAnnouncement` failures
This commit is contained in:
@@ -20,6 +20,12 @@
|
||||
|
||||
# Bug Fixes
|
||||
|
||||
- Fixed potential update inconsistencies in node announcements [by creating
|
||||
a shallow copy before modifications](
|
||||
https://github.com/lightningnetwork/lnd/pull/9815). This ensures the original
|
||||
announcement remains unchanged until the new one is fully signed and
|
||||
validated.
|
||||
|
||||
# New Features
|
||||
|
||||
## Functional Enhancements
|
||||
@@ -119,4 +125,5 @@ circuit. The indices are only available for forwarding events saved after v0.20.
|
||||
* Abdulkbk
|
||||
* Elle Mouton
|
||||
* Funyug
|
||||
* Mohamed Awnallah
|
||||
* Pins
|
||||
|
12
server.go
12
server.go
@@ -3432,6 +3432,11 @@ func (s *server) genNodeAnnouncement(features *lnwire.RawFeatureVector,
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
// Create a shallow copy of the current node announcement to work on.
|
||||
// This ensures the original announcement remains unchanged
|
||||
// until the new announcement is fully signed and valid.
|
||||
newNodeAnn := *s.currentNodeAnn
|
||||
|
||||
// First, try to update our feature manager with the updated set of
|
||||
// features.
|
||||
if features != nil {
|
||||
@@ -3457,17 +3462,20 @@ func (s *server) genNodeAnnouncement(features *lnwire.RawFeatureVector,
|
||||
|
||||
// Apply the requested changes to the node announcement.
|
||||
for _, modifier := range modifiers {
|
||||
modifier(s.currentNodeAnn)
|
||||
modifier(&newNodeAnn)
|
||||
}
|
||||
|
||||
// Sign a new update after applying all of the passed modifiers.
|
||||
err := netann.SignNodeAnnouncement(
|
||||
s.nodeSigner, s.identityKeyLoc, s.currentNodeAnn,
|
||||
s.nodeSigner, s.identityKeyLoc, &newNodeAnn,
|
||||
)
|
||||
if err != nil {
|
||||
return lnwire.NodeAnnouncement{}, err
|
||||
}
|
||||
|
||||
// If signing succeeds, update the current announcement.
|
||||
*s.currentNodeAnn = newNodeAnn
|
||||
|
||||
return *s.currentNodeAnn, nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user