if (tcp_is_reno(tp)) {
                        tcp_remove_reno_sacks(sk, pkts_acked);
                } else {
+                       int delta;
+
                        /* Non-retransmitted hole got filled? That's reordering */
                        if (reord < prior_fackets)
                                tcp_update_reordering(sk, tp->fackets_out - reord, 0);
 
-                       /* No need to care for underflows here because
-                        * the lost_skb_hint gets NULLed if we're past it
-                        * (or something non-trivial happened)
-                        */
-                       if (tcp_is_fack(tp))
-                               tp->lost_cnt_hint -= pkts_acked;
-                       else
-                               tp->lost_cnt_hint -= prior_sacked - tp->sacked_out;
+                       delta = tcp_is_fack(tp) ? pkts_acked :
+                                                 prior_sacked - tp->sacked_out;
+                       tp->lost_cnt_hint -= min(tp->lost_cnt_hint, delta);
                }
 
                tp->fackets_out -= min(pkts_acked, tp->fackets_out);