diff options
-rw-r--r-- | svm/ssvm.c | 8 | ||||
-rw-r--r-- | vnet/vnet/ip/ip4_mtrie.c | 22 | ||||
-rw-r--r-- | vnet/vnet/ip/ip6_neighbor.c | 8 | ||||
-rw-r--r-- | vppinfra/vppinfra/elf.c | 15 | ||||
-rw-r--r-- | vppinfra/vppinfra/phash.c | 7 |
5 files changed, 54 insertions, 6 deletions
@@ -43,7 +43,13 @@ ssvm_master_init (ssvm_private_t * ssvm, u32 master_index) return SSVM_API_ERROR_CREATE_FAILURE; } - lseek (ssvm_fd, ssvm->ssvm_size, SEEK_SET); + if (lseek (ssvm_fd, ssvm->ssvm_size, SEEK_SET) < 0) + { + clib_unix_warning ("lseek"); + close (ssvm_fd); + return SSVM_API_ERROR_SET_SIZE; + } + if (write (ssvm_fd, &junk, 1) != 1) { clib_unix_warning ("set ssvm size"); diff --git a/vnet/vnet/ip/ip4_mtrie.c b/vnet/vnet/ip/ip4_mtrie.c index 461cd64b..0badde76 100644 --- a/vnet/vnet/ip/ip4_mtrie.c +++ b/vnet/vnet/ip/ip4_mtrie.c @@ -436,10 +436,26 @@ maybe_remap_leaf (ip_lookup_main_t * lm, ip4_fib_mtrie_leaf_t * p) if (m) { was_remapped_to_empty_leaf = m == ~0; + + /* + * The intent of the original form - which dates to 2013 or + * earlier - is not obvious. Here's the original: + * + * if (was_remapped_to_empty_leaf) + * p[0] = (was_remapped_to_empty_leaf + * ? IP4_FIB_MTRIE_LEAF_EMPTY + * : ip4_fib_mtrie_leaf_set_adj_index (m - 1)); + * + * Notice the outer "if (was_remapped_to_empty_leaf)" + * means that p[0] is always set to IP4_FIB_MTRIE_LEAF_EMPTY, + * and is otherwise left intact. + * + * It seems unlikely that the adjacency mapping scheme + * works in detail. Coverity correctly complains that the + * else-case of the original ternary expression is dead code. + */ if (was_remapped_to_empty_leaf) - p[0] = (was_remapped_to_empty_leaf - ? IP4_FIB_MTRIE_LEAF_EMPTY - : ip4_fib_mtrie_leaf_set_adj_index (m - 1)); + p[0] = IP4_FIB_MTRIE_LEAF_EMPTY; } } return was_remapped_to_empty_leaf; diff --git a/vnet/vnet/ip/ip6_neighbor.c b/vnet/vnet/ip/ip6_neighbor.c index 888baff8..2593cb46 100644 --- a/vnet/vnet/ip/ip6_neighbor.c +++ b/vnet/vnet/ip/ip6_neighbor.c @@ -394,7 +394,13 @@ vnet_set_ip6_ethernet_neighbor (vlib_main_t * vm, existing_adj->arp.next_hop.ip6.as_u64[1] == a->as_u64[1]) { u32 * ai; - u32 * adjs = vec_dup(n->adjacencies); + u32 * adjs = 0; + + if (n) + adjs = vec_dup(n->adjacencies); + else + clib_warning ("ip6 neighbor n not set"); + /* Update all adj assigned to this arp entry */ vec_foreach(ai, adjs) { diff --git a/vppinfra/vppinfra/elf.c b/vppinfra/vppinfra/elf.c index 8a09cd41..7fe3048b 100644 --- a/vppinfra/vppinfra/elf.c +++ b/vppinfra/vppinfra/elf.c @@ -1107,6 +1107,8 @@ static void byte_swap_verneed (elf_main_t * em, } static void +set_dynamic_verneed (elf_main_t * em) __attribute__((unused)); +static void set_dynamic_verneed (elf_main_t * em) { elf_dynamic_version_need_union_t * vus = em->verneed; @@ -1123,6 +1125,8 @@ set_dynamic_verneed (elf_main_t * em) } static void +set_symbol_table (elf_main_t * em, u32 table_index) __attribute__((unused)); +static void set_symbol_table (elf_main_t * em, u32 table_index) { elf_symbol_table_t * tab = vec_elt_at_index (em->symbol_tables, table_index); @@ -1376,12 +1380,16 @@ static u32 string_table_add_name (string_table_builder_t * b, u8 * n) } static u32 string_table_add_name_index (string_table_builder_t * b, u32 index) + __attribute__((unused)); +static u32 string_table_add_name_index (string_table_builder_t * b, u32 index) { u8 * n = b->old_table + index; return string_table_add_name (b, n); } static void string_table_init (string_table_builder_t * b, u8 * old_table) + __attribute__((unused)); +static void string_table_init (string_table_builder_t * b, u8 * old_table) { memset (b, 0, sizeof (b[0])); b->old_table = old_table; @@ -1389,6 +1397,8 @@ static void string_table_init (string_table_builder_t * b, u8 * old_table) } static u8 * string_table_done (string_table_builder_t * b) + __attribute__((unused)); +static u8 * string_table_done (string_table_builder_t * b) { hash_free (b->hash); return b->new_table; @@ -1400,6 +1410,8 @@ static void layout_sections (elf_main_t * em) u32 n_sections_with_changed_exec_address = 0; u32 * deferred_symbol_and_string_sections = 0; u32 n_deleted_sections = 0; + /* note: rebuild is always zero. Intent lost in the sands of time */ +#if 0 int rebuild = 0; /* Re-build section string table (sections may have been deleted). */ @@ -1498,6 +1510,7 @@ static void layout_sections (elf_main_t * em) vec_free (s->contents); s->contents = string_table_done (&b); } +#endif /* dead code */ /* Figure file offsets and exec addresses for sections. */ { @@ -1613,8 +1626,10 @@ static void layout_sections (elf_main_t * em) /* Update dynamic entries now that sections have been assigned possibly new addresses. */ +#if 0 if (rebuild) elf_set_dynamic_entries (em); +#endif /* Update segments for changed section addresses. */ { diff --git a/vppinfra/vppinfra/phash.c b/vppinfra/vppinfra/phash.c index c883fac8..a104e64e 100644 --- a/vppinfra/vppinfra/phash.c +++ b/vppinfra/vppinfra/phash.c @@ -662,7 +662,12 @@ static void guess_initial_parameters (phash_main_t * pm) a_max = 1; b_max = 1; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: - a_max = is_minimal ? s_max / 2 : s_max; + /* + * Was: a_max = is_minimal ? s_max / 2 : s_max; + * However, we know that is_minimal must be true, so the + * if-arm of the ternary expression is always executed. + */ + a_max = s_max/2; b_max = s_max/2; break; case 9: case 10: case 11: case 12: case 13: |