Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Feb 2011 14:52:43 -0500
From:      Adrian Chadd <adrian@freebsd.org>
To:        Monthadar Al Jaberi <monthadar@gmail.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: [ieee80211_hwmp][panic] hwmp_recv_prep(...)
Message-ID:  <AANLkTikF_WpTw0dt13bJW_sAoVNYUcMpjRDc5TfterLw@mail.gmail.com>
In-Reply-To: <AANLkTi=hVQEd8s3T36j9g6QDYUBTHHrWtQ1raA4nT_ow@mail.gmail.com>
References:  <AANLkTi=hVQEd8s3T36j9g6QDYUBTHHrWtQ1raA4nT_ow@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Besides being a potential DoS vector (and thus panicing on anything
like that =3D=3D bad idea), what legitimate-but-broken circumstances could
cause a node to hear its own announcement?



Adrian


On 15 February 2011 07:00, Monthadar Al Jaberi <monthadar@gmail.com> wrote:
> 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 =A0 =A0 =A0kdb_enter+0x50: lui =A0 =A0 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 =A02010-11-03
> 09:29:25.023610380 +0000
> +++ src/head-current/sys/net80211/ieee80211_hwmp.c =A0 =A0 =A02011-02-15
> 10:06:02.526163874 +0000
> @@ -28,7 +28,7 @@
> =A0*/
> =A0#include <sys/cdefs.h>
> =A0#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 $");
> =A0#endif
>
> =A0/*
> @@ -951,6 +951,12 @@
> =A0 =A0 =A0 =A0if (ni =3D=3D vap->iv_bss ||
> =A0 =A0 =A0 =A0 =A0 =A0ni->ni_mlstate !=3D IEEE80211_NODE_MESH_ESTABLISHE=
D)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return;
> + =A0 =A0 =A0 /*
> + =A0 =A0 =A0 =A0* Ignore PREPs from us. Could happen because someone for=
ward it
> + =A0 =A0 =A0 =A0* back to us.
> + =A0 =A0 =A0 =A0*/
> + =A0 =A0 =A0 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_targetaddr=
))
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 return;
> =A0 =A0 =A0 =A0if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, prep->prep_origaddr=
) &&
> =A0 =A0 =A0 =A0 =A0 =A0!(ms->ms_flags & IEEE80211_MESHFLAGS_FWD))
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return;
>
> --
> //Monthadar Al Jaberi
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org"
>



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