-
-
Notifications
You must be signed in to change notification settings - Fork 6.7k
Rustls: test_09_02_h2_push frequent SIGSEGV in CI #16881
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
Comments
-11 means SIGSEGV. |
👋 This is an odd one. I have somewhat limited availability today (power outages from an ice storm) but I took a quick initial peek. Unfortunately I don't have any immediate theories. The test itself doesn't appear related to any of my recent changes (e.g. isn't using ECH, mTLS, etc) 🤔. It's possible it's shaking out a bug from the rustls-ffi update itself and not the vTLS changes. That might be an interesting avenue to try and hone in on. I had to run the test locally ~149 times before I finally caught a failure. I loaded the core, but the backtrace doesn't give me any strong theories:
|
With some more luck + iteration locally I was able to get an ASAN trace: https://gist.github.com/cpu/cbbe93520999f81ef422b66af977072d but I'm still unclear on the root cause |
They're both failing in In the first backtrace, the |
Running this normally, did not reproduce in several 100 iterations, but I get it pretty fast via > make -j20 && (cd tests && make -j20 && CURL_DBG_SOCK_RBLOCK=50 pytest -v -k "test_09_02" --count=100 --maxfail=1) which makes the socket receive return EAGAIN 50% of the times. Using the same command line with a GnuTLS build does not trigger the crash. I do not really think rustls does anything wrong, but that it exhibits just different timings and plain data chunks. I suspect the bug to be in the http2 push code. Investigating further... |
When a PUSH_PROMISE was received, the h2_stream object was assigned to the wrong `newhandle->mid` and was thereafter not found. This led to internal confusion, because the nghttp2 stream user_data was not cleared and an invalid easy handle was use for trace messages, resulting in a crash. refs curl#16881
Fix in #16905. Nothing to do with rustls, other than different call sequences resulted, exposing the bug. |
thanks for flagging the flake 🤝 |
I did this
Started seeing this on Linux in the Rustls job's pytests:
https://github.com/curl/curl/actions/runs/14160172286/job/39664557285#step:43:803
https://github.com/curl/curl/actions/runs/14149632958/job/39641190739
https://github.com/curl/curl/actions/runs/14145043858/job/39631366961
https://github.com/curl/curl/actions/runs/14145958822/job/39633296953
https://github.com/curl/curl/actions/runs/14162991213/job/39671406439#step:43:1
I expected the following
Clean pytest run.
curl/libcurl version
master
operating system
Linux
The text was updated successfully, but these errors were encountered: