[Bug 238478] TCP Cubic code bug in cubic_ack_received

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Mon Jun 10 22:21:12 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=238478

            Bug ID: 238478
           Summary: TCP Cubic code bug in cubic_ack_received
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Many People
          Priority: ---
         Component: kern
          Assignee: bugs at FreeBSD.org
          Reporter: Goel.vidhi07 at gmail.com

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
}

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list