clients don't associate to 0.1.0 --> AP: drop packet to non-associated STA

Jouni Malinen jkmaline at cc.hut.fi
Sat Oct 18 22:43:37 EDT 2003


On Sat, Oct 18, 2003 at 10:22:45PM +0200, Jirka Bohac wrote:

> In the attachment, you can find 2 files. One is a portion of my syslog.
> It starts with a system boot, with 0.1.0 modules (with your auth.
> reverse patch). I left it running for a while, and just before
> rebooting, I did "arp -n > arp", so you can see that MAC addresses of
> unassociated clients get shown.

Thanks! This showed the two key issues.. First, the error was triggered
after reboot, i.e., in a state where client STAs may still have thought
they were associated with the AP, but the AP did not have this
information. Second, packets were getting through from not associated
STAs.

The last minute cleanup for the WDS interface handling had a bug that
ended up accepting data frames from not associated STAs because driver
thought they were from a WDS link. These frames were corrupted (last six
bytes missing), but were enough to get entries in ARP table. In
addition, since the frames were accepted, AP did not inform the STA that
it is not associated and conserquently, the STA did not re-associate.

Could you please confirm that the attached patch is enough to fix this
issue? This patch is also available in both CVS branches. I will make a
new 0.1.1 release of the hostap-driver package soon. Having a stable
branch in the CVS is already proving useful.. ;-)

-- 
Jouni Malinen                                            PGP id EFC895FA
-------------- next part --------------
diff -upr hostap-driver-0.1.0.orig/driver/modules/hostap_80211_rx.c hostap-driver-0.1.0/driver/modules/hostap_80211_rx.c
--- hostap-driver-0.1.0.orig/driver/modules/hostap_80211_rx.c	2003-10-11 10:11:56.000000000 -0700
+++ hostap-driver-0.1.0/driver/modules/hostap_80211_rx.c	2003-10-18 19:31:43.000000000 -0700
@@ -362,9 +362,8 @@ static inline struct net_device *prism2_
 	read_lock_bh(&local->iface_lock);
 	list_for_each(ptr, &local->hostap_interfaces) {
 		iface = list_entry(ptr, struct hostap_interface, list);
-		if (iface->type != HOSTAP_INTERFACE_WDS)
-			continue;
-		if (memcmp(iface->u.wds.remote_addr, addr, ETH_ALEN) == 0)
+		if (iface->type == HOSTAP_INTERFACE_WDS &&
+		    memcmp(iface->u.wds.remote_addr, addr, ETH_ALEN) == 0)
 			break;
 		iface = NULL;
 	}


More information about the HostAP mailing list