svn commit: r195144 - projects/mesh11s/sys/net80211

Rui Paulo rpaulo at FreeBSD.org
Sun Jun 28 17:22:07 UTC 2009


Author: rpaulo
Date: Sun Jun 28 17:22:07 2009
New Revision: 195144
URL: http://svn.freebsd.org/changeset/base/195144

Log:
  Limit mesh_generateid() to 4 iterations and drop a peer link if we can't
  generate random values.
  
  Sponsored by:	The FreeBSD Foundation

Modified:
  projects/mesh11s/sys/net80211/ieee80211_mesh.c

Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun Jun 28 17:15:17 2009	(r195143)
+++ projects/mesh11s/sys/net80211/ieee80211_mesh.c	Sun Jun 28 17:22:07 2009	(r195144)
@@ -304,13 +304,14 @@ mesh_checkid(void *arg, struct ieee80211
 static uint32_t
 mesh_generateid(struct ieee80211vap *vap)
 {
+	int maxiter = 4;
 	uint16_t r;
 
-	/* XXX max iterations? */
 	do {
 		get_random_bytes(&r, 2);
 		ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_checkid, &r);
-	} while (r == 0);
+		maxiter--;
+	} while (r == 0 && maxiter > 0);
 	return r;
 }
 
@@ -734,6 +735,8 @@ mesh_recv_mgmt(struct ieee80211_node *ni
 			union ieee80211_send_action_args sargs;
 
 			ni->ni_mlpid = mesh_generateid(vap);
+			if (ni->ni_mlpid == 0)
+				return;
 			mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENSNT);
 			sargs.arg[0] = ni->ni_mlpid;
 			ieee80211_send_action(ni,
@@ -988,6 +991,8 @@ mesh_recv_action(struct ieee80211_node *
 				    IEEE80211_NODE_MESH_OPENRCV);
 				ni->ni_mllid = meshpeer->peer_llinkid;
 				ni->ni_mlpid = mesh_generateid(vap);
+				if (ni->ni_mlpid == 0)
+					return;
 				sargs.arg[0] = ni->ni_mlpid;
 				/* Announce we're open too... */
 				ieee80211_send_action(ni,


More information about the svn-src-projects mailing list