diff options
author | 2018-07-22 12:45:15 +0300 | |
---|---|---|
committer | 2018-07-24 15:15:25 +0000 | |
commit | 456ded496f93eb8156dc6e7b5a81d4a3aa604f60 (patch) | |
tree | 426faba1e7096e963e3d36c61d19c0fea9175205 /src/plugins | |
parent | c16a23c596169e76ee2b5091e2605c543659393d (diff) |
fix vector index range checks (VPP-1353)
Change-Id: I63c36644c9d93f2c3ec6606ca0205b407499de4e
Signed-off-by: Eyal Bari <ebari@cisco.com>
(cherry picked from commit cd30774fa9280736ffaea3e9a51948593e8eebc2)
Signed-off-by: John Lo <loj@cisco.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/acl/acl.c | 4 | ||||
-rw-r--r-- | src/plugins/acl/session_inlines.h | 11 | ||||
-rw-r--r-- | src/plugins/dpdk/device/flow.c | 5 |
3 files changed, 7 insertions, 13 deletions
diff --git a/src/plugins/acl/acl.c b/src/plugins/acl/acl.c index 192dc041d55..2076e5cf5c5 100644 --- a/src/plugins/acl/acl.c +++ b/src/plugins/acl/acl.c @@ -1413,7 +1413,7 @@ acl_interface_add_del_inout_acl (u32 sw_if_index, u8 is_add, u8 is_input, } else { - if (sw_if_index > vec_len (*pinout_acl_vec_by_sw_if_index)) + if (sw_if_index >= vec_len (*pinout_acl_vec_by_sw_if_index)) { rv = VNET_API_ERROR_NO_SUCH_ENTRY; goto done; @@ -3452,7 +3452,7 @@ macip_acl_print (acl_main_t * am, u32 macip_acl_index) int i; /* Don't try to print someone else's memory */ - if (macip_acl_index > vec_len (am->macip_acls)) + if (macip_acl_index >= vec_len (am->macip_acls)) return; macip_acl_list_t *a = vec_elt_at_index (am->macip_acls, macip_acl_index); diff --git a/src/plugins/acl/session_inlines.h b/src/plugins/acl/session_inlines.h index 4d5dfe7587a..0d7c1e4ace7 100644 --- a/src/plugins/acl/session_inlines.h +++ b/src/plugins/acl/session_inlines.h @@ -120,15 +120,10 @@ always_inline fa_session_t * get_session_ptr (acl_main_t * am, u16 thread_index, u32 session_index) { acl_fa_per_worker_data_t *pw = &am->per_worker_data[thread_index]; - if (session_index > vec_len (pw->fa_sessions_pool)) - { - return 0; - } + if (session_index >= vec_len (pw->fa_sessions_pool)) + return 0; - fa_session_t *sess = (session_index > vec_len (pw->fa_sessions_pool)) ? 0 : - pool_elt_at_index (pw->fa_sessions_pool, - session_index); - return sess; + return pool_elt_at_index (pw->fa_sessions_pool, session_index); } always_inline int diff --git a/src/plugins/dpdk/device/flow.c b/src/plugins/dpdk/device/flow.c index becd39704b8..351390b6d34 100644 --- a/src/plugins/dpdk/device/flow.c +++ b/src/plugins/dpdk/device/flow.c @@ -368,11 +368,10 @@ format_dpdk_flow (u8 * s, va_list * args) return s; } - fe = vec_elt_at_index (xd->flow_entries, private_data); - - if (!fe) + if (private_data >= vec_len (xd->flow_entries)) return format (s, "unknown flow"); + fe = vec_elt_at_index (xd->flow_entries, private_data); s = format (s, "mark %u", fe->mark); return s; } |