diff options
author | Andrew Yourtchenko <ayourtch@gmail.com> | 2018-10-16 17:18:26 +0200 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2018-10-17 07:57:25 +0000 |
commit | ad65f88c51379c24580c3a986be806a5091c5396 (patch) | |
tree | 03dc9a57ab699de0f36042b7aaea6c12d7653502 /src/plugins/acl/hash_lookup.c | |
parent | d6fe5bd60671c5f274c290abf08df074510c952b (diff) |
acl-plugin: tuplemerge: refresh the pointer to hash-readied ACL entries per each collision in split_partition() (VPP-1458)
A pointer to hash-ready ACL rules is only set once, which might cause a crash if there are colliding entries
from more than one ACL applied.
Solution: reload the pointer based on the element being processed.
Change-Id: I7a701c2c3b4236d67293159f2a33c4f967168953
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
(cherry picked from commit 84112dd4f98e5a31a8c7340a741f89e77fd03363)
Diffstat (limited to 'src/plugins/acl/hash_lookup.c')
-rw-r--r-- | src/plugins/acl/hash_lookup.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/plugins/acl/hash_lookup.c b/src/plugins/acl/hash_lookup.c index c37aae44a98..0087a5e2ab7 100644 --- a/src/plugins/acl/hash_lookup.c +++ b/src/plugins/acl/hash_lookup.c @@ -1487,6 +1487,8 @@ split_partition(acl_main_t *am, u32 first_index, int i=0; u64 collisions = vec_len(pae->colliding_rules); for(i=0; i<collisions; i++){ + /* reload the hash acl info as it might be a different ACL# */ + ha = vec_elt_at_index(am->hash_acl_infos, pae->acl_index); DBG( "TM-collision: base_ace:%d (ace_mask:%d, first_collision_mask:%d)", pae->ace_index, pae->mask_type_index, coll_mask_type_index); |