docs: document tor v2 onion handling in 0.21 release notes
What changed, and why it matters
This commit only adds documentation to the 0.21.0 release notes. It describes how LND now rejects old-style Tor v2 onion addresses at configuration and command boundaries, filters them from several internal persisted-state paths, and preserves wire-faithful handling of peer-signed v2 announcements. There is no code change in this commit, so it does not itself fix or introduce a vulnerability.
No action required for this commit. Review PR #10813 and the actual implementation commits if assessing the security of the Tor v2 removal.
Security signals we found
Documentation-only change
Summarizes prior Tor v2 deprecation/removal behavior
No functional code diff
Evidence from the diff
The diff is a documentation-only addition to docs/release-notes/release-notes-0.21.0.md summarizing PR #10813. It explains the removal of the –tor.v2 flag and tor.OnionHostToFakeIP, boundary rejection of v2 .onion strings in –externalip, –listen, lncli connect, and lncli wtclient towers add, persisted-state filtering for self-node announcements, watchtower client tower addresses, autopilot, graph bootstrapper, and SCB restore, v3-only ADD_ONION in the Tor controller, and byte-for-byte round-tripping of peer-signed v2 addresses through lnwire/graph/db and graph RPCs. No executable code is modified.
Changed components
docs/release-notes/release-notes-0.21.0.mdInspect captured patch +26 / −0
diff --git a/docs/release-notes/release-notes-0.21.0.md b/docs/release-notes/release-notes-0.21.0.md
index 1f96ba1..d05d1bc 100644
--- a/docs/release-notes/release-notes-0.21.0.md
+++ b/docs/release-notes/release-notes-0.21.0.md
@@ -282,6 +282,32 @@
14 and 8 respectively, now reserved). Callers must use the multi-channel
`outgoing_chan_ids` field introduced in 0.20.
+* [Removed the deprecated `--tor.v2` configuration
+ flag](https://github.com/lightningnetwork/lnd/pull/10813). Tor stopped
+ serving v2 onion services in October 2021, and lnd no longer produces
+ v2 on any code path; `tor.OnionHostToFakeIP` is also gone. Operator
+ input is rejected at the boundary: `--externalip`, `--listen`,
+ `lncli connect`, and `lncli wtclient towers add` fail fast on a v2
+ `.onion` string, so operators upgrading with a v2 entry in
+ `lnd.conf` must remove it before lnd will start. Persisted state
+ carried over from a previous version is also filtered before use:
+ the self-node announcement strips any v2 entry from the source-node
+ record before signing; the watchtower client drops v2 entries from
+ each persisted tower's address list (skipping the tower entirely if
+ no non-v2 address remains, so the operator can attach a fresh v3
+ address); the autopilot connector, graph bootstrapper, and
+ static-channel backup restore paths skip v2 entries before attempting
+ outbound dials. The Tor controller's `ADD_ONION` path is restricted
+ to v3 keys, including the encrypted on-disk legacy-key fallback. The
+ on-disk records themselves are left intact.
+
+ Peer-signed announcements that still carry v2 are handled
+ byte-for-byte: the `lnwire` and `graph/db` codecs round-trip v2 so
+ `DataToSign` reproduces the signed bytes, signatures validate, and
+ the announcement is persisted and re-broadcast unchanged. RPCs like
+ `GetNodeInfo` and `DescribeGraph` still expose the full address
+ set.
+
## Performance Improvements
* Let the [channel graph cache be populated
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.