Преглед изворни кода

Merge branch 'maint-0.4.1'

David Goulet пре 4 година
родитељ
комит
044bb019b6
3 измењених фајлова са 17 додато и 5 уклоњено
  1. 4 0
      changes/bug31024
  2. 3 0
      changes/bug31027
  3. 10 5
      src/core/or/circuitpadding.c

+ 4 - 0
changes/bug31024

@@ -0,0 +1,4 @@
+  o Minor bugfixes (circuitpadding):
+    - Add two NULL checks in unreachable places to silence Coverity (CID 144729
+      and 1447291) and better future proof ourselves. Fixes bug 31024; bugfix
+      on 0.4.1.1-alpha.

+ 3 - 0
changes/bug31027

@@ -0,0 +1,3 @@
+  o Code simplification and refactoring:
+    - Remove some dead code from circpad_machine_remove_token() to fix some
+      Coverity warnings (CID 1447298). Fixes bug 31027; bugfix on 0.4.1.1-alpha.

+ 10 - 5
src/core/or/circuitpadding.c

@@ -450,6 +450,9 @@ circpad_is_token_removal_supported(circpad_machine_runtime_t *mi)
     /* Machines that do want token removal are less sensitive to performance.
      * Let's spend some time to check that our state is consistent and sane */
     const circpad_state_t *state = circpad_machine_current_state(mi);
+    if (BUG(!state)) {
+      return 1;
+    }
     tor_assert_nonfatal(state->token_removal != CIRCPAD_TOKEN_REMOVAL_NONE);
     tor_assert_nonfatal(state->histogram_len == mi->histogram_len);
     tor_assert_nonfatal(mi->histogram_len != 0);
@@ -1091,8 +1094,11 @@ circpad_machine_remove_token(circpad_machine_runtime_t *mi)
 
   state = circpad_machine_current_state(mi);
 
+  /* If we are not in a padding state (like start or end), we're done */
+  if (!state)
+    return;
   /* Don't remove any tokens if we're not doing token removal */
-  if (!state || state->token_removal == CIRCPAD_TOKEN_REMOVAL_NONE)
+  if (state->token_removal == CIRCPAD_TOKEN_REMOVAL_NONE)
     return;
 
   current_time = monotime_absolute_usec();
@@ -1111,10 +1117,6 @@ circpad_machine_remove_token(circpad_machine_runtime_t *mi)
     timer_disable(mi->padding_timer);
   }
 
-  /* If we are not in a padding state (like start or end), we're done */
-  if (!state)
-    return;
-
   /* Perform the specified token removal strategy */
   switch (state->token_removal) {
     case CIRCPAD_TOKEN_REMOVAL_CLOSEST_USEC:
@@ -1676,6 +1678,9 @@ circpad_estimate_circ_rtt_on_received(circuit_t *circ,
     }
   } else {
     const circpad_state_t *state = circpad_machine_current_state(mi);
+    if (BUG(!state)) {
+      return;
+    }
 
     /* Since monotime is unpredictably expensive, only update this field
      * if rtt estimates are needed. Otherwise, stop the rtt update. */