Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 15 Feb 2011 13:00:54 +0100
From:      Monthadar Al Jaberi <monthadar@gmail.com>
To:        freebsd-net@freebsd.org
Subject:   [ieee80211_hwmp][panic] hwmp_recv_prep(...)
Message-ID:  <AANLkTi=hVQEd8s3T36j9g6QDYUBTHHrWtQ1raA4nT_ow@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hej,

I found that a panic can be generated when having a couple of
ieee80211s nodes in a line topology with one of them being a ROOT
node. A ping from ROOT in a newly started nodes causes a panic:
panic: ieee80211_mesh_rt_add: adding self to the routing table
KDB: enter: panic
[ thread pid 0 tid 100030 ]
Stopped at      kdb_enter+0x50: lui     at,0x804e
db>

This is because we receive a copy of our own generated
IEEE80211_ELEMID_MESHPREP packet from our neighbor node.
I added check code in the begining of hwmp_recv_prep(...) similar to
the check code found in hwmp_recv_preq(...). Here is a diff output:

--- freebsd/head/sys/net80211/ieee80211_hwmp.c	2010-11-03
09:29:25.023610380 +0000
+++ src/head-current/sys/net80211/ieee80211_hwmp.c	2011-02-15
10:06:02.526163874 +0000
@@ -28,7 +28,7 @@
  */
 #include <sys/cdefs.h>
 #ifdef __FreeBSD__
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: src/sys/net80211/ieee80211_hwmp.c,v 1.4.2.7.2.1
2010/12/21 17:09:25 kensmith Exp $");
 #endif

 /*
@@ -951,6 +951,12 @@
 	if (ni == vap->iv_bss ||
 	    ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED)
 		return;
+	/*
+	 * Ignore PREPs from us. Could happen because someone forward it
+	 * back to us.
+	 */
+	if (IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_targetaddr))
+		return;
 	if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_origaddr) &&
 	    !(ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
 		return;

-- 
//Monthadar Al Jaberi



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTi=hVQEd8s3T36j9g6QDYUBTHHrWtQ1raA4nT_ow>