Browse Source

qcacmn: Delete self ast entry during peer tear down

Delete self ast entry along with other ast entries
belonging to peer during peer tear down

Change-Id: I08373929b7e510d79cd677b12f3ee897c1c6790b
CRs-Fixed: 2776743
Jeevan Kukkalli 4 years ago
parent
commit
60b1d03a3b
1 changed files with 11 additions and 2 deletions
  1. 11 2
      dp/wifi3.0/dp_peer.h

+ 11 - 2
dp/wifi3.0/dp_peer.h

@@ -823,10 +823,19 @@ static inline void dp_peer_delete_ast_entries(struct dp_soc *soc,
 {
 {
 	struct dp_ast_entry *ast_entry, *temp_ast_entry;
 	struct dp_ast_entry *ast_entry, *temp_ast_entry;
 
 
+	/*
+	 * Delete peer self ast entry. This is done to handle scenarios
+	 * where peer is freed before peer map is received(for ex in case
+	 * of auth disallow due to ACL) in such cases self ast is not added
+	 * to peer->ast_list.
+	 */
+	if (peer->self_ast_entry) {
+		dp_peer_del_ast(soc, peer->self_ast_entry);
+		peer->self_ast_entry = NULL;
+	}
+
 	DP_PEER_ITERATE_ASE_LIST(peer, ast_entry, temp_ast_entry)
 	DP_PEER_ITERATE_ASE_LIST(peer, ast_entry, temp_ast_entry)
 		dp_peer_del_ast(soc, ast_entry);
 		dp_peer_del_ast(soc, ast_entry);
-
-	peer->self_ast_entry = NULL;
 }
 }
 #else
 #else
 static inline void dp_peer_delete_ast_entries(struct dp_soc *soc,
 static inline void dp_peer_delete_ast_entries(struct dp_soc *soc,