Closed Bug 1702529 Opened 3 years ago Closed 3 years ago

Crash in [@ mozilla::net::Http3Session::ProcessInput]

Categories

(Core :: Networking: HTTP, defect, P2)

defect

Tracking

()

RESOLVED FIXED
95 Branch
Tracking Status
firefox-esr78 --- unaffected
firefox-esr91 --- wontfix
firefox87 --- unaffected
firefox88 --- wontfix
firefox89 --- wontfix
firefox93 --- wontfix
firefox94 --- wontfix
firefox95 --- fixed

People

(Reporter: aryx, Assigned: valentin)

References

(Blocks 1 open bug, Regression)

Details

(Keywords: crash, regression)

Crash Data

Attachments

(1 file)

4 crashes on 2+ devices, all on Windows 10

Crash report: https://crash-stats.mozilla.org/report/index/24b0dd56-4154-4319-a431-d090f0210331

MOZ_CRASH Reason: MOZ_DIAGNOSTIC_ASSERT(false) (NS_SUCCEEDED(rv))

Top 10 frames of crashing thread:

0 xul.dll mozilla::net::Http3Session::ProcessInput netwerk/protocol/http/Http3Session.cpp:325
1 xul.dll mozilla::net::Http3Session::RecvData netwerk/protocol/http/Http3Session.cpp:1149
2 xul.dll mozilla::net::HttpConnectionUDP::RecvData netwerk/protocol/http/HttpConnectionUDP.cpp:544
3 xul.dll mozilla::net::HttpConnectionUDP::OnPacketReceived netwerk/protocol/http/HttpConnectionUDP.cpp:646
4 xul.dll mozilla::net::nsSocketTransportService::Run netwerk/base/nsSocketTransportService2.cpp:1160
5 xul.dll nsThread::ProcessNextEvent xpcom/threads/nsThread.cpp:1145
6 xul.dll mozilla::ipc::MessagePumpForNonMainThreads::Run ipc/glue/MessagePump.cpp:302
7 xul.dll MessageLoop::RunHandler ipc/chromium/src/base/message_loop.cc:328
8 xul.dll MessageLoop::Run ipc/chromium/src/base/message_loop.cc:310
9 xul.dll static nsThread::ThreadFunc xpcom/threads/nsThread.cpp:391

This is failing because rust parser of an IP address in form of a string fails.
The protocol will handle just fine some of the packets being dropet for his reason.
I will leave this as a diagnostic assert, and I will lot to change c++-rust glue code a bit to mitigate this problem if possible.

Blocks: QUIC
Severity: -- → S3
Priority: -- → P2
Assignee: nobody → valentin.gosu

It seems the result of AddrToString when the assertion happens here is ?:443 - which obviously doesn't parse as an IP addr.
Now I'm trying to figure out where the ? is coming from 🙂

From what I can tell the ? is coming from getnameinfo via inet_ntop_internal.

From what I can tell, because we pass NI_NUMERICHOST, this should never happen.
Maybe a bug in the getnameinfo implementation on windows?

In any case, the steps here seem to be:

  1. Pass NetAddr/SockAddr to and from rust, instead of parsing the IP on every call.
  2. Use a native serialization of NetAddr to avoid said bug (if it exists) in a follow-up bug.

It seems that the serialization generated by inet_ntop_internal via
getnameinfo is sometimes wrong, returning ? instead of serializing the
IP we pass in.
It's also inefficient to keep passing the serialization to and from rust
code - instead it's much easier to just pass a pointer to the NetAddr
union and build a proper SocketAddr instance on the rust side from
from the bytes instead of parsing the serialization

Pushed by valentin.gosu@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/ba94ff2a7696
Pass NetAddr pointers to rust instead of a serialization r=necko-reviewers,dragana

Backed out for causing build bustages.

Flags: needinfo?(valentin.gosu)
Flags: needinfo?(valentin.gosu)
Pushed by valentin.gosu@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/241563557fd4
Pass NetAddr pointers to rust instead of a serialization r=necko-reviewers,dragana
Status: NEW → RESOLVED
Closed: 3 years ago
Resolution: --- → FIXED
Target Milestone: --- → 95 Branch
Has Regression Range: --- → yes
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: