Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

packetbeat/protos/memcache: don't panic when a transaction is empty #33853

Merged
merged 1 commit into from
Dec 5, 2022

Conversation

efd6
Copy link
Contributor

@efd6 efd6 commented Nov 28, 2022

What does this PR do?

When a *transaction is constructed from a UDP stream, but has no request and no response, onTransaction is handed a nil *transaction, resulting in a panic in Event when the *transaction.Notes field is accessed. The panic is not recovered by ParseUDP's recover because the panic happens in a separate goroutine. So be more careful with pointer dereferencing in this path and put a separate recover in the time.AfterFunc-called closure.

Why is it important?

The panic causes loss of packetbeat service in some situations.

Checklist

  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have made corresponding change to the default configuration files
  • I have added tests that prove my fix is effective or that my feature works
  • I have added an entry in CHANGELOG.next.asciidoc or CHANGELOG-developer.next.asciidoc.

Author's Checklist

  • [ ]

How to test this PR locally

Related issues

Use cases

Screenshots

Logs

@efd6 efd6 added bug Packetbeat backport-7.17 Automated backport to the 7.17 branch with mergify 8.7-candidate backport-v8.6.0 Automated backport with mergify labels Nov 28, 2022
@efd6 efd6 self-assigned this Nov 28, 2022
@botelastic botelastic bot added the needs_team Indicates that the issue/PR needs a Team:* label label Nov 28, 2022
When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.
@botelastic botelastic bot removed the needs_team Indicates that the issue/PR needs a Team:* label label Nov 28, 2022
@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

the below badges are clickable and redirect to their specific view in the CI or DOCS
Pipeline View Test View Changes Artifacts preview preview

Expand to view the summary

Build stats

  • Start Time: 2022-11-28T23:11:21.192+0000

  • Duration: 45 min 23 sec

Test stats 🧪

Test Results
Failed 0
Passed 1721
Skipped 19
Total 1740

💚 Flaky test report

Tests succeeded.

🤖 GitHub comments

Expand to view the GitHub comments

To re-run your PR in the CI, just comment with:

  • /test : Re-trigger the build.

  • /package : Generate the packages and run the E2E tests.

  • /beats-tester : Run the installation tests with beats-tester.

  • run elasticsearch-ci/docs : Re-trigger the docs validation. (use unformatted text in the comment!)

@efd6 efd6 marked this pull request as ready for review November 28, 2022 23:57
@efd6 efd6 requested a review from a team as a code owner November 28, 2022 23:57
@elasticmachine
Copy link
Collaborator

Pinging @elastic/security-external-integrations (Team:Security-External Integrations)

@ShourieG
Copy link
Contributor

ShourieG commented Dec 5, 2022

@efd6 can you fix the error handling issues, otherwise LGTM.

@ShourieG ShourieG self-requested a review December 5, 2022 05:28
@efd6
Copy link
Contributor Author

efd6 commented Dec 5, 2022

@ShourieG I'd rather not touch additional code here.

@efd6 efd6 merged commit 248c9b0 into elastic:main Dec 5, 2022
mergify bot pushed a commit that referenced this pull request Dec 5, 2022
…33853)

When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.

(cherry picked from commit 248c9b0)
mergify bot pushed a commit that referenced this pull request Dec 5, 2022
…33853)

When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.

(cherry picked from commit 248c9b0)
efd6 added a commit that referenced this pull request Dec 5, 2022
…33853) (#33936)

When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.

(cherry picked from commit 248c9b0)

Co-authored-by: Dan Kortschak <90160302+efd6@users.noreply.github.com>
efd6 added a commit that referenced this pull request Dec 5, 2022
…33853) (#33935)

When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.

(cherry picked from commit 248c9b0)

Co-authored-by: Dan Kortschak <90160302+efd6@users.noreply.github.com>
chrisberkhout pushed a commit that referenced this pull request Jun 1, 2023
…33853)

When a *transaction is constructed from a UDP stream, but has no request
and no response, onTransaction is handed a nil *transaction, resulting in
a panic in Event when the *transaction.Notes field is accessed. The panic
is not recovered by ParseUDP's recover because the panic happens in a
separate goroutine. So be more careful with pointer dereferencing in this
path and put a separate recover in the time.AfterFunc-called closure.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
8.7-candidate backport-7.17 Automated backport to the 7.17 branch with mergify backport-v8.6.0 Automated backport with mergify bug Packetbeat
Projects
None yet
Development

Successfully merging this pull request may close these issues.

packetbeat/protos/memcache: panics when a transaction is empty
3 participants