bls: Guard null contribution verification vector - #1926
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@CodeAnt-AI review |
🤖 CodeAnt AI — Review Status
|
User descriptionReject DKG contribution-share verification when its verification vector is missing. This prevents a null dereference and deterministic node crash during DKG processing. CodeAnt-AI DescriptionPrevent crashes when verifying DKG contributions with a missing verification vector What Changed
Impact
💡 Usage GuideChecking Your Pull RequestEvery time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later. Talking to CodeAnt AIGot a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask: This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code. ExamplePreserve Org Learnings with CodeAntYou can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input: This helps CodeAnt AI learn and adapt to your team's coding style and standards. ExampleRetrigger reviewAsk CodeAnt AI to review the PR again, by typing: Check Your Repository HealthTo analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health. |
| // received (e.g. a non-member observer that did not get the member's QCONTRIB). | ||
| // Dereferencing it here is a remote-triggerable crash; treat a missing vvec as a | ||
| // failed verification, mirroring the null check in VerifyVerificationVectors(). | ||
| if (!forId.IsValid() || vvec == nullptr || !VerifyVerificationVector(*vvec)) { |
There was a problem hiding this comment.
Suggestion: The full VerifyVerificationVector scan now runs synchronously before the job is submitted, so this method is no longer asynchronous for valid inputs. CDKGSession::VerifyJustification invokes it once per contribution while processing a received justification, causing the same verification vector to be revalidated repeatedly on the message-processing thread and allowing a large vector to block that thread. Keep the null/ID guard synchronous, but perform vector validation inside the worker task or rely on the validation already performed when the contribution was received. [performance]
Severity Level: Major ⚠️
- ⚠️ DKG justification handling rescans vectors synchronously.
- ⚠️ Multiple contributions multiply message-thread validation cost.
- ⚠️ Large vectors can delay subsequent DKG messages.Prompt for AI Agent 🤖
This is a comment left during a code review.
**Path:** src/bls/bls_worker.cpp
**Line:** 762:762
**Comment:**
*Performance: The full `VerifyVerificationVector` scan now runs synchronously before the job is submitted, so this method is no longer asynchronous for valid inputs. `CDKGSession::VerifyJustification` invokes it once per contribution while processing a received justification, causing the same verification vector to be revalidated repeatedly on the message-processing thread and allowing a large vector to block that thread. Keep the null/ID guard synchronous, but perform vector validation inside the worker task or rely on the validation already performed when the contribution was received.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
reubenyap
left a comment
There was a problem hiding this comment.
I traced the null-vector case from DKG justification handling through the asynchronous verifier. Short-circuit evaluation now rejects the null pointer before dereference and returns the same resolved false future used for other invalid inputs. The full vector validation flagged elsewhere already existed before this PR, so it is not a regression here. The focused test and full CI matrix are green; I found no actionable defect.
Reject DKG contribution-share verification when its verification vector is missing. This prevents a null dereference and deterministic node crash during DKG processing.