srtp: fix for possible sequence number corruption on wrap around boun… #6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We encountered and fixed a bug in libre:
Assume we protect with SRTP a sequence of packets with following sequence numbers:
..., 65533, 65535, 0, 1, 65534, 2, ...
Sequence is a little bit out of order, and roc (roll over counter) should increment by 1.
The issue was that it eventually incremented by 2:
SN 0: roc++; s_l = 0
SN 1: s_l = 1
SN 65534: (hdr.seq > strm->s_l) => s_l = 65534
SN 2: roc++; s_l = 2
That led to incorrect "ix" calculation,then incorrect authentication tag was formed, then receiver (i.e. web browser based on libSRTP) failed to unprotect all subsequent packets with err=7 (auth error), stream was frozen.