acl-plugin: tuplemerge: refresh the pointer to hash-readied ACL entries per each... 29/15329/1
authorAndrew Yourtchenko <ayourtch@gmail.com>
Tue, 16 Oct 2018 15:18:26 +0000 (17:18 +0200)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Wed, 17 Oct 2018 07:57:25 +0000 (07:57 +0000)
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)

src/plugins/acl/hash_lookup.c

index c37aae4..0087a5e 100644 (file)
@@ -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);