From 456ded496f93eb8156dc6e7b5a81d4a3aa604f60 Mon Sep 17 00:00:00 2001 From: Eyal Bari Date: Sun, 22 Jul 2018 12:45:15 +0300 Subject: fix vector index range checks (VPP-1353) Change-Id: I63c36644c9d93f2c3ec6606ca0205b407499de4e Signed-off-by: Eyal Bari (cherry picked from commit cd30774fa9280736ffaea3e9a51948593e8eebc2) Signed-off-by: John Lo --- src/vnet/gre/interface.c | 2 +- src/vnet/ip/ip6_neighbor.c | 2 +- src/vnet/ipip/ipip.c | 2 +- src/vnet/mpls/interface.c | 2 +- src/vnet/mpls/mpls_tunnel.c | 2 +- src/vnet/unix/gdb_funcs.c | 2 +- src/vnet/util/trajectory.c | 2 +- src/vnet/vxlan/vxlan.c | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/vnet') diff --git a/src/vnet/gre/interface.c b/src/vnet/gre/interface.c index 0822cd74b52..70c6c4df3b3 100644 --- a/src/vnet/gre/interface.c +++ b/src/vnet/gre/interface.c @@ -135,7 +135,7 @@ gre_tunnel_stack (adj_index_t ai) adj = adj_get (ai); sw_if_index = adj->rewrite_header.sw_if_index; - if ((vec_len (gm->tunnel_index_by_sw_if_index) < sw_if_index) || + if ((vec_len (gm->tunnel_index_by_sw_if_index) <= sw_if_index) || (~0 == gm->tunnel_index_by_sw_if_index[sw_if_index])) return; diff --git a/src/vnet/ip/ip6_neighbor.c b/src/vnet/ip/ip6_neighbor.c index a6227fc413a..e3919383efc 100644 --- a/src/vnet/ip/ip6_neighbor.c +++ b/src/vnet/ip/ip6_neighbor.c @@ -4239,7 +4239,7 @@ ip6_get_ll_address (u32 sw_if_index, ip6_address_t * addr) ip6_radv_t *radv_info; u32 ri; - if (vec_len (nm->if_radv_pool_index_by_sw_if_index) < sw_if_index) + if (vec_len (nm->if_radv_pool_index_by_sw_if_index) <= sw_if_index) return 0; ri = nm->if_radv_pool_index_by_sw_if_index[sw_if_index]; diff --git a/src/vnet/ipip/ipip.c b/src/vnet/ipip/ipip.c index a47704a62e6..c49be099d9a 100644 --- a/src/vnet/ipip/ipip.c +++ b/src/vnet/ipip/ipip.c @@ -355,7 +355,7 @@ ipip_tunnel_t * ipip_tunnel_db_find_by_sw_if_index (u32 sw_if_index) { ipip_main_t *gm = &ipip_main; - if (vec_len (gm->tunnel_index_by_sw_if_index) < sw_if_index) + if (vec_len (gm->tunnel_index_by_sw_if_index) <= sw_if_index) return NULL; u32 ti = gm->tunnel_index_by_sw_if_index[sw_if_index]; if (ti == ~0) diff --git a/src/vnet/mpls/interface.c b/src/vnet/mpls/interface.c index c792d56b12e..ec541f760de 100644 --- a/src/vnet/mpls/interface.c +++ b/src/vnet/mpls/interface.c @@ -29,7 +29,7 @@ mpls_sw_interface_is_enabled (u32 sw_if_index) { mpls_main_t * mm = &mpls_main; - if (vec_len(mm->mpls_enabled_by_sw_if_index) < sw_if_index) + if (vec_len(mm->mpls_enabled_by_sw_if_index) <= sw_if_index) return (0); return (mm->mpls_enabled_by_sw_if_index[sw_if_index]); diff --git a/src/vnet/mpls/mpls_tunnel.c b/src/vnet/mpls/mpls_tunnel.c index a142edf3f0a..84d569bcfee 100644 --- a/src/vnet/mpls/mpls_tunnel.c +++ b/src/vnet/mpls/mpls_tunnel.c @@ -52,7 +52,7 @@ static const char *mpls_tunnel_attribute_names[] = MPLS_TUNNEL_ATTRIBUTES; static mpls_tunnel_t* mpls_tunnel_get_from_sw_if_index (u32 sw_if_index) { - if ((vec_len(mpls_tunnel_db) < sw_if_index) || + if ((vec_len(mpls_tunnel_db) <= sw_if_index) || (~0 == mpls_tunnel_db[sw_if_index])) return (NULL); diff --git a/src/vnet/unix/gdb_funcs.c b/src/vnet/unix/gdb_funcs.c index 41ae3bdca67..d78773edf07 100644 --- a/src/vnet/unix/gdb_funcs.c +++ b/src/vnet/unix/gdb_funcs.c @@ -131,7 +131,7 @@ vlib_runtime_index_to_node_name (u32 index) vlib_main_t *vm = vlib_get_main (); vlib_node_main_t *nm = &vm->node_main; - if (index > vec_len (nm->nodes)) + if (index >= vec_len (nm->nodes)) { fformat (stderr, "%d out of range, max %d\n", vec_len (nm->nodes)); return; diff --git a/src/vnet/util/trajectory.c b/src/vnet/util/trajectory.c index 91812dcba58..2538c7ee64a 100644 --- a/src/vnet/util/trajectory.c +++ b/src/vnet/util/trajectory.c @@ -44,7 +44,7 @@ vnet_dump_trajectory_trace (vlib_main_t * vm, u32 bi) node_index = trace[i]; - if (node_index > vec_len (vnm->nodes)) + if (node_index >= vec_len (vnm->nodes)) { fformat (stderr, "Skip bogus node index %d\n", node_index); continue; diff --git a/src/vnet/vxlan/vxlan.c b/src/vnet/vxlan/vxlan.c index e1ee3486b4b..f0312bed9b1 100644 --- a/src/vnet/vxlan/vxlan.c +++ b/src/vnet/vxlan/vxlan.c @@ -1124,7 +1124,7 @@ vnet_vxlan_get_tunnel_index (u32 sw_if_index) { vxlan_main_t *vxm = &vxlan_main; - if (sw_if_index > vec_len (vxm->tunnel_index_by_sw_if_index)) + if (sw_if_index >= vec_len (vxm->tunnel_index_by_sw_if_index)) return ~0; return vxm->tunnel_index_by_sw_if_index[sw_if_index]; } -- cgit 1.2.3-korg