Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Correct Channel outbound HTLC serialization and expand fuzzing coverage - #892

Merged
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser
May 31, 2021
Merged

Correct Channel outbound HTLC serialization and expand fuzzing coverage#892
TheBlueMatt merged 4 commits into
lightningdevkit:mainfrom
TheBlueMatt:2021-04-fix-htlc-ser

Conversation

@TheBlueMatt

@TheBlueMattTheBlueMatt commented Apr 21, 2021

Copy link
Copy Markdown
Collaborator

This is based on #851 as it is required to get chanmon_consistency_target to run clean anyway.

This fixes a few trivial bugs in full_stack_target, then expands the coverage of chanmon_consistency_target significantly, fixing one bug that that expansion found (so far).

@codecov

codecovBot commented Apr 21, 2021

Copy link
Copy Markdown

Codecov Report

Merging #892 (25dbd0d) into main (f8450a7) will increase coverage by 1.93%.
The diff coverage is 66.66%.

Impacted file tree graph

@@ Coverage Diff @@## main #892 +/- ##
==========================================
+ Coverage 90.42% 92.36% +1.93% 
==========================================
Files 59 61 +2 Lines 30173 41340 +11167 ==========================================
+ Hits 27285 38184 +10899 - Misses 2888 3156 +268 
Impacted FilesCoverage Δ
lightning/src/ln/channel.rs92.72% <66.66%> (+4.42%)⬆️
lightning/src/util/errors.rs64.51% <0.00%> (-6.92%)⬇️
lightning/src/util/events.rs16.57% <0.00%> (-3.78%)⬇️
lightning/src/ln/features.rs98.57% <0.00%> (-0.26%)⬇️
lightning/src/util/ser.rs92.85% <0.00%> (-0.12%)⬇️
lightning/src/chain/mod.rs100.00% <0.00%> (ø)
lightning/src/chain/transaction.rs100.00% <0.00%> (ø)
lightning/src/chain/package.rs92.51% <0.00%> (ø)
lightning/src/chain/onchaintx.rs94.14% <0.00%> (ø)
lightning/src/util/poly1305.rs99.52% <0.00%> (+0.04%)⬆️
... and 28 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f8450a7...25dbd0d. Read the comment docs.

@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Rebased after #851 merge.

@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 50e9525 to 46697b9CompareMay 25, 2021 18:25
@jkczyz
jkczyz self-requested a review May 26, 2021 00:03
Comment threadfuzz/src/full_stack.rs Outdated
Comment threadfuzz/src/full_stack.rs
Comment threadfuzz/src/chanmon_consistency.rs Outdated
Comment threadfuzz/src/chanmon_consistency.rs
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 46697b9 to 1c818cdCompareMay 27, 2021 16:21
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Added some additional documentation.

While trying to debug the issue ultimately tracked down to a
`PeerHandler` locking bug in lightningdevkit#891, the ability to deliver only
individual messages at a time in chanmon_consistency looked
important. Specifically, it initially appeared there may be a race
when an update_add_htlc was delivered, then a node sent a payment,
and only after that, the corresponding commitment-signed was
delivered.
This commit adds such an ability, greatly expanding the potential
for chanmon_consistency to identify channel state machine bugs.
Channel serialization should happen "as if
remove_uncommitted_htlcs_and_mark_paused had just been called".
This is true for the most part, but outbound RemoteRemoved HTLCs
were being serialized as normal, even though
`remote_uncommitted_htlcs_and_mark_paused` resets them to
`Committed`.
This led to a bug identified by the `chanmon_consistency_target`
fuzzer wherein, if we receive a update_*_htlc message bug not the
corresponding commitment_signed prior to a serialization roundtrip,
we'd force-close the channel due to the peer "attempting to
fail/claim an HTLC which was already failed/claimed".
@TheBlueMatt
TheBlueMattforce-pushed the 2021-04-fix-htlc-ser branch from 1c818cd to 25dbd0dCompareMay 31, 2021 18:20
@TheBlueMatt

Copy link
Copy Markdown
CollaboratorAuthor

Squashed fixups with no changes. Will merge after CI:

$ git diff-tree -U3 1c818cd13 25dbd0d7e
$

@TheBlueMatt
TheBlueMatt merged commit c05347f into lightningdevkit:mainMay 31, 2021
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@TheBlueMatt@jkczyz@valentinewallace