aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vlib-api/vlibsocket/socksvr_vlib.c2
-rw-r--r--vlib/vlib/unix/cli.c2
-rw-r--r--vnet/vnet/ip/ip_input_acl.c2
-rw-r--r--vnet/vnet/ip/udp_local.c8
-rw-r--r--vnet/vnet/mpls-gre/mpls.c6
-rw-r--r--vnet/vnet/policer/node_funcs.c2
-rw-r--r--vnet/vnet/policer/xlate.c2
-rw-r--r--vnet/vnet/rewrite.c2
-rw-r--r--vnet/vnet/sr/sr.c11
-rw-r--r--vnet/vnet/sr/sr_replicate.c8
-rw-r--r--vnet/vnet/unix/tapcli.c3
-rw-r--r--vnet/vnet/unix/tuntap.c6
-rw-r--r--vnet/vnet/vxlan-gpe/decap.c5
-rw-r--r--vnet/vnet/vxlan/decap.c5
-rw-r--r--vpp/app/vpe_cli.c1
-rw-r--r--vppapigen/lex.c57
-rw-r--r--vppapigen/node.c2
-rw-r--r--vppinfra/tools/elftool.c13
-rw-r--r--vppinfra/vppinfra/asm_x86.c4
-rw-r--r--vppinfra/vppinfra/bitmap.h4
-rw-r--r--vppinfra/vppinfra/elf.c11
-rw-r--r--vppinfra/vppinfra/elf_clib.c8
-rw-r--r--vppinfra/vppinfra/elog.c2
23 files changed, 102 insertions, 64 deletions
diff --git a/vlib-api/vlibsocket/socksvr_vlib.c b/vlib-api/vlibsocket/socksvr_vlib.c
index eb8dd3340a1..354c4f1c53d 100644
--- a/vlib-api/vlibsocket/socksvr_vlib.c
+++ b/vlib-api/vlibsocket/socksvr_vlib.c
@@ -575,12 +575,14 @@ socksvr_api_init (vlib_main_t * vm)
rv = ioctl (sockfd, FIONBIO, &one);
if (rv < 0)
{
+ close (sockfd);
return clib_error_return_unix (0, "FIONBIO");
}
rv = setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof (one));
if (rv < 0)
{
+ close (sockfd);
return clib_error_return_unix (0, "SO_REUSEADDR");
}
diff --git a/vlib/vlib/unix/cli.c b/vlib/vlib/unix/cli.c
index 7d5e10b8b8e..22f07f99eb1 100644
--- a/vlib/vlib/unix/cli.c
+++ b/vlib/vlib/unix/cli.c
@@ -2397,8 +2397,8 @@ unix_cli_config (vlib_main_t * vm, unformat_input_t * input)
if (isatty (UNIX_CLI_STDIN_FD) && um->cli_line_mode == 0)
{
/* Capture terminal resize events */
+ memset (&sa, 0, sizeof(sa));
sa.sa_handler = unix_cli_resize_interrupt;
- sa.sa_flags = 0;
if (sigaction (SIGWINCH, &sa, 0) < 0)
clib_panic ("sigaction");
diff --git a/vnet/vnet/ip/ip_input_acl.c b/vnet/vnet/ip/ip_input_acl.c
index eaf7f34eec5..6331cf4fa6b 100644
--- a/vnet/vnet/ip/ip_input_acl.c
+++ b/vnet/vnet/ip/ip_input_acl.c
@@ -322,7 +322,7 @@ ip_inacl_inline (vlib_main_t * vm,
t->sw_if_index = vnet_buffer(b0)->sw_if_index[VLIB_RX];
t->next_index = next0;
t->table_index = t0 ? t0 - vcm->tables : ~0;
- t->offset = e0 ? vnet_classify_get_offset (t0, e0): ~0;
+ t->offset = (e0 && t0) ? vnet_classify_get_offset (t0, e0): ~0;
}
/* verify speculative enqueue, maybe switch current next frame */
diff --git a/vnet/vnet/ip/udp_local.c b/vnet/vnet/ip/udp_local.c
index 9b701470934..4928d5523e4 100644
--- a/vnet/vnet/ip/udp_local.c
+++ b/vnet/vnet/ip/udp_local.c
@@ -242,8 +242,8 @@ udp46_input_inline (vlib_main_t * vm,
b0, sizeof (*tr));
if (b0->error != node->errors[UDP_ERROR_LENGTH_ERROR])
{
- tr->src_port = h0->src_port;
- tr->dst_port = h0->dst_port;
+ tr->src_port = h0 ? h0->src_port : 0;
+ tr->dst_port = h0 ? h0->dst_port : 0;
tr->bound = (next0 != UDP_INPUT_NEXT_ICMP4_ERROR &&
next0 != UDP_INPUT_NEXT_ICMP6_ERROR);
}
@@ -254,8 +254,8 @@ udp46_input_inline (vlib_main_t * vm,
b1, sizeof (*tr));
if (b1->error != node->errors[UDP_ERROR_LENGTH_ERROR])
{
- tr->src_port = h1->src_port;
- tr->dst_port = h1->dst_port;
+ tr->src_port = h1 ? h1->src_port : 0;
+ tr->dst_port = h1 ? h1->dst_port : 0;
tr->bound = (next1 != UDP_INPUT_NEXT_ICMP4_ERROR &&
next1 != UDP_INPUT_NEXT_ICMP6_ERROR);
}
diff --git a/vnet/vnet/mpls-gre/mpls.c b/vnet/vnet/mpls-gre/mpls.c
index 4b36c5dc34d..d914b4c2b72 100644
--- a/vnet/vnet/mpls-gre/mpls.c
+++ b/vnet/vnet/mpls-gre/mpls.c
@@ -399,7 +399,7 @@ int vnet_mpls_add_del_decap (u32 rx_fib_id,
tx_fib_index_or_output_swif_index = tx_fib_id;
}
- key = ((u64)rx_fib_index<<32) | ((u64) (label_host_byte_order<<12))
+ key = ((u64) rx_fib_index<<32) | ((u64) label_host_byte_order<<12)
| ((u64) s_bit<<8);
p = hash_get (mm->mpls_decap_by_rx_fib_and_label, key);
@@ -748,8 +748,8 @@ int mpls_fib_reset_labels (u32 fib_id)
vec_foreach (s, records)
{
- key = ((u64)fib_index <<32) | ((u64)(s->dest<<12)) |
- ((u64)s->s_bit);
+ key = ((u64) fib_index <<32) | ((u64) s->dest<<12) |
+ ((u64) s->s_bit);
hash_unset (mm->mpls_decap_by_rx_fib_and_label, key);
pool_put_index (mm->decaps, s->entry_index);
diff --git a/vnet/vnet/policer/node_funcs.c b/vnet/vnet/policer/node_funcs.c
index 0858a86d2a2..61a29733117 100644
--- a/vnet/vnet/policer/node_funcs.c
+++ b/vnet/vnet/policer/node_funcs.c
@@ -804,7 +804,7 @@ policer_classify_inline (vlib_main_t * vm,
t->sw_if_index = vnet_buffer(b0)->sw_if_index[VLIB_RX];
t->next_index = next0;
t->table_index = t0 ? t0 - vcm->tables : ~0;
- t->offset = e0 ? vnet_classify_get_offset (t0, e0): ~0;
+ t->offset = (e0 && t0) ? vnet_classify_get_offset (t0, e0): ~0;
t->policer_index = e0 ? e0->next_index: ~0;
}
diff --git a/vnet/vnet/policer/xlate.c b/vnet/vnet/policer/xlate.c
index 934c488ccb8..61976b1cbde 100644
--- a/vnet/vnet/policer/xlate.c
+++ b/vnet/vnet/policer/xlate.c
@@ -468,7 +468,7 @@ sse2_pol_convert_cfg_rates_to_hw (sse2_qos_pol_cfg_params_st *cfg,
&exp, &hi_mant);
}
- denom = (1 << exp);
+ denom = (1ULL << exp);
if (hi_rate == eir_hw) {
hw->peak_rate_man = (uint16_t)hi_mant;
rc = sse2_qos_pol_round((uint64_t)cir_hw, denom, &rnd_value,
diff --git a/vnet/vnet/rewrite.c b/vnet/vnet/rewrite.c
index a538eef30f7..3435b0f2d18 100644
--- a/vnet/vnet/rewrite.c
+++ b/vnet/vnet/rewrite.c
@@ -209,7 +209,7 @@ void vnet_rewrite_for_sw_interface (vnet_main_t * vnm,
ASSERT (hc->set_rewrite);
n_rw_tmp = hc->set_rewrite (vnm, sw_if_index, packet_type, dst_address, rw_tmp, max_rewrite_bytes);
- ASSERT (n_rw_tmp >= 0 && n_rw_tmp < max_rewrite_bytes);
+ ASSERT (n_rw_tmp < max_rewrite_bytes);
vnet_rewrite_set_data_internal (rw, max_rewrite_bytes, rw_tmp, n_rw_tmp);
}
diff --git a/vnet/vnet/sr/sr.c b/vnet/vnet/sr/sr.c
index 05d8d8166da..d935b458ec9 100644
--- a/vnet/vnet/sr/sr.c
+++ b/vnet/vnet/sr/sr.c
@@ -724,8 +724,10 @@ find_or_add_shared_secret (ip6_sr_main_t * sm, u8 * secret, u32 * indexp)
for (i = 0; i < vec_len (sm->hmac_keys); i++)
{
if (sm->hmac_keys[i].shared_secret == 0)
- key = sm->hmac_keys + i;
- goto found;
+ {
+ key = sm->hmac_keys + i;
+ goto found;
+ }
}
vec_validate (sm->hmac_keys, i);
key = sm->hmac_keys + i;
@@ -970,7 +972,6 @@ int ip6_sr_add_del_tunnel (ip6_sr_add_del_tunnel_args_t * a)
memset(&adj, 0, sizeof (adj));
/* Create an adjacency and add to v6 fib */
- adj.lookup_next_index = IP_LOOKUP_NEXT_REWRITE;
adj.lookup_next_index = sm->ip6_lookup_sr_next_index;
adj.explicit_fib_index = ~0;
@@ -1020,7 +1021,9 @@ int ip6_sr_add_del_tunnel (ip6_sr_add_del_tunnel_args_t * a)
p=hash_get_mem (sm->policy_index_by_policy_name, a->policy_name);
}
vec_add1 (pt->tunnel_indices, t - sm->tunnels);
- t->policy_index = p[0]; /* equiv. to (pt - sm->policies) */
+ if (p == 0)
+ clib_warning ("p is NULL!");
+ t->policy_index = p ? p[0] : ~0; /* equiv. to (pt - sm->policies) */
}
if (a->name)
diff --git a/vnet/vnet/sr/sr_replicate.c b/vnet/vnet/sr/sr_replicate.c
index ccc01465f73..f059ce95fb3 100644
--- a/vnet/vnet/sr/sr_replicate.c
+++ b/vnet/vnet/sr/sr_replicate.c
@@ -304,17 +304,17 @@ sr_replicate_node_fn (vlib_main_t * vm,
sr_replicate_trace_t *tr = vlib_add_trace (vm, node,
b0, sizeof (*tr));
tr->tunnel_index = t0 - sm->tunnels;
+ tr->length = 0;
if (hdr_ip0)
{
memcpy (tr->src.as_u8, hdr_ip0->src_address.as_u8,
sizeof (tr->src.as_u8));
memcpy (tr->dst.as_u8, hdr_ip0->dst_address.as_u8,
sizeof (tr->dst.as_u8));
+ if (hdr_ip0->payload_length)
+ tr->length = clib_net_to_host_u16
+ (hdr_ip0->payload_length);
}
- if (hdr_ip0->payload_length)
- tr->length = clib_net_to_host_u16(hdr_ip0->payload_length);
- else
- tr->length = 0;
tr->next_index = next_index;
memcpy (tr->sr, hdr_sr0, sizeof (tr->sr));
}
diff --git a/vnet/vnet/unix/tapcli.c b/vnet/vnet/unix/tapcli.c
index 667e3e412de..7e2ee06330a 100644
--- a/vnet/vnet/unix/tapcli.c
+++ b/vnet/vnet/unix/tapcli.c
@@ -823,7 +823,8 @@ int vnet_tap_connect (vlib_main_t * vm, u8 * intfc_name, u8 *hwaddr_arg,
error:
close (dev_net_tun_fd);
- close (dev_tap_fd);
+ if (dev_tap_fd >= 0)
+ close (dev_tap_fd);
return rv;
}
diff --git a/vnet/vnet/unix/tuntap.c b/vnet/vnet/unix/tuntap.c
index 28b2584b3d3..f24d71eee8a 100644
--- a/vnet/vnet/unix/tuntap.c
+++ b/vnet/vnet/unix/tuntap.c
@@ -427,7 +427,8 @@ tuntap_exit (vlib_main_t * vm)
if (ioctl (tm->dev_net_tun_fd, TUNSETPERSIST, 0) < 0)
clib_unix_warning ("TUNSETPERSIST");
close(tm->dev_tap_fd);
- close(tm->dev_net_tun_fd);
+ if (tm->dev_net_tun_fd >= 0)
+ close(tm->dev_net_tun_fd);
close (sfd);
return 0;
@@ -809,7 +810,8 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im,
if (ioctl (sockfd, SIOCDIFADDR, &ifr6) < 0)
clib_unix_warning ("del address");
- close (sockfd);
+ if (sockfd >= 0)
+ close (sockfd);
mhash_unset (&tm->subif_mhash, &subif_addr, 0 /* old value ptr */);
pool_put (tm->subifs, ap);
diff --git a/vnet/vnet/vxlan-gpe/decap.c b/vnet/vnet/vxlan-gpe/decap.c
index 34bcccd9333..7f32cbd8a49 100644
--- a/vnet/vnet/vxlan-gpe/decap.c
+++ b/vnet/vnet/vxlan-gpe/decap.c
@@ -73,7 +73,10 @@ vxlan_gpe_input (vlib_main_t * vm,
u32 cpu_index = os_get_cpu_number ();
u32 stats_sw_if_index, stats_n_packets, stats_n_bytes;
- memset (&last_key4, 0xff, sizeof(last_key4));
+ if (is_ip4)
+ memset (&last_key4, 0xff, sizeof(last_key4));
+ else
+ memset (&last_key6, 0xff, sizeof(last_key6));
from = vlib_frame_vector_args (from_frame);
n_left_from = from_frame->n_vectors;
diff --git a/vnet/vnet/vxlan/decap.c b/vnet/vnet/vxlan/decap.c
index dc9a2ff7afa..899b3318bb1 100644
--- a/vnet/vnet/vxlan/decap.c
+++ b/vnet/vnet/vxlan/decap.c
@@ -64,7 +64,10 @@ vxlan_input (vlib_main_t * vm,
u32 cpu_index = os_get_cpu_number();
u32 stats_sw_if_index, stats_n_packets, stats_n_bytes;
- last_key4.as_u64 = ~0;
+ if (is_ip4)
+ last_key4.as_u64 = ~0;
+ else
+ memset (&last_key6, 0xff, sizeof (last_key6));
from = vlib_frame_vector_args (from_frame);
n_left_from = from_frame->n_vectors;
diff --git a/vpp/app/vpe_cli.c b/vpp/app/vpe_cli.c
index 32b6d03d6bb..b9f717bdc3d 100644
--- a/vpp/app/vpe_cli.c
+++ b/vpp/app/vpe_cli.c
@@ -67,6 +67,7 @@ virtual_ip_cmd_fn_command_fn (vlib_main_t * vm,
ip_adjacency_t adj;
u32 adj_index;
+ memset(&adj, 0, sizeof(adj));
adj.lookup_next_index = IP_LOOKUP_NEXT_REWRITE;
vnet_rewrite_for_sw_interface
diff --git a/vppapigen/lex.c b/vppapigen/lex.c
index d7d8cbaf104..88744ff1029 100644
--- a/vppapigen/lex.c
+++ b/vppapigen/lex.c
@@ -390,7 +390,8 @@ int main (int argc, char **argv)
}
else {
fclose (ifp);
- fclose (ofp);
+ if (ofp)
+ fclose (ofp);
if (ofile) {
printf ("Removing %s\n", ofile);
unlink (ofile);
@@ -426,6 +427,12 @@ void yyerror (char *s)
static char namebuf [MAXNAME];
+static inline char
+getc_char (FILE *ifp)
+{
+ return ((char)(getc(ifp) & 0x7f));
+}
+
/*
* yylex (well, yylex_1: The real yylex below does crc-hackery)
*/
@@ -433,7 +440,6 @@ static int yylex_1 (void)
{
int nameidx=0;
char c;
- int at_bol=1;
enum { LP_INITIAL_WHITESPACE, LP_LINE_NUMBER,
LP_PRE_FILENAME_WHITESPACE, LP_FILENAME,
LP_POST_FILENAME,
@@ -446,23 +452,16 @@ static int yylex_1 (void)
* START state -- looking for something interesting
*/
case START_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
switch (c) {
case '\n':
the_lexer_linenumber++;
- at_bol=1;
goto again;
case '#':
- if (!at_bol) {
- fprintf (stderr, "unknown token /%c at line %d\n",
- c, the_lexer_linenumber);
- return (BARF);
- }
-
the_lexer_state = LINE_PRAGMA_STATE;
lp_substate = LP_INITIAL_WHITESPACE;
goto again;
@@ -507,7 +506,7 @@ static int yylex_1 (void)
goto again;
case '/':
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
@@ -524,7 +523,7 @@ static int yylex_1 (void)
}
case '\\':
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
@@ -552,7 +551,7 @@ static int yylex_1 (void)
* NAME state -- eat the rest of a name
*/
case NAME_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
@@ -573,7 +572,7 @@ static int yylex_1 (void)
* NUMBER state -- eat the rest of a number
*/
case NUMBER_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
@@ -595,11 +594,11 @@ static int yylex_1 (void)
* C_COMMENT state -- eat a peach
*/
case C_COMMENT_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
if (c == '*') {
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
if (c == '/') {
@@ -616,7 +615,7 @@ static int yylex_1 (void)
*/
case CPP_COMMENT_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
if (c == '\n') {
@@ -627,12 +626,12 @@ static int yylex_1 (void)
goto again;
case STRING_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
switch (c) {
case '\\':
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
namebuf[nameidx++] = c;
@@ -658,12 +657,12 @@ static int yylex_1 (void)
break;
case HELPER_STATE:
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
switch (c) {
case '\\':
- c = getc (ifp);
+ c = getc_char (ifp);
if (feof (ifp))
return (EOF);
namebuf[nameidx] = c;
@@ -703,7 +702,7 @@ static int yylex_1 (void)
switch (lp_substate) {
case LP_INITIAL_WHITESPACE: /* no number seen yet */
- c = getc(ifp);
+ c = getc_char(ifp);
if (feof(ifp))
return(EOF);
if (c >= '0' && c <= '9') {
@@ -719,7 +718,7 @@ static int yylex_1 (void)
goto again;
case LP_LINE_NUMBER: /* eating linenumber */
- c = getc(ifp);
+ c = getc_char(ifp);
if (feof(ifp))
return(EOF);
if (c >= '0' && c <= '9') {
@@ -736,7 +735,7 @@ static int yylex_1 (void)
goto again;
case LP_PRE_FILENAME_WHITESPACE: /* awaiting filename */
- c = getc(ifp);
+ c = getc_char(ifp);
if (feof(ifp))
return(EOF);
@@ -753,7 +752,7 @@ static int yylex_1 (void)
goto again;
case LP_FILENAME: /* eating filename */
- c = getc(ifp);
+ c = getc_char(ifp);
if (feof(ifp))
return(EOF);
@@ -769,7 +768,7 @@ static int yylex_1 (void)
case LP_POST_FILENAME: /* ignoring rest of line */
case LP_OTHER:
- c = getc(ifp);
+ c = getc_char(ifp);
if (feof(ifp))
return(EOF);
@@ -789,7 +788,6 @@ static int yylex_1 (void)
}
lp_end_of_line:
the_lexer_state = START_STATE;
- at_bol = 1;
nameidx = 0;
}
goto again;
@@ -986,6 +984,11 @@ char *sxerox (const char *s)
char *rv;
rv = (char *) malloc (len+1);
+ if (rv == 0) {
+ fprintf(stderr, "Out of memory...");
+ exit (1);
+ }
+
strcpy (rv, s);
return (rv);
}
diff --git a/vppapigen/node.c b/vppapigen/node.c
index ab8adc568c6..e66fdce846a 100644
--- a/vppapigen/node.c
+++ b/vppapigen/node.c
@@ -1034,7 +1034,7 @@ char *fixup_input_filename(void)
if (*cp == '/')
cp++;
- strcpy (tmpbuf, cp);
+ strncpy (tmpbuf, cp, sizeof(tmpbuf)-1);
cp = tmpbuf;
diff --git a/vppinfra/tools/elftool.c b/vppinfra/tools/elftool.c
index f5d70b56d5f..d9d3704b4a3 100644
--- a/vppinfra/tools/elftool.c
+++ b/vppinfra/tools/elftool.c
@@ -358,10 +358,12 @@ set_interpreter_rpath (elf_tool_main_t * tm)
}
done:
- if (mmap_length > 0)
+ if (mmap_length > 0 && idp)
munmap (idp, mmap_length);
- close (ifd);
- close (ofd);
+ if (ifd >= 0)
+ close (ifd);
+ if (ofd >= 0)
+ close (ofd);
return error;
}
@@ -408,7 +410,10 @@ int main (int argc, char * argv[])
}
if (! tm->input_file)
- clib_error ("no input file");
+ {
+ error = clib_error_return (0, "no input file");
+ goto done;
+ }
/* Do the typical case a stone-simple way... */
if (tm->quiet && tm->set_interpreter && tm->set_rpath && tm->output_file)
diff --git a/vppinfra/vppinfra/asm_x86.c b/vppinfra/vppinfra/asm_x86.c
index d89739cbd90..16e41c249b1 100644
--- a/vppinfra/vppinfra/asm_x86.c
+++ b/vppinfra/vppinfra/asm_x86.c
@@ -1736,6 +1736,7 @@ static u8 * format_x86_reg_operand (u8 * s, va_list * va)
{
default:
ASSERT (0);
+ break;
case 'x':
ASSERT (reg < 16);
@@ -1816,6 +1817,7 @@ static u8 * format_x86_insn_operand (u8 * s, va_list * va)
/* Memory or reg field from modrm byte. */
case 'M':
ASSERT (p->flags & X86_INSN_IS_ADDRESS);
+ /* FALLTHROUGH */
case 'E':
if (p->flags & X86_INSN_IS_ADDRESS)
s = format (s, "%U", format_x86_mem_operand, p);
@@ -1836,7 +1838,7 @@ static u8 * format_x86_insn_operand (u8 * s, va_list * va)
case 'I':
{
u32 l = x86_insn_log2_immediate_bytes (p, insn);
- i64 mask = pow2_mask (8 << l);
+ i64 mask = pow2_mask (8ULL << l);
s = format (s, "$0x%Lx", p->immediate & mask);
}
break;
diff --git a/vppinfra/vppinfra/bitmap.h b/vppinfra/vppinfra/bitmap.h
index 35de1b4819f..17b72ac6c1f 100644
--- a/vppinfra/vppinfra/bitmap.h
+++ b/vppinfra/vppinfra/bitmap.h
@@ -196,7 +196,7 @@ clib_bitmap_get_multiple (uword * bitmap, uword i, uword n_bits)
uword i0, i1, result;
uword l = vec_len (bitmap);
- ASSERT (n_bits >= 0 && n_bits <= BITS (result));
+ ASSERT (n_bits <= BITS (result));
i0 = i / BITS (bitmap[0]);
i1 = i % BITS (bitmap[0]);
@@ -229,7 +229,7 @@ clib_bitmap_set_multiple (uword * bitmap, uword i, uword value, uword n_bits)
{
uword i0, i1, l, t, m;
- ASSERT (n_bits >= 0 && n_bits <= BITS (value));
+ ASSERT (n_bits <= BITS (value));
i0 = i / BITS (bitmap[0]);
i1 = i % BITS (bitmap[0]);
diff --git a/vppinfra/vppinfra/elf.c b/vppinfra/vppinfra/elf.c
index 7fe3048b4c7..71ae1d33d70 100644
--- a/vppinfra/vppinfra/elf.c
+++ b/vppinfra/vppinfra/elf.c
@@ -559,7 +559,8 @@ format_elf_main (u8 * s, va_list * args)
s = format (s, "\nSections %d at file offset 0x%Lx-0x%Lx:\n",
fh->section_header_count,
fh->section_header_file_offset,
- fh->section_header_file_offset + fh->section_header_count * fh->section_header_size);
+ fh->section_header_file_offset +
+ (u64) fh->section_header_count * fh->section_header_size);
s = format (s, "%U\n", format_elf_section, em, 0);
vec_foreach (h, copy)
s = format (s, "%U\n", format_elf_section, em, h);
@@ -1604,7 +1605,7 @@ static void layout_sections (elf_main_t * em)
fh->section_header_file_offset = file_offset;
fh->section_header_count = vec_len (em->sections) - n_deleted_sections;
- file_offset += fh->section_header_count * fh->section_header_size;
+ file_offset += (u64) fh->section_header_count * fh->section_header_size;
}
{
@@ -1809,7 +1810,11 @@ clib_error_t * elf_write_file (elf_main_t * em, char * file_name)
continue;
if (fseek (f, s->header.file_offset, SEEK_SET) < 0)
- return clib_error_return_unix (0, "fseek 0x%Lx", s->header.file_offset);
+ {
+ fclose(f);
+ return clib_error_return_unix (0, "fseek 0x%Lx",
+ s->header.file_offset);
+ }
if (s->header.type == ELF_SECTION_NO_BITS)
/* don't write for .bss sections */;
diff --git a/vppinfra/vppinfra/elf_clib.c b/vppinfra/vppinfra/elf_clib.c
index f3d3b32a8c5..8c705488a4b 100644
--- a/vppinfra/vppinfra/elf_clib.c
+++ b/vppinfra/vppinfra/elf_clib.c
@@ -82,6 +82,9 @@ path_search (char * file)
if (file[0] == '.' || file[0] == '/')
return file;
+ if (getenv("PATH") == 0)
+ return file;
+
ps.path = split_string (getenv ("PATH"), ':');
for (i = 0; i < vec_len (ps.path); i++)
@@ -231,7 +234,10 @@ add_section (struct dl_phdr_info * info, size_t size, void * opaque)
name = path_search (cem->exec_path);
if (! name)
- clib_error ("failed to find %s on PATH", cem->exec_path);
+ {
+ clib_error ("failed to find %s on PATH", cem->exec_path);
+ return 0;
+ }
addr = 0;
}
diff --git a/vppinfra/vppinfra/elog.c b/vppinfra/vppinfra/elog.c
index 06b97d8a390..7ae4ea1d2e2 100644
--- a/vppinfra/vppinfra/elog.c
+++ b/vppinfra/vppinfra/elog.c
@@ -582,6 +582,8 @@ void elog_merge (elog_main_t * dst, u8 * dst_tag,
elog_track_t newt;
int i;
+ memset(&newt, 0, sizeof (newt));
+
elog_get_events (src);
elog_get_events (dst);