]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
kist: Cast, then do operations on int32.
authorNick Mathewson <nickm@torproject.org>
Fri, 15 Sep 2017 18:30:19 +0000 (14:30 -0400)
committerNick Mathewson <nickm@torproject.org>
Fri, 15 Sep 2017 18:30:19 +0000 (14:30 -0400)
Otherwise integer overflows can happen.  Remember, doing a i32xi32
multiply doesn't actually produce a 64-bit output.  You need to do
i64xi32 or i64xi64.

Coverity found this as CID 1417753

src/or/scheduler_kist.c

index f119cd696e5d67439740f5deb84e1e59f2cf2502..8595a340efe23d835f8763950ede6aa5589d6230 100644 (file)
@@ -266,7 +266,7 @@ update_socket_info_impl, (socket_table_ent_t *ent))
 
    /* Assuming all these values from the kernel are uint32_t still, they will
    * always fit into a int64_t tcp_space variable. */
-  tcp_space = (ent->cwnd - ent->unacked) * ent->mss;
+  tcp_space = (ent->cwnd - ent->unacked) * (int64_t)ent->mss;
   if (tcp_space < 0) {
     tcp_space = 0;
   }
@@ -277,7 +277,8 @@ update_socket_info_impl, (socket_table_ent_t *ent))
    * we end up negative, but then we just set extra_space to 0 in the sanity
    * check.*/
   extra_space =
-    clamp_double_to_int64((ent->cwnd * ent->mss) * sock_buf_size_factor) -
+    clamp_double_to_int64(
+                 (ent->cwnd * (int64_t)ent->mss) * sock_buf_size_factor) -
     ent->notsent;
   if (extra_space < 0) {
     extra_space = 0;