Bug 238478 - TCP Cubic code bug in cubic_ack_received
Summary: TCP Cubic code bug in cubic_ack_received
Status: In Progress
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: CURRENT
Hardware: Any Any
: --- Affects Many People
Assignee: Richard Scheffenegger
Depends on:
Reported: 2019-06-10 22:21 UTC by Vidhi Goel
Modified: 2020-05-24 18:18 UTC (History)
3 users (show)

See Also:


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


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.
Comment 2 Richard Scheffenegger freebsd_committer 2020-05-01 20:56:18 UTC
Since having fixed numerous cubic related bugs, looking further into this.
Comment 3 Richard Scheffenegger freebsd_committer 2020-05-24 18:18:22 UTC
Currently working to validate the fix in D24657