From: Li Xiasong <lixiasong1@huawei.com> hulk inclusion category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/9175 -------------------------------- clean_vecls_sk_rules() releases vecls_sk_rule objects, but leaves vecls_sk_entry objects in vecls_sk_list allocated. Free vecls_sk_list entries during cleanup before walking rule buckets, so both indexes are released on teardown. Signed-off-by: Li Xiasong <lixiasong1@huawei.com> Signed-off-by: Yue Haibing <yuehaibing@huawei.com> --- net/venetcls/venetcls_ntuple.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/net/venetcls/venetcls_ntuple.c b/net/venetcls/venetcls_ntuple.c index 8fc5d8da06fe..c770fa5e69de 100644 --- a/net/venetcls/venetcls_ntuple.c +++ b/net/venetcls/venetcls_ntuple.c @@ -620,6 +620,7 @@ static void clean_vecls_sk_rules(void) { struct vecls_netdev_info *vecls_dev; struct cmd_context ctx = { 0 }; + struct vecls_sk_entry *entry; struct vecls_sk_rule *rule; struct hlist_head *hlist; struct hlist_node *n; @@ -627,6 +628,15 @@ static void clean_vecls_sk_rules(void) int err; mutex_lock(&vecls_sk_rules.mutex); + for (i = 0; i < VECLS_SK_RULE_HASHSIZE; i++) { + hlist = &vecls_sk_list.hash[i]; + + hlist_for_each_entry_safe(entry, n, hlist, node) { + hlist_del_init(&entry->node); + kfree(entry); + } + } + for (i = 0; i < VECLS_SK_RULE_HASHSIZE; i++) { hlist = &vecls_sk_rules.hash[i]; @@ -640,7 +650,7 @@ static void clean_vecls_sk_rules(void) vecls_debug("sk:%p, dev_id:%d, action:%d, ruleid:%d, err:%d\n", rule->sk, rule->devid, rule->action, rule->ruleid, err); - hlist_del(&rule->node); + hlist_del_init(&rule->node); vecls_debug("clean rule=%p\n", rule); kfree(rule); } -- 2.34.1