Bug 238478 - TCP Cubic code bug in cubic_ack_received
Summary: TCP Cubic code bug in cubic_ack_received
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: CURRENT
Hardware: Any Any
: --- Affects Many People
Assignee: freebsd-net mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-06-10 22:21 UTC by Vidhi Goel
Modified: 2019-06-11 02:08 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vidhi Goel 2019-06-10 22:21:09 UTC
I am not sure if this is the right way to file a code audit issue. Recently I was referring to TCP Cubic source code and found one problem in function  cubic_ack_received.
1. The first condition checks whether the computed cubic window is less than TCP friendly window and sets accordingly
2. Else, it checks whether the current cwnd is less than the computed cubic window. This is the concave region but the freebsd code considers this as concave or convex.
This is incorrect as it would fail to set cwnd when (cwnd > w_cubic_next)

According to the draft, cwnd should be set to (W_cubic_next - cwnd)/cwnd in both concave and convex region. So the code should look like this:


if (w_cubic_next < w_tf) {
    set cwnd <- w_tf
} else if (cwnd < w_cubic_next) {
// This is concave region
    set cwnd <- (W_cubic_next - cwnd)/cwnd
} else {
// This is convex region
    set cwnd <- (W_cubic_next - cwnd)/cwnd
}


Or

if (w_cubic_next < w_tf) {
    set cwnd <- w_tf
} else {
    set cwnd <- (W_cubic_next - cwnd)/cwnd
}
Comment 1 Mark Linimon freebsd_committer freebsd_triage 2019-06-10 23:51:09 UTC
Yes, this is the correct way to file a code audit issue.  Thanks.